At Tue, 12 Oct 2021 15:06:11 +0900 (JST), Kyotaro Horiguchi <horikyota....@gmail.com> wrote in > "%4%5%6%7p" is converted to "57p". Do we need to imitate that bug > with this patch?
So.. I try to describe the behavior for exhaustive patterns.. current: A. "^-?[0-9]+.*" : returns valid padding. p goes after the last digit. B. "^[^0-9-].*" : padding = 0, p doesn't advance. C. "^-[^0-9].*" : padding = 0, p advances by 1 byte. D. "^-" : padding = 0, p advances by 1 byte. (if *p == 0 then breaks) I think the patterns covers the all possibilities. If we code as the following: if (*p == '-' ? isdigit(p[1]) : isdigit(p[0])) { char *endptr; padding = strtol(p, &endptr, 10); Assert(endptr > p); if (*endptr == '\0') break; p = endptr; } else padding = 0; A. "^-?[0-9]+.*" : same to the current B. "^[^0-9-].*" : same to the current C. "^-[^0-9].*" : padding = 0, p doesn't advance. D. "^-" : padding = 0, p doesn't advance. If we wan to make the behaviors C and D same with the current, the else clause should be like the follows, but I don't think we need to do that. else { padding = 0; if (*p == '-') p++; } regards. -- Kyotaro Horiguchi NTT Open Source Software Center