diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-06-25 02:09:41 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-06-25 02:09:41 +0200 |
commit | 53a7a9cd8c15d64fcc2278cf8981ba526dfbe0d2 (patch) | |
tree | 82b929b38153d536da60dde5ca7e6938cf26a0ff | |
parent | ad57e4e4b23926002ce72979729b017520bef1d0 (diff) | |
download | busybox-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.c | 9 |
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 | } |