2022年11月20日(日) 23:07 Ralf Oehler <r...@oehler-privat.de>: > Bash Version: 5.2 > Patch Level: 2 > Release Status: release > > Description: > [Detailed description of the problem, suggestion, or > complaint.] > I want to read an associative array. Like so: y="${aa[$i]}" > If aa contains the element queried, then everything works as > expected > If aa does not contain such an element, the result is the > empty string, which is expected, but the query permanently > increases the memory consumption of the executing bash, > which is not expected. The program below demonstrates this > behaviour. When run, the bash process increases its memory > indefinitely.
I also noticed a memory leak early this month in testing my new extglob implementation and was planning to submit a patch later. I now checked this report and confirmed that this is actually caused by the same part of the code. Here, I attach my patch [r0037.parameter_brace_expand_word.memleak.patch], though I haven't yet carefully tested it because I originally planned to submit it sometime later. -- Koichi
From 4183e204ea0f954de42dea6ba2ec0f47a061f7f3 Mon Sep 17 00:00:00 2001 From: Koichi Murase <myoga.mur...@gmail.com> Date: Thu, 3 Nov 2022 14:01:41 +0900 Subject: [PATCH 1/2] fix memleak in parameter_brace_expand_word --- subst.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subst.c b/subst.c index 7ec8f8e9..a018b1b1 100644 --- a/subst.c +++ b/subst.c @@ -7507,8 +7507,6 @@ expand_arrayref: ? quote_string (temp) : quote_escapes (temp); rflags |= W_ARRAYIND; - if (estatep) - *estatep = es; /* structure copy */ } /* Note that array[*] and array[@] expanded to a quoted null string by returning the W_HASQUOTEDNULL flag to the caller in addition to TEMP. */ @@ -7517,7 +7515,9 @@ expand_arrayref: else if (es.subtype == 2 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) rflags |= W_HASQUOTEDNULL; - if (estatep == 0) + if (etastep) + *estatep = es; /* structure copy */ + else flush_eltstate (&es); } #endif -- 2.37.2