Otherwise, the check is just undefined behaviour. gcc even takes out this check because len can never be zero if len does not wrap around. Found with -Wstrict-overflow=2
@@ -712,8 +712,9 @@ static char *print_string_ptr(const char *str, printbuffer *p)
ptr = str;
/* calculate additional space that is needed for escaping */
- while ((token = *ptr) && ++len)
+ while ((token = *ptr))
{
+ ++len;
if (strchr("\"\\\b\f\n\r\t", token))
len++; /* +1 for the backslash */