From 561639a68c6a5468eaa95912592f9d01ba9dcbdd Mon Sep 17 00:00:00 2001
From: Denys Vlasenko <vda.linux@googlemail.com>
Date: Fri, 7 Oct 2016 04:28:33 +0200
Subject: 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>
---
 shell/ash.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'shell')

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);
 }
 
-- 
cgit v1.2.3-55-g6feb