The function wasn't properly checking for dlen<2 before quoting, and
wasn't properly pre-adjusting dlen to include the initial quote.
Thanks to Jeriko One for reporting these issues.
char *pt;
const char *s;
+ if (!(dest && dlen && src && to_quote))
+ return;
+
+ if (dlen < 3)
+ {
+ *dest = 0;
+ return;
+ }
+
pt = dest;
s = src;
- *pt++ = '"';
- /* save room for trailing quote-char */
- dlen -= 2;
+ /* save room for pre/post quote-char and trailing null */
+ dlen -= 3;
+ *pt++ = '"';
for (; *s && dlen; s++)
{
if (strchr (to_quote, *s))
{
+ if (dlen < 2)
+ break;
dlen -= 2;
- if (!dlen)
- break;
*pt++ = '\\';
*pt++ = *s;
}