Skip to content
  • Emily Shaffer's avatar
    grep: fail if call could output and name is null · de99eb0c
    Emily Shaffer authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    grep_source(), which performs much of the work for Git's grep library,
    allows passing an arbitrary struct grep_source which represents the text
    which grep_source() should search to match a pattern in the provided
    struct grep_opt. In most callers, the grep_source::name field is set to
    an appropriate prefix to print before a colon when a result matches:
    
    	README:Git is an Open Source project covered by the GNU General
    
    One caller, grep_buffer(), leaves the grep_source::name field set to
    NULL because there isn't enough context to determine an appropriate name
    for this kind of output line. In practice, this has been fine: the only
    caller of grep_buffer() is "git log --grep", and that caller sets
    grep_opt::status_only, which disables output and only checks whether a
    match exists. But this is brittle: a future caller can call
    grep_buffer() without grep_opt::status_only set, and as soon as it hits
    a match, grep_source() will try to print the match and segfault:
    
    	(null):Git is an Open Source project covered by the GNU General
    
    For example, a future caller might want to print all matching lines from
    commits which match a regex.
    
    Futureproof by diagnosing early a use of the API that could trigger that
    condition, before we know whether the pattern matches:
    
    	BUG: grep.c:1783: grep call which could print a name requires
    		grep_source.name be non-NULL
    	Aborted
    
    This way, the caller's author gets an indication of how to fix the issue
    - by providing grep_source::name or setting grep_opt::status_only - and
    they are warned of the potential for a segfault unconditionally, rather
    than only if there is a match.
    
    Noticed while adding such a call to a tutorial on revision walks.
    
    Signed-off-by: default avatarEmily Shaffer <emilyshaffer@google.com>
    Reviewed-by: default avatarJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    de99eb0c