mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-25 20:33:08 +00:00
Fix for buffer overflows identified by libgmalloc
This commit is contained in:
parent
4980959fce
commit
3c5d5b344e
2 changed files with 18 additions and 10 deletions
22
fallback.cpp
22
fallback.cpp
|
@ -1503,14 +1503,20 @@ static int mk_wcwidth(wchar_t ucs)
|
|||
|
||||
static int mk_wcswidth(const wchar_t *pwcs, size_t n)
|
||||
{
|
||||
int w, width = 0;
|
||||
|
||||
for (; *pwcs && n-- > 0; pwcs++)
|
||||
if ((w = mk_wcwidth(*pwcs)) < 0)
|
||||
return -1;
|
||||
else
|
||||
width += w;
|
||||
|
||||
int width = 0;
|
||||
for (size_t i=0; i < n; i++)
|
||||
{
|
||||
if (pwcs[i] == L'\0')
|
||||
break;
|
||||
|
||||
int w = mk_wcwidth(pwcs[i]);
|
||||
if (w < 0)
|
||||
{
|
||||
width = -1;
|
||||
break;
|
||||
}
|
||||
width += w;
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
||||
|
|
|
@ -260,8 +260,7 @@ void parse_util_cmdsubst_extent(const wchar_t *buff, size_t cursor_pos, const wc
|
|||
/* No subshell found, all done */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Intrepret NULL to mean the end */
|
||||
/* Interpret NULL to mean the end */
|
||||
if (end == NULL)
|
||||
{
|
||||
end = const_cast<wchar_t *>(buff) + bufflen;
|
||||
|
@ -273,6 +272,9 @@ void parse_util_cmdsubst_extent(const wchar_t *buff, size_t cursor_pos, const wc
|
|||
begin++;
|
||||
ap = begin;
|
||||
bp = end;
|
||||
/* pos is where to begin looking for the next one. But if we reached the end there's no next one. */
|
||||
if (begin >= end)
|
||||
break;
|
||||
pos = begin + 1;
|
||||
}
|
||||
else if (begin >= cursor)
|
||||
|
|
Loading…
Reference in a new issue