During macro expansion (with arguments), there is one global buffer (exp_buf) that keeps getting reallocated to fit all the macro's text that's currently being expanded. The problem with this scheme is that if a macro with arguments needs to be expanded from the macro text of another macro with arguments, it may happen that the second expansion forces the above exp_buf buffer to be reallocated. Which is fine until the previous macro processing resumes where (struct include_stack_t *)->str now points to uninitialised memory. Basically, the code that can trigger such behaviour is as follows: `define FOO(a) (a+3) `define BAR(b) (`FOO(b)+2) `BAR(x) Ofcourse, you need to get lucky to get the exp_buf to be realloced at the right point, but it's possible. I don't see the advantage in keeping all the expanding macro's text together, so my solution is to simply allocate a new buffer and pass it as (struct include_stack_t *)->str to the flex parsing function and free it at the end. |
||
|---|---|---|
| .. | ||
| Makefile.in | ||
| globals.h | ||
| ivlpp.txt | ||
| lexor.lex | ||
| main.c | ||