Skip to content
  • Jeff King's avatar
    archive: don't let remote clients get unreachable commits · ee27ca4a
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Usually git is careful not to allow clients to fetch
    arbitrary objects from the database; for example, objects
    received via upload-pack must be reachable from a ref.
    Upload-archive breaks this by feeding the client's tree-ish
    directly to get_sha1, which will accept arbitrary hex sha1s,
    reflogs, etc.
    
    This is not a problem if all of your objects are publicly
    reachable anyway (or at least public to anybody who can run
    upload-archive). Or if you are making the repo available by
    dumb protocols like http or rsync (in which case the client
    can read your whole object db directly).
    
    But for sites which allow access only through smart
    protocols, clients may be able to fetch trees from commits
    that exist in the server's object database but are not
    referenced (e.g., because history was rewound).
    
    This patch tightens upload-archive's lookup to use dwim_ref
    rather than get_sha1. This means a remote client can only
    fetch the tip of a named ref, not an arbitrary sha1 or
    reflog entry.
    
    This also restricts some legitimate requests, too:
    
      1. Reachable non-tip commits, like:
    
            git archive --remote=$url v1.0~5
    
      2. Sub-trees of reachable commits, like:
    
            git archive --remote=$url v1.7.7:Documentation
    
    Local requests continue to use get_sha1, and are not
    restricted at all.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    ee27ca4a