From b039718d925475124cb431a05f5933bd191bae27 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Thu, 21 Nov 2013 06:48:37 -0500 Subject: drop support for "experimental" loose objects In git v1.4.3, we introduced a new loose object format that encoded some object information outside of the zlib stream. Ultimately the format was dropped in v1.5.3, but we kept the reading side around to help people migrate objects. Each time we open a loose object, we use a heuristic to check whether it is in the normal loose format, or the experimental one. This heuristic is robust in the face of valid data, but it tends to treat corrupted or garbage data as an experimental object. With the regular format, we would notice quickly that zlib's crc does not check out and complain. With the experimental object, we are likely to extract a nonsensical object size and try to allocate a huge buffer, resulting in xmalloc calling "die". This latter behavior is much worse, for two reasons. One, git reports an allocation error when the real error is corruption. And two, the program dies unconditionally, so you cannot even run fsck (which would otherwise ignore the broken object and keep going). We could try to improve the heuristic to err on the side of normal objects in the face of corruption, but there is really little point. The experimental format is long-dead, and was never enabled by default to begin with. We can instead simply remove it. The only affected repository would be one that explicitly set core.legacyheaders in 2007, and then never repacked in the intervening 6 years. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- t/t1013-loose-object-format.sh | 66 --------------------- .../14/9cedb5c46929d18e0f118e9fa31927487af3b6 | Bin 117 -> 0 bytes .../16/56f9233d999f61ef23ef390b9c71d75399f435 | Bin 17 -> 0 bytes .../1e/72a6b2c4a577ab0338860fa9fe87f761fc9bbd | Bin 18 -> 0 bytes .../25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 | Bin 19 -> 0 bytes .../2e/65efe2a145dda7ee51d1741299f848e5bf752e | Bin 10 -> 0 bytes .../6b/aee0540ea990d9761a3eb9ab183003a71c3696 | Bin 181 -> 0 bytes .../70/e6a83d8dcb26fc8bc0cf702e2ddeb6adca18fd | Bin 26 -> 0 bytes .../76/e7fa9941f4d5f97f64fea65a2cba436bc79cbb | 2 - .../78/75c6237d3fcdd0ac2f0decc7d3fa6a50b66c09 | Bin 139 -> 0 bytes .../7a/37b887a73791d12d26c0d3e39568a8fb0fa6e8 | Bin 54 -> 0 bytes .../85/df50785d62d3b05ab03d9cbf7e4a0b49449730 | Bin 13 -> 0 bytes .../8d/4e360d6c70fbd72411991c02a09c442cf7a9fa | Bin 156 -> 0 bytes .../95/b1625de3ba8b2214d1e0d0591138aea733f64f | Bin 252 -> 0 bytes .../9a/e9e86b7bd6cb1472d9373702d8249973da0832 | Bin 11 -> 0 bytes .../bd/15045f6ce8ff75747562173640456a394412c8 | Bin 34 -> 0 bytes .../e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 | Bin 9 -> 0 bytes .../f8/16d5255855ac160652ee5253b06cd8ee14165a | 1 - 18 files changed, 69 deletions(-) delete mode 100755 t/t1013-loose-object-format.sh delete mode 100644 t/t1013/objects/14/9cedb5c46929d18e0f118e9fa31927487af3b6 delete mode 100644 t/t1013/objects/16/56f9233d999f61ef23ef390b9c71d75399f435 delete mode 100644 t/t1013/objects/1e/72a6b2c4a577ab0338860fa9fe87f761fc9bbd delete mode 100644 t/t1013/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 delete mode 100644 t/t1013/objects/2e/65efe2a145dda7ee51d1741299f848e5bf752e delete mode 100644 t/t1013/objects/6b/aee0540ea990d9761a3eb9ab183003a71c3696 delete mode 100644 t/t1013/objects/70/e6a83d8dcb26fc8bc0cf702e2ddeb6adca18fd delete mode 100644 t/t1013/objects/76/e7fa9941f4d5f97f64fea65a2cba436bc79cbb delete mode 100644 t/t1013/objects/78/75c6237d3fcdd0ac2f0decc7d3fa6a50b66c09 delete mode 100644 t/t1013/objects/7a/37b887a73791d12d26c0d3e39568a8fb0fa6e8 delete mode 100644 t/t1013/objects/85/df50785d62d3b05ab03d9cbf7e4a0b49449730 delete mode 100644 t/t1013/objects/8d/4e360d6c70fbd72411991c02a09c442cf7a9fa delete mode 100644 t/t1013/objects/95/b1625de3ba8b2214d1e0d0591138aea733f64f delete mode 100644 t/t1013/objects/9a/e9e86b7bd6cb1472d9373702d8249973da0832 delete mode 100644 t/t1013/objects/bd/15045f6ce8ff75747562173640456a394412c8 delete mode 100644 t/t1013/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 delete mode 100644 t/t1013/objects/f8/16d5255855ac160652ee5253b06cd8ee14165a (limited to 't') diff --git a/t/t1013-loose-object-format.sh b/t/t1013-loose-object-format.sh deleted file mode 100755 index fbf5f2fc00..0000000000 --- a/t/t1013-loose-object-format.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2011 Roberto Tyley -# - -test_description='Correctly identify and parse loose object headers - -There are two file formats for loose objects - the original standard -format, and the experimental format introduced with Git v1.4.3, later -deprecated with v1.5.3. Although Git no longer writes the -experimental format, objects in both formats must be read, with the -format for a given file being determined by the header. - -Detecting file format based on header is not entirely trivial, not -least because the first byte of a zlib-deflated stream will vary -depending on how much memory was allocated for the deflation window -buffer when the object was written out (for example 4KB on Android, -rather that 32KB on a normal PC). - -The loose objects used as test vectors have been generated with the -following Git versions: - -standard format: Git v1.7.4.1 -experimental format: Git v1.4.3 (legacyheaders=false) -standard format, deflated with 4KB window size: Agit/JGit on Android -' - -. ./test-lib.sh - -assert_blob_equals() { - printf "%s" "$2" >expected && - git cat-file -p "$1" >actual && - test_cmp expected actual -} - -test_expect_success setup ' - cp -R "$TEST_DIRECTORY/t1013/objects" .git/ && - git --version -' - -test_expect_success 'read standard-format loose objects' ' - git cat-file tag 8d4e360d6c70fbd72411991c02a09c442cf7a9fa && - git cat-file commit 6baee0540ea990d9761a3eb9ab183003a71c3696 && - git ls-tree 7a37b887a73791d12d26c0d3e39568a8fb0fa6e8 && - assert_blob_equals "257cc5642cb1a054f08cc83f2d943e56fd3ebe99" "foo$LF" -' - -test_expect_success 'read experimental-format loose objects' ' - git cat-file tag 76e7fa9941f4d5f97f64fea65a2cba436bc79cbb && - git cat-file commit 7875c6237d3fcdd0ac2f0decc7d3fa6a50b66c09 && - git ls-tree 95b1625de3ba8b2214d1e0d0591138aea733f64f && - assert_blob_equals "2e65efe2a145dda7ee51d1741299f848e5bf752e" "a" && - assert_blob_equals "9ae9e86b7bd6cb1472d9373702d8249973da0832" "ab" && - assert_blob_equals "85df50785d62d3b05ab03d9cbf7e4a0b49449730" "abcd" && - assert_blob_equals "1656f9233d999f61ef23ef390b9c71d75399f435" "abcdefgh" && - assert_blob_equals "1e72a6b2c4a577ab0338860fa9fe87f761fc9bbd" "abcdefghi" && - assert_blob_equals "70e6a83d8dcb26fc8bc0cf702e2ddeb6adca18fd" "abcdefghijklmnop" && - assert_blob_equals "bd15045f6ce8ff75747562173640456a394412c8" "abcdefghijklmnopqrstuvwx" -' - -test_expect_success 'read standard-format objects deflated with smaller window buffer' ' - git cat-file tag f816d5255855ac160652ee5253b06cd8ee14165a && - git cat-file tag 149cedb5c46929d18e0f118e9fa31927487af3b6 -' - -test_done diff --git a/t/t1013/objects/14/9cedb5c46929d18e0f118e9fa31927487af3b6 b/t/t1013/objects/14/9cedb5c46929d18e0f118e9fa31927487af3b6 deleted file mode 100644 index 472fd1458e..0000000000 Binary files a/t/t1013/objects/14/9cedb5c46929d18e0f118e9fa31927487af3b6 and /dev/null differ diff --git a/t/t1013/objects/16/56f9233d999f61ef23ef390b9c71d75399f435 b/t/t1013/objects/16/56f9233d999f61ef23ef390b9c71d75399f435 deleted file mode 100644 index c379d74ae2..0000000000 Binary files a/t/t1013/objects/16/56f9233d999f61ef23ef390b9c71d75399f435 and /dev/null differ diff --git a/t/t1013/objects/1e/72a6b2c4a577ab0338860fa9fe87f761fc9bbd b/t/t1013/objects/1e/72a6b2c4a577ab0338860fa9fe87f761fc9bbd deleted file mode 100644 index 93706305bc..0000000000 Binary files a/t/t1013/objects/1e/72a6b2c4a577ab0338860fa9fe87f761fc9bbd and /dev/null differ diff --git a/t/t1013/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 b/t/t1013/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 deleted file mode 100644 index bdcf704c9e..0000000000 Binary files a/t/t1013/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 and /dev/null differ diff --git a/t/t1013/objects/2e/65efe2a145dda7ee51d1741299f848e5bf752e b/t/t1013/objects/2e/65efe2a145dda7ee51d1741299f848e5bf752e deleted file mode 100644 index ad62c43e41..0000000000 Binary files a/t/t1013/objects/2e/65efe2a145dda7ee51d1741299f848e5bf752e and /dev/null differ diff --git a/t/t1013/objects/6b/aee0540ea990d9761a3eb9ab183003a71c3696 b/t/t1013/objects/6b/aee0540ea990d9761a3eb9ab183003a71c3696 deleted file mode 100644 index 3d2f0337db..0000000000 Binary files a/t/t1013/objects/6b/aee0540ea990d9761a3eb9ab183003a71c3696 and /dev/null differ diff --git a/t/t1013/objects/70/e6a83d8dcb26fc8bc0cf702e2ddeb6adca18fd b/t/t1013/objects/70/e6a83d8dcb26fc8bc0cf702e2ddeb6adca18fd deleted file mode 100644 index b3f71a6ee5..0000000000 Binary files a/t/t1013/objects/70/e6a83d8dcb26fc8bc0cf702e2ddeb6adca18fd and /dev/null differ diff --git a/t/t1013/objects/76/e7fa9941f4d5f97f64fea65a2cba436bc79cbb b/t/t1013/objects/76/e7fa9941f4d5f97f64fea65a2cba436bc79cbb deleted file mode 100644 index af4e9a7b0c..0000000000 --- a/t/t1013/objects/76/e7fa9941f4d5f97f64fea65a2cba436bc79cbb +++ /dev/null @@ -1,2 +0,0 @@ - x%A0@}O1{cSZ(νthZޠ? m6di9GhبZR'QRpqL9=gsIoopeϫ_1$*SiNwpPRB -[(d-L9 \ No newline at end of file diff --git a/t/t1013/objects/78/75c6237d3fcdd0ac2f0decc7d3fa6a50b66c09 b/t/t1013/objects/78/75c6237d3fcdd0ac2f0decc7d3fa6a50b66c09 deleted file mode 100644 index 3dd28be5c6..0000000000 Binary files a/t/t1013/objects/78/75c6237d3fcdd0ac2f0decc7d3fa6a50b66c09 and /dev/null differ diff --git a/t/t1013/objects/7a/37b887a73791d12d26c0d3e39568a8fb0fa6e8 b/t/t1013/objects/7a/37b887a73791d12d26c0d3e39568a8fb0fa6e8 deleted file mode 100644 index 2b97b264c3..0000000000 Binary files a/t/t1013/objects/7a/37b887a73791d12d26c0d3e39568a8fb0fa6e8 and /dev/null differ diff --git a/t/t1013/objects/85/df50785d62d3b05ab03d9cbf7e4a0b49449730 b/t/t1013/objects/85/df50785d62d3b05ab03d9cbf7e4a0b49449730 deleted file mode 100644 index 6dff746876..0000000000 Binary files a/t/t1013/objects/85/df50785d62d3b05ab03d9cbf7e4a0b49449730 and /dev/null differ diff --git a/t/t1013/objects/8d/4e360d6c70fbd72411991c02a09c442cf7a9fa b/t/t1013/objects/8d/4e360d6c70fbd72411991c02a09c442cf7a9fa deleted file mode 100644 index cb41e92d07..0000000000 Binary files a/t/t1013/objects/8d/4e360d6c70fbd72411991c02a09c442cf7a9fa and /dev/null differ diff --git a/t/t1013/objects/95/b1625de3ba8b2214d1e0d0591138aea733f64f b/t/t1013/objects/95/b1625de3ba8b2214d1e0d0591138aea733f64f deleted file mode 100644 index 7ac46b4f70..0000000000 Binary files a/t/t1013/objects/95/b1625de3ba8b2214d1e0d0591138aea733f64f and /dev/null differ diff --git a/t/t1013/objects/9a/e9e86b7bd6cb1472d9373702d8249973da0832 b/t/t1013/objects/9a/e9e86b7bd6cb1472d9373702d8249973da0832 deleted file mode 100644 index 9d8316d4e5..0000000000 Binary files a/t/t1013/objects/9a/e9e86b7bd6cb1472d9373702d8249973da0832 and /dev/null differ diff --git a/t/t1013/objects/bd/15045f6ce8ff75747562173640456a394412c8 b/t/t1013/objects/bd/15045f6ce8ff75747562173640456a394412c8 deleted file mode 100644 index eebf23956e..0000000000 Binary files a/t/t1013/objects/bd/15045f6ce8ff75747562173640456a394412c8 and /dev/null differ diff --git a/t/t1013/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/t/t1013/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 deleted file mode 100644 index 134cf19379..0000000000 Binary files a/t/t1013/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 and /dev/null differ diff --git a/t/t1013/objects/f8/16d5255855ac160652ee5253b06cd8ee14165a b/t/t1013/objects/f8/16d5255855ac160652ee5253b06cd8ee14165a deleted file mode 100644 index 26b75aec56..0000000000 --- a/t/t1013/objects/f8/16d5255855ac160652ee5253b06cd8ee14165a +++ /dev/null @@ -1 +0,0 @@ -H0 a{ Ie&*G^D҆wUҗS4 ,f[VAۺx6[wtGLu?@"g{+by%M \ No newline at end of file -- cgit v1.2.3