• I
    [patch] git: fix overflow in update-cache.c · cb1da3a7
    Ingo Molnar 提交于
    this patch fixes a 1-byte overflow in update-cache.c (probably not
    exploitable). A specially crafted db object might trigger this overflow.
    
    the bug is that normally the 'type' field is parsed by read_sha1_file(),
    via:
    
    	if (sscanf(buffer, "%10s %lu", type, size) != 2)
    
    i.e. 0-10 long strings, which take 1-11 bytes of space. Normally the
    type strings are stored in char [20] arrays, but in update-cache.c that
    is char [10], so a 1 byte overflow might occur.
    
    This should not happen with a 'friendly' DB, as the longest type string
    ("commit") is 7 bytes long. The fix is to use the customary char [20].
    
    (someone might want to clean those open-coded constants up with a
    TYPE_LEN define, they do tend to cause problems like this. I'm not
    against open-coded constants (they make code much more readable), but
    for fields that get filled in from possibly hostile objects this is
    playing with fire.)
    
    hey, this might be the first true security fix for GIT? ;-)
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    Signed-off-by: NPetr Baudis <pasky@ucw.cz>
    cb1da3a7
update-cache.c 9.3 KB