> If it's at the end of expr_main() we don't care. However, if leaks
> per-input and we have unlimited input... (I believe the current linux
> environment space limit is INT_MAX arguments each INT_MAX long, modulo
> ulimit applying something to that maybe?)
>
> This sounds per-argument, so I'd want to free it when it's done
> with it if we can. (I need to read the code after applying your
> patches.)

OK great, some notes on memory management for when you review:

expr is a pure function of the argv, and the implementation almost
always uses the constant argv strings, which we don't need to manage.
The two exceptions are:

- re() -- when you do expr foo : 'f\(.*\)', the resulting captured
string "oo" has to go somewhere
- type coercion of integers: if you do expr 2 + 3 \< abcd  -- 5 on the
LHS is converted to "5" by get_str(), called from eval_op().

So if you don't do any of those things, you won't get any leaks.  In
the worst case, you could have one leak for every 3 or 4 argv entries
(you can't make it leak for every entry AFAICT).  And the captured
string is smaller than the length of a single arg, which is limited to
131072 bytes on Linux I think.

http://www.in-ulm.de/~mascheck/various/argmax/

In practice I don't think it will matter because I don't think people
are really writing huge expressions with expr, because it will get
unreadable.  It has no intermediate variables -- it would have to be a
single huge expression that does tons of regex captures or mixes types
a lot.

I was thinking to clean up in expr_main -- cleaning up more
aggressively would be a little tricky since get_str() only allocates
conditionally.  But I guess you're saying that isn't worth it since
the process will be torn down.

And yes it definitely helps to have code in pending, so I'm all for
putting unfinished / untested stuff there!  (Though what I'm surprised
by is that I started up ConnectBot on my Nexus 5X phone and was able
to tickle bugs which already have failing test cases!  Like the
precedence bugs in expr.)

thanks,
Andy
_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to