Mercurial > octave
changeset 32033:1824e0ee4088 stable
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).
author | Rik <rik@octave.org> |
---|---|
date | Tue, 18 Apr 2023 11:09:17 -0700 |
parents | bc681594872a |
children | 43e4c7f59889 f18da620ab4d |
files | libinterp/corefcn/graphics.cc |
diffstat | 1 files changed, 6 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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<int> (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++)