On Thu, Oct 12, 2017 at 5:20 PM, Jeff King <peff@xxxxxxxx> wrote: > On Thu, Oct 12, 2017 at 08:18:37PM -0400, Jeff King wrote: > >> Fix this by entering the conditional only when we actually >> see whitespace. We can apply this also to the >> IGNORE_WHITESPACE change. That code path isn't buggy >> (because it falls through to returning the next >> non-whitespace byte), but it makes the logic more clear if >> we only bother to look at whitespace flags after seeing that >> the next byte is whitespace. > > I think there actually _is_ a bug in that code path, but it's unrelated > to this one. If you have whitespace at the end of the buffer, then we'd > advance *cp until it matches *endp, and then return whatever is at *endp > (which is nonsense, or probably a NUL) rather than returning "-1". Good catch! This plays together interestingly with IGNORE_WHITESPACE_AT_EOL, too. If that is set the endp is just put further to the front, so we'd actually compare white spaces after endp. If that flag is not set, we'd get NUL or nonsense. > I'm out of time for tonight and not familiar enough with the color-moved > code to come up with a reasonable test case quickly, but maybe you can > see if that can trigger bad behavior? > > -Peff