diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-07 04:28:33 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-10-07 04:28:33 +0200 |
commit | 561639a68c6a5468eaa95912592f9d01ba9dcbdd (patch) | |
tree | 048c545b88dbdd391e1ef7f03ac395dd26badb07 /shell/ash.c | |
parent | d43be8759100d34849bc6dbd94b1e20b81615d35 (diff) | |
download | busybox-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.c | 6 |
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) | |||
8298 | static char * | 8298 | static char * |
8299 | nodeckstrdup(char *s) | 8299 | nodeckstrdup(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 | ||