[PATCH] expand: Fix leading white space regression in ifsbreakup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Martijn Dekker <martijn@xxxxxxxx> wrote:
> As of commit c0674f487c7aec2a3bdf6795cea7e60c9530c360, field splitting is 
> broken. Minimal-ish reproducer:
> 
> $ dash -c 'IFS=:; v=" :: :: "; set $v; echo $#'
> 5
> 
> Expected output: 2
> 
> FYI, this is a nice cross-platform script for testing for field splitting 
> regressions (on dash as well):
> 
> http://web.archive.org/web/20051225040851/http://www.research.att.com/~gsf/public/ifs.sh
> 
> Dash passes this prior to the referenced commit, and fails it after, in 
> informative ways.

Thanks for the report.  This patch should fix the problem:

---8<---
When leading white spaces are detected in ifsbreakup ifsspc needs
to be cleared.

Reported-by: Martijn Dekker <martijn@xxxxxxxx>
Fixes: c0674f487c7a ("expand: Support multi-byte characters during field splitting")
Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
---
 src/expand.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/expand.c b/src/expand.c
index 6912e39..5285b79 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -1282,7 +1282,7 @@ static char *ifsbreakup_slow(struct ifs_state *ifst, struct arglist *arglist,
 		/* Ignore IFS whitespace at start */
 		if (q == ifst->start && ifsspc) {
 			ifst->start = p;
-			return p;
+			goto out_zero_ifsspc;
 		}
 		if (ifst->maxargs > 0 && !--ifst->maxargs) {
 			ifst->r = q;
@@ -1297,6 +1297,7 @@ static char *ifsbreakup_slow(struct ifs_state *ifst, struct arglist *arglist,
 		return p;
 	}
 
+out_zero_ifsspc:
 	ifst->ifsspc = 0;
 	return p;
 }
-- 
2.39.2
-- 
Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux