ash: fix a SEGV in ${#1}
function old new delta varvalue 760 805 +45 evalvar 648 603 -45 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
8074a6ca4d
commit
c76236fd7d
18
shell/ash.c
18
shell/ash.c
@ -6746,6 +6746,14 @@ varvalue(char *name, int varflags, int flags, struct strlist *var_str_list)
|
||||
len = strlen(p);
|
||||
if (!(subtype == VSPLUS || subtype == VSLENGTH))
|
||||
memtodest(p, len, syntax, quotes);
|
||||
#if ENABLE_UNICODE_SUPPORT
|
||||
if (subtype == VSLENGTH && len > 0) {
|
||||
reinit_unicode_for_ash();
|
||||
if (unicode_status == UNICODE_ON) {
|
||||
len = unicode_strlen(p);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return len;
|
||||
}
|
||||
|
||||
@ -6829,15 +6837,7 @@ evalvar(char *p, int flags, struct strlist *var_str_list)
|
||||
varunset(p, var, 0, 0);
|
||||
|
||||
if (subtype == VSLENGTH) {
|
||||
ssize_t n = varlen;
|
||||
if (n > 0) {
|
||||
reinit_unicode_for_ash();
|
||||
if (unicode_status == UNICODE_ON) {
|
||||
const char *val = lookupvar(var);
|
||||
n = unicode_strlen(val);
|
||||
}
|
||||
}
|
||||
cvtnum(n > 0 ? n : 0);
|
||||
cvtnum(varlen > 0 ? varlen : 0);
|
||||
goto record;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user