ash: all blocks in function node copying must be SHELL_ALIGNed
Previous commit probably introduced a bug: non-matching size calculation in size counting and actual copying caused by SHELL_ALIGN being applied differently! This won't bite if string sizes are also SHELL_ALIGNed. Thus fixing. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d43be87591
commit
561639a68c
@ -8248,7 +8248,7 @@ calcsize(int funcblocksize, union node *n)
|
||||
funcblocksize = calcsize(funcblocksize, n->nif.test);
|
||||
break;
|
||||
case NFOR:
|
||||
funcblocksize += strlen(n->nfor.var) + 1; /* was funcstringsize += ... */
|
||||
funcblocksize += SHELL_ALIGN(strlen(n->nfor.var) + 1); /* was funcstringsize += ... */
|
||||
funcblocksize = calcsize(funcblocksize, n->nfor.body);
|
||||
funcblocksize = calcsize(funcblocksize, n->nfor.args);
|
||||
break;
|
||||
@ -8264,7 +8264,7 @@ calcsize(int funcblocksize, union node *n)
|
||||
case NDEFUN:
|
||||
case NARG:
|
||||
funcblocksize = sizenodelist(funcblocksize, n->narg.backquote);
|
||||
funcblocksize += strlen(n->narg.text) + 1; /* was funcstringsize += ... */
|
||||
funcblocksize += SHELL_ALIGN(strlen(n->narg.text) + 1); /* was funcstringsize += ... */
|
||||
funcblocksize = calcsize(funcblocksize, n->narg.next);
|
||||
break;
|
||||
case NTO:
|
||||
@ -8298,7 +8298,7 @@ calcsize(int funcblocksize, union node *n)
|
||||
static char *
|
||||
nodeckstrdup(char *s)
|
||||
{
|
||||
funcstring_end -= strlen(s) + 1;
|
||||
funcstring_end -= SHELL_ALIGN(strlen(s) + 1);
|
||||
return strcpy(funcstring_end, s);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user