diff_grep: use textconv buffers for add/deleted files
authorJeff King <peff@peff.net>
Sun, 28 Oct 2012 11:40:00 +0000 (07:40 -0400)
committerJeff King <peff@peff.net>
Sun, 28 Oct 2012 11:59:44 +0000 (07:59 -0400)
commitb1c2f57db326c43ec286855b396fb16b4890cf2d
tree072f9b8a85cea0166e4fafd3df7cd1968d81dea7
parent7e2010537e96d0a1144520222f20ba1dc3d61441
diff_grep: use textconv buffers for add/deleted files

If you use "-G" to grep a diff, we will apply a configured
textconv filter to the data before generating the diff.
However, if the diff is an addition or deletion, we do not
bother running the diff at all, and just look for the token
in the added (or removed) content. This works because we
know that the diff must contain every line of content.

However, while we used the textconv-derived buffers in the
regular diff, we accidentally passed the original unmodified
buffers to regexec when checking the added or removed
content. This could lead to an incorrect answer.

Worse, in some cases we might have a textconv buffer but no
original buffer (e.g., if we pulled the textconv data from
cache, or if we reused a working tree file when generating
it). In that case, we could actually feed NULL to regexec
and segfault.

Reported-by: Peter Oberndorfer <kumbayo84@arcor.de>
Signed-off-by: Jeff King <peff@peff.net>
diffcore-pickaxe.c
t/t4030-diff-textconv.sh