ircd: substitution: fix overrun with unterminated '}' in format string
handle a variable following an unterminated variable better
This commit is contained in:
parent
169a1c3535
commit
1dfb080874
1 changed files with 11 additions and 4 deletions
|
@ -116,7 +116,13 @@ char *substitution_parse(const char *fmt, rb_dlink_list *varlist)
|
|||
/* break out ${var} */
|
||||
for (pptr = ptr + 2; *pptr != '\0'; pptr++)
|
||||
{
|
||||
if (*pptr != '}')
|
||||
if (*pptr == '$')
|
||||
{
|
||||
*vptr++ = '\0';
|
||||
pptr--;
|
||||
break;
|
||||
}
|
||||
else if (*pptr != '}')
|
||||
*vptr++ = *pptr;
|
||||
else
|
||||
{
|
||||
|
@ -125,9 +131,6 @@ char *substitution_parse(const char *fmt, rb_dlink_list *varlist)
|
|||
}
|
||||
}
|
||||
|
||||
s_assert(*varname != '\0');
|
||||
s_assert(*pptr != '\0');
|
||||
|
||||
/* advance ptr by length of variable */
|
||||
ptr += (pptr - ptr);
|
||||
|
||||
|
@ -142,6 +145,10 @@ char *substitution_parse(const char *fmt, rb_dlink_list *varlist)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* don't increment ptr into a following string if the '}' is missing */
|
||||
if (*ptr == '\0')
|
||||
break;
|
||||
}
|
||||
|
||||
*bptr = '\0';
|
||||
|
|
Loading…
Reference in a new issue