The existing strspn() check guarantees that the string contains no '-'
but atoi() does not catch errors, especially not integer overflows.
if(colon_loc){ /* if width override */
*colon_loc = '\0';
colon_loc++;
- if(strspn(colon_loc,"0123456789") != strlen(colon_loc) || *colon_loc=='0' || !*colon_loc){
+ if(strspn(colon_loc,"0123456789") != strlen(colon_loc) || *colon_loc=='0' || !*colon_loc || atoi(colon_loc) <= 0){
free(buf);
goto badwidth;
}
}
// FIXME: enforce signal width to 8, 9, or 16 (grep: SIGNAL wide_signals)
fnode->width = atoi(colon_loc); // already verified to be a number
+ if(fnode->width <= 0) catastrophic_failure(__FILE__, __LINE__, _("please report this bug"));
}
endp = fnode; while(endp->next) endp = endp->next; /* find end */
endp->next = sfn->f_cooked;