mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-11-27 15:01:00 +01:00
33894: boundary conditions in unmeta(), unmetafy()
Check that we aren't running off the end of the string when converting the next byte after a Meta byte. This is just defensive programming in case of bad metafied strings coming through from gettokstr(), some repairs there are likely still needed.
This commit is contained in:
parent
9ddd022ff0
commit
48cd1b6c3b
2 changed files with 9 additions and 3 deletions
|
|
@ -1,3 +1,7 @@
|
||||||
|
2014-12-07 Barton E. Schaefer <schaefer@zsh.org>
|
||||||
|
|
||||||
|
* 33894: Src/utils.c: boundary conditions in unmeta(), unmetafy()
|
||||||
|
|
||||||
2014-12-07 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
2014-12-07 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||||
|
|
||||||
* Daniel Shahaf: 33883: Doc/Zsh/expn.yo,
|
* Daniel Shahaf: 33883: Doc/Zsh/expn.yo,
|
||||||
|
|
|
||||||
|
|
@ -4164,7 +4164,7 @@ unmetafy(char *s, int *len)
|
||||||
|
|
||||||
for (p = s; *p && *p != Meta; p++);
|
for (p = s; *p && *p != Meta; p++);
|
||||||
for (t = p; (*t = *p++);)
|
for (t = p; (*t = *p++);)
|
||||||
if (*t++ == Meta)
|
if (*t++ == Meta && *p)
|
||||||
t[-1] = *p++ ^ 32;
|
t[-1] = *p++ ^ 32;
|
||||||
if (len)
|
if (len)
|
||||||
*len = t - s;
|
*len = t - s;
|
||||||
|
|
@ -4208,8 +4208,10 @@ unmeta(const char *file_name)
|
||||||
|
|
||||||
meta = 0;
|
meta = 0;
|
||||||
for (t = file_name; *t; t++) {
|
for (t = file_name; *t; t++) {
|
||||||
if (*t == Meta)
|
if (*t == Meta) {
|
||||||
meta = 1;
|
meta = t[1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!meta) {
|
if (!meta) {
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue