Skip to content
  • Jeff King's avatar
    pathspec: handle non-terminated strings with :(attr) · 8a2c1746
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The pathspec code always takes names to be matched as a
    name/namelen pair, but match_attrs() never looks at namelen,
    and just treats "name" like a NUL-terminated string, passing
    it to git_check_attr().
    
    This usually works anyway. Every caller passes a
    NUL-terminated string, and in all but one the passed-in
    length is the same as the length of the string (the
    exception is dir_path_match(), which may pass a smaller
    length to drop a trailing slash). So we won't currently ever
    read random memory, and the one case I found actually
    happens to work correctly because the attr code can handle
    the trailing slash itself.
    
    But it's still worth addressing, as the function interface
    implies that the name does not have to be NUL-terminated,
    making this an accident waiting to happen.
    
    Since teaching git_check_attr() to take a ptr/len pair would
    be a big refactor, we'll just allocate a new string. We can
    do this only when necessary, which avoids paying the cost
    for most callers.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    8a2c1746