From 561639a68c6a5468eaa95912592f9d01ba9dcbdd Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 7 Oct 2016 04:28:33 +0200 Subject: [PATCH] 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 --- shell/ash.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shell/ash.c b/shell/ash.c index 4ab2f2077..50f479d1a 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -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); }