# HG changeset patch # User Rik # Date 1681841357 25200 # Node ID 1824e0ee40885d1a23754c5d047ae2bbb8436d33 # Parent bc681594872af02655df05c7aca694d8b2435434 Stop excessive memory usage for minor grid ticks (bug #64017). * graphics.cc (calc_ticks_and_lims): Cap the number of minor ticks above or below the current tick range at 1000 (configurable constant). diff -r bc681594872a -r 1824e0ee4088 libinterp/corefcn/graphics.cc --- a/libinterp/corefcn/graphics.cc Tue Apr 18 15:09:35 2023 +0200 +++ b/libinterp/corefcn/graphics.cc Tue Apr 18 11:09:17 2023 -0700 @@ -8215,6 +8215,7 @@ return; // minor ticks between, above, and below min and max ticks + const int MAX_MINOR_TICKS = 1000; int n = (is_logscale ? 8 : 4); double mult_below = (is_logscale ? tmp_ticks(1) / tmp_ticks(0) : 1); double mult_above = (is_logscale ? tmp_ticks(n_ticks-1) / tmp_ticks(n_ticks-2) @@ -8224,6 +8225,9 @@ int n_below = static_cast (std::floor ((tmp_ticks(0)-lo_lim) / d_below)); if (n_below < 0) n_below = 0; + else if (n_below > MAX_MINOR_TICKS) + n_below = MAX_MINOR_TICKS; + int n_between = n * (n_ticks - 1); double d_above = (tmp_ticks(n_ticks-1) - tmp_ticks(n_ticks-2)) * mult_above / (n+1); @@ -8231,6 +8235,8 @@ / d_above)); if (n_above < 0) n_above = 0; + else if (n_above > MAX_MINOR_TICKS) + n_above = MAX_MINOR_TICKS; Matrix tmp_mticks (1, n_below + n_between + n_above); for (int i = 0; i < n_below; i++)