* Rich Felker [2014-07-27 14:00:41 -0400]: > On Sun, Jul 27, 2014 at 07:51:26PM +0200, Szabolcs Nagy wrote: > > > >From what I can tell, that's not so bad. Anyone feel like writing an > > > expression evaluator for it? I think recursive descent is fine as long > > > as the length of the string being evaluated is capped at a sane length > > > (or just keep a depth counter and abort the evaluation if it exceeds > > > some reasonable limit). > > > > > > > i can try > > OK. Some thoughts on implementation: It should probably accept the > expression as a base+length rather than a C string so it can be used > in-place from within the mo file "header" (this design might help for > recursion anyway I suppose). And it should be safe against malicious > changes to the expression during evaluation (at worst give wrong > results or error out rather than risk of stack overflow, out-of-bounds > reads, etc.) since I'm aiming to make the whole system safe against > malicious translation files (assuming the caller doesn't use the > results in unsafe ways like as a format string). > ok i did something i parse the expression once and then do the eval separately so "changes to the expression during evaluation" does not apply (i expected the expr to be const and evaluated several times with different n) currently it checks if base[length-1] == ';' and then does not care about the length anymore, the first unexpected char ends the parsing the parser and eval code is about 2k now, i can try to do it without a separate parsing step (my approach requires a 100-200 byte buffer to store the parsed expr now)