aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-06-25 02:09:41 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-06-25 02:09:41 +0200
commit53a7a9cd8c15d64fcc2278cf8981ba526dfbe0d2 (patch)
tree82b929b38153d536da60dde5ca7e6938cf26a0ff
parentad57e4e4b23926002ce72979729b017520bef1d0 (diff)
downloadbusybox-w32-53a7a9cd8c15d64fcc2278cf8981ba526dfbe0d2.tar.gz
busybox-w32-53a7a9cd8c15d64fcc2278cf8981ba526dfbe0d2.tar.bz2
busybox-w32-53a7a9cd8c15d64fcc2278cf8981ba526dfbe0d2.zip
ash: parser: Fix VSLENGTH parsing with trailing garbage
Let's adopt Herbert Xu's patch, not waiting for it to reach dash git: hush already has a similar fix. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/shell/ash.c b/shell/ash.c
index bee81920a..2eac6e113 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -12751,7 +12751,7 @@ parsesub: {
12751 do { 12751 do {
12752 STPUTC(c, out); 12752 STPUTC(c, out);
12753 c = pgetc_eatbnl(); 12753 c = pgetc_eatbnl();
12754 } while (!subtype && isdigit(c)); 12754 } while ((subtype == 0 || subtype == VSLENGTH) && isdigit(c));
12755 } else if (c != '}') { 12755 } else if (c != '}') {
12756 /* $[{[#]]<specialchar>[}] */ 12756 /* $[{[#]]<specialchar>[}] */
12757 int cc = c; 12757 int cc = c;
@@ -12781,11 +12781,6 @@ parsesub: {
12781 } else 12781 } else
12782 goto badsub; 12782 goto badsub;
12783 12783
12784 if (c != '}' && subtype == VSLENGTH) {
12785 /* ${#VAR didn't end with } */
12786 goto badsub;
12787 }
12788
12789 if (subtype == 0) { 12784 if (subtype == 0) {
12790 static const char types[] ALIGN1 = "}-+?="; 12785 static const char types[] ALIGN1 = "}-+?=";
12791 /* ${VAR...} but not $VAR or ${#VAR} */ 12786 /* ${VAR...} but not $VAR or ${#VAR} */
@@ -12842,6 +12837,8 @@ parsesub: {
12842#endif 12837#endif
12843 } 12838 }
12844 } else { 12839 } else {
12840 if (subtype == VSLENGTH && c != '}')
12841 subtype = 0;
12845 badsub: 12842 badsub:
12846 pungetc(); 12843 pungetc();
12847 } 12844 }