path: root/grep.h
diff options
authorNguyễn Thái Ngọc Duy <>2012-10-12 10:49:38 (GMT)
committerJunio C Hamano <>2012-10-12 15:24:44 (GMT)
commit55c61688ea1e41f4a8c26f957bf1bc43cd39ed97 (patch)
tree42cb9a2a8aa7492518e7cc25546359e7615e82b1 /grep.h
parent40701adbcbbc1e3e4485562a36343f4781e62be5 (diff)
grep: stop looking at random places for .gitattributes
grep searches for .gitattributes using "name" field in struct grep_source but that field is not real on-disk path name. For example, "grep pattern rev" fills the field with "rev:path", and Git looks for .gitattributes in the (non-existent but exploitable) path "rev:path" instead of "path". This patch passes real paths down to grep_source_load_driver() when: - grep on work tree - grep on the index - grep a commit (or a tag if it points to a commit) so that these cases look up .gitattributes at proper paths. .gitattributes lookup is disabled in all other cases. Initial-work-by: Jeff King <> Signed-off-by: Nguyễn Thái Ngọc Duy <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'grep.h')
1 files changed, 3 insertions, 1 deletions
diff --git a/grep.h b/grep.h
index d66b197..1f32944 100644
--- a/grep.h
+++ b/grep.h
@@ -144,11 +144,13 @@ struct grep_source {
char *buf;
unsigned long size;
+ char *path; /* for attribute lookups */
struct userdiff_driver *driver;
void grep_source_init(struct grep_source *gs, enum grep_source_type type,
- const char *name, const void *identifier);
+ const char *name, const char *path,
+ const void *identifier);
void grep_source_clear_data(struct grep_source *gs);
void grep_source_clear(struct grep_source *gs);
void grep_source_load_driver(struct grep_source *gs);