[Toybox] [PATCH] Fix the operator precedence in expr.
Rob Landley
rob at landley.net
Wed Mar 16 15:00:08 PDT 2016
On 03/16/2016 01:34 PM, Andy Chu wrote:
>> if (p<*toys.optargs || p>toys.optargs[toys.optc-1]) not_argv();
>>
>> It would be nice to free this data ourselves because expr is close to
>> $((1+2)) in the shell, and it would be nice if the shell could just
>> internall call expr nofork in that case.
>
> I attached to a patch to track the strings allocated and then free
> them at the end.
I've already started cleanup on this command, but I'll integrate this
with what I've got.
> (Note that there is NOT a "node" per argument ('struct value' which
> which contains an int or string). The nodes are on the stack and used
> destructively in the style of a *= b, a += b, etc. What we are
> talking about is the strings that the nodes (may) point to. These are
> almost always argv strings which don't need to be freed, but in the 2
> cases I mentioned, we allocate them.
I noticed that during review earlier today, but hadn't gotten to the
point of doing anything about that yet. :)
> So now this is fixed, and I tested it with ASAN (with LLVM 3.8 which
> can be downloaded easily). It easily finds the memory leak before
> (only the regex test cases where we allocate memory fail, not every
> test case) and confirms they pass after the patch.
>
> ASAN also found another existing memory leak in the code! (not
> calling regfree()) When I'm triaging the tests I'll definitely see
> which ones pass under ASAN too.
Sounds like fun. I hope to have this done and promoted for the next
release. (Ballpark end of April.)
> Andy
Rob
More information about the Toybox
mailing list