Menu

#154 expandmacro() limited to 9 parameters - crashes with more

v1.0_(example)
open
nobody
None
1
2015-01-28
2015-01-28
No

expanmacro() is hard coded to accept no more than 9 parameters:

char *args[9], *dmacro, *macro_piece, *next_piece, *expanded, *buffer=NULL, *cs;

We ran into stack smashing with something with 10 args:

intro.txt:140 rec=1 {{ expandmacro...
intro.txt:140 rec=1 {{ expandmacro: contents '\leftmargin \leftmargini \topsep 9\p@ plus3\p@ minus5\p@ \parsep 4.5\p@ plus2\p@ minus\p@ \itemsep \parsep '
intro.txt:140 rec=1 {{ expandmacro: optional '(null)'
intro.txt:140 rec=1 {{ expandmacro: num args 10
intro.txt:140 rec=1 {{ Macro #1 --> '}'
intro.txt:140 rec=1 {{ Macro #2 --> '1cm'
intro.txt:140 rec=1 {{ Macro #3 --> '%'
intro.txt:140 rec=1 {{ Macro #4 --> 'l'
intro.txt:140 rec=1 {{ Macro #5 --> 'e'
intro.txt:140 rec=1 {{ Macro #6 --> 'f'
intro.txt:140 rec=1 {{ Macro #7 --> 't'
intro.txt:140 rec=1 {{ Macro #8 --> 'm'
intro.txt:140 rec=1 {{ Macro #9 --> 'a'
intro.txt:140 rec=1 {{ Macro #10 --> 'r'
intro.txt:140 rec=1 {{ expandmacro: buff_size = 631

intro.txt:140 rec=1 {{ expandmacro: after removing cs crap '\leftmargin \leftmargini \topsep 9\p@ plus3\p@ minus5\p@ \parsep 4.5\p@ plus2\p@ minus\p@ \itemsep \parsep '
intro.txt:140 rec=1 {{ expandmacro: next section of macro before '#' is '\leftmargin \leftmargini \topsep 9\p@ plus3\p@ minus5\p@ \parsep 4.5\p@ plus2\p@ minus\p@ \itemsep \parsep '
intro.txt:140 rec=1 {{ expandmacro: before appending next piece '\leftmargin \leftmargini \topsep 9\p@ plus3\p@ minus5\p@ \parsep 4.5\p@ plus2\p@ minus\p@ \itemsep \parsep '
intro.txt:140 {{ expandmacro: result is '\leftmargin \leftmargini \topsep 9\p@ plus3\p@ minus5\p@ \parsep 4.5\p@ plus2\p@ minus\p@ \itemsep \parsep ' stack smashing detected : latex2rtf terminated

I'm not sure what a reasonable maximum here is or if one should just move to dynamic allocation.

Discussion


Log in to post a comment.