• M
    setup: fix windows path buffer over-stepping · 6127ff63
    Martin Erik Werner 提交于
    Fix a buffer over-stepping issue triggered by providing an absolute path
    that is similar to the work tree path.
    
    abspath_part_inside_repo() may currently increment the path pointer by
    offset_1st_component() + wtlen, which is too much, since
    offset_1st_component() is a subset of wtlen.
    
    For the *nix-style prefix '/', this does (by luck) not cause any issues,
    since offset_1st_component() is 1 and there will always be a '/' or '\0'
    that can "absorb" this.
    
    In the case of DOS-style prefixes though, the offset_1st_component() is
    3 and this can potentially over-step the string buffer. For example if
    
        work_tree = "c:/r"
        path      = "c:/rl"
    
    Then wtlen is 4, and incrementing the path pointer by (3 + 4) would
    end up 2 bytes outside a string buffer of length 6.
    
    Similarly if
    
        work_tree = "c:/r"
        path      = "c:/rl/d/a"
    
    Then (since the loop starts by also incrementing the pointer one step),
    this would mean that the function would miss checking if "c:/rl/d" could
    be the work_tree, arguably this is unlikely though, since it would only
    be possible with symlinks on windows.
    
    Fix this by simply avoiding to increment by offset_1st_component() and
    wtlen at the same time.
    Signed-off-by: NMartin Erik Werner <martinerikwerner@gmail.com>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    6127ff63
setup.c 22.2 KB