From: Denys Vlasenko Date: Mon, 17 Nov 2014 19:27:18 +0000 (+0100) Subject: ash: fix handling of negative start value in ${v:start:len} X-Git-Tag: 1_23_0~26 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=08a5dab181fa4c28b7636c35021308e1e12e7b59;p=oweals%2Fbusybox.git ash: fix handling of negative start value in ${v:start:len} function old new delta subevalvar 1140 1168 +28 Signed-off-by: Denys Vlasenko --- diff --git a/shell/ash.c b/shell/ash.c index 705fe9fa4..90fb00fbd 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -6411,7 +6411,15 @@ subevalvar(char *p, char *varname, int strloc, int subtype, len = number(loc); } } - if (pos >= orig_len) { + if (pos < 0) { + /* ${VAR:$((-n)):l} starts n chars from the end */ + pos = orig_len + pos; + } + if ((unsigned)pos >= orig_len) { + /* apart from obvious ${VAR:999999:l}, + * covers ${VAR:$((-9999999)):l} - result is "" + * (bash-compat) + */ pos = 0; len = 0; }