forked from git/git
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pack-objects (mingw): demonstrate a segmentation fault with large deltas
There is a problem in the way 9ac3f0e (pack-objects: fix performance issues on packing large deltas, 2018-07-22) initializes that mutex in the `packing_data` struct. The problem manifests in a segmentation fault on Windows, when a mutex (AKA critical section) is accessed without being initialized. (With pthreads, you apparently do not really have to initialize them?) This was reported in #1839. Signed-off-by: Doug Kelly <dougk.ff7@gmail.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
- Loading branch information
Showing
1 changed file
with
106 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2013 Doug Kelly | ||
# | ||
|
||
test_description='Test submodules with a path near PATH_MAX | ||
This test verifies that "git submodule" initialization, update and clones work, including with recursive submodules and paths approaching PATH_MAX (260 characters on Windows) | ||
' | ||
|
||
TEST_NO_CREATE_REPO=1 | ||
. ./test-lib.sh | ||
|
||
longpath="" | ||
for (( i=0; i<4; i++ )); do | ||
longpath="0123456789abcdefghijklmnopqrstuvwxyz$longpath" | ||
done | ||
# Pick a substring maximum of 90 characters | ||
# This should be good, since we'll add on a lot for temp directories | ||
longpath=${longpath:0:90}; export longpath | ||
|
||
test_expect_failure 'submodule with a long path' ' | ||
git config --global protocol.file.allow always && | ||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \ | ||
git -c init.defaultBranch=long init --bare remote && | ||
test_create_repo bundle1 && | ||
( | ||
cd bundle1 && | ||
test_commit "shoot" && | ||
git rev-parse --verify HEAD >../expect | ||
) && | ||
mkdir home && | ||
( | ||
cd home && | ||
git clone ../remote test && | ||
cd test && | ||
git checkout -B long && | ||
git submodule add ../bundle1 $longpath && | ||
test_commit "sogood" && | ||
( | ||
cd $longpath && | ||
git rev-parse --verify HEAD >actual && | ||
test_cmp ../../../expect actual | ||
) && | ||
git push origin long | ||
) && | ||
mkdir home2 && | ||
( | ||
cd home2 && | ||
git clone ../remote test && | ||
cd test && | ||
git checkout long && | ||
git submodule update --init && | ||
( | ||
cd $longpath && | ||
git rev-parse --verify HEAD >actual && | ||
test_cmp ../../../expect actual | ||
) | ||
) | ||
' | ||
|
||
test_expect_failure 'recursive submodule with a long path' ' | ||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \ | ||
git -c init.defaultBranch=long init --bare super && | ||
test_create_repo child && | ||
( | ||
cd child && | ||
test_commit "shoot" && | ||
git rev-parse --verify HEAD >../expect | ||
) && | ||
test_create_repo parent && | ||
( | ||
cd parent && | ||
git submodule add ../child $longpath && | ||
test_commit "aim" | ||
) && | ||
mkdir home3 && | ||
( | ||
cd home3 && | ||
git clone ../super test && | ||
cd test && | ||
git checkout -B long && | ||
git submodule add ../parent foo && | ||
git submodule update --init --recursive && | ||
test_commit "sogood" && | ||
( | ||
cd foo/$longpath && | ||
git rev-parse --verify HEAD >actual && | ||
test_cmp ../../../../expect actual | ||
) && | ||
git push origin long | ||
) && | ||
mkdir home4 && | ||
( | ||
cd home4 && | ||
git clone ../super test --recursive && | ||
( | ||
cd test/foo/$longpath && | ||
git rev-parse --verify HEAD >actual && | ||
test_cmp ../../../../expect actual | ||
) | ||
) | ||
' | ||
unset longpath | ||
|
||
test_done |