aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-10-07 04:28:33 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2016-10-07 04:28:33 +0200
commit561639a68c6a5468eaa95912592f9d01ba9dcbdd (patch)
tree048c545b88dbdd391e1ef7f03ac395dd26badb07 /shell/ash.c
parentd43be8759100d34849bc6dbd94b1e20b81615d35 (diff)
downloadbusybox-w32-561639a68c6a5468eaa95912592f9d01ba9dcbdd.tar.gz
busybox-w32-561639a68c6a5468eaa95912592f9d01ba9dcbdd.tar.bz2
busybox-w32-561639a68c6a5468eaa95912592f9d01ba9dcbdd.zip
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>
Diffstat (limited to 'shell/ash.c')
-rw-r--r--shell/ash.c6
1 files 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)
8248 funcblocksize = calcsize(funcblocksize, n->nif.test); 8248 funcblocksize = calcsize(funcblocksize, n->nif.test);
8249 break; 8249 break;
8250 case NFOR: 8250 case NFOR:
8251 funcblocksize += strlen(n->nfor.var) + 1; /* was funcstringsize += ... */ 8251 funcblocksize += SHELL_ALIGN(strlen(n->nfor.var) + 1); /* was funcstringsize += ... */
8252 funcblocksize = calcsize(funcblocksize, n->nfor.body); 8252 funcblocksize = calcsize(funcblocksize, n->nfor.body);
8253 funcblocksize = calcsize(funcblocksize, n->nfor.args); 8253 funcblocksize = calcsize(funcblocksize, n->nfor.args);
8254 break; 8254 break;
@@ -8264,7 +8264,7 @@ calcsize(int funcblocksize, union node *n)
8264 case NDEFUN: 8264 case NDEFUN:
8265 case NARG: 8265 case NARG:
8266 funcblocksize = sizenodelist(funcblocksize, n->narg.backquote); 8266 funcblocksize = sizenodelist(funcblocksize, n->narg.backquote);
8267 funcblocksize += strlen(n->narg.text) + 1; /* was funcstringsize += ... */ 8267 funcblocksize += SHELL_ALIGN(strlen(n->narg.text) + 1); /* was funcstringsize += ... */
8268 funcblocksize = calcsize(funcblocksize, n->narg.next); 8268 funcblocksize = calcsize(funcblocksize, n->narg.next);
8269 break; 8269 break;
8270 case NTO: 8270 case NTO:
@@ -8298,7 +8298,7 @@ calcsize(int funcblocksize, union node *n)
8298static char * 8298static char *
8299nodeckstrdup(char *s) 8299nodeckstrdup(char *s)
8300{ 8300{
8301 funcstring_end -= strlen(s) + 1; 8301 funcstring_end -= SHELL_ALIGN(strlen(s) + 1);
8302 return strcpy(funcstring_end, s); 8302 return strcpy(funcstring_end, s);
8303} 8303}
8304 8304