Skip to content

Commit 1ac02a6

Browse files
committed
Merge tag 'v2.39.4'
Git 2.39.4 Signed-off-by: Johannes Schindelin <[email protected]>
2 parents 469fcac + 47b6d90 commit 1ac02a6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1468
-285
lines changed

.github/workflows/check-whitespace.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
check-whitespace:
2020
runs-on: ubuntu-latest
2121
steps:
22-
- uses: actions/checkout@v3
22+
- uses: actions/checkout@v4
2323
with:
2424
fetch-depth: 0
2525

.github/workflows/main.yml

+22-22
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
echo "skip_concurrent=$skip_concurrent" >>$GITHUB_OUTPUT
4747
- name: skip if the commit or tree was already tested
4848
id: skip-if-redundant
49-
uses: actions/github-script@v6
49+
uses: actions/github-script@v7
5050
if: steps.check-ref.outputs.enabled == 'yes'
5151
with:
5252
github-token: ${{secrets.GITHUB_TOKEN}}
@@ -95,7 +95,7 @@ jobs:
9595
group: windows-build-${{ github.ref }}
9696
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
9797
steps:
98-
- uses: actions/checkout@v3
98+
- uses: actions/checkout@v4
9999
- uses: git-for-windows/setup-git-for-windows-sdk@v1
100100
- name: build
101101
shell: bash
@@ -106,7 +106,7 @@ jobs:
106106
- name: zip up tracked files
107107
run: git archive -o artifacts/tracked.tar.gz HEAD
108108
- name: upload tracked files and build artifacts
109-
uses: actions/upload-artifact@v3
109+
uses: actions/upload-artifact@v4
110110
with:
111111
name: windows-artifacts
112112
path: artifacts
@@ -123,7 +123,7 @@ jobs:
123123
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
124124
steps:
125125
- name: download tracked files and build artifacts
126-
uses: actions/download-artifact@v3
126+
uses: actions/download-artifact@v4
127127
with:
128128
name: windows-artifacts
129129
path: ${{github.workspace}}
@@ -140,7 +140,7 @@ jobs:
140140
run: ci/print-test-failures.sh
141141
- name: Upload failed tests' directories
142142
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
143-
uses: actions/upload-artifact@v3
143+
uses: actions/upload-artifact@v4
144144
with:
145145
name: failed-tests-windows
146146
path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -159,10 +159,10 @@ jobs:
159159
group: vs-build-${{ github.ref }}
160160
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
161161
steps:
162-
- uses: actions/checkout@v3
162+
- uses: actions/checkout@v4
163163
- uses: git-for-windows/setup-git-for-windows-sdk@v1
164164
- name: initialize vcpkg
165-
uses: actions/checkout@v3
165+
uses: actions/checkout@v4
166166
with:
167167
repository: 'microsoft/vcpkg'
168168
path: 'compat/vcbuild/vcpkg'
@@ -194,7 +194,7 @@ jobs:
194194
- name: zip up tracked files
195195
run: git archive -o artifacts/tracked.tar.gz HEAD
196196
- name: upload tracked files and build artifacts
197-
uses: actions/upload-artifact@v3
197+
uses: actions/upload-artifact@v4
198198
with:
199199
name: vs-artifacts-${{ matrix.arch }}
200200
path: artifacts
@@ -212,7 +212,7 @@ jobs:
212212
steps:
213213
- uses: git-for-windows/setup-git-for-windows-sdk@v1
214214
- name: download tracked files and build artifacts
215-
uses: actions/download-artifact@v3
215+
uses: actions/download-artifact@v4
216216
with:
217217
name: vs-artifacts-x64
218218
path: ${{github.workspace}}
@@ -230,7 +230,7 @@ jobs:
230230
run: ci/print-test-failures.sh
231231
- name: Upload failed tests' directories
232232
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
233-
uses: actions/upload-artifact@v3
233+
uses: actions/upload-artifact@v4
234234
with:
235235
name: failed-tests-windows
236236
path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -261,11 +261,11 @@ jobs:
261261
pool: ubuntu-20.04
262262
- jobname: osx-clang
263263
cc: clang
264-
pool: macos-12
264+
pool: macos-13
265265
- jobname: osx-gcc
266266
cc: gcc
267-
cc_package: gcc-9
268-
pool: macos-12
267+
cc_package: gcc-13
268+
pool: macos-13
269269
- jobname: linux-gcc-default
270270
cc: gcc
271271
pool: ubuntu-latest
@@ -285,14 +285,14 @@ jobs:
285285
runs_on_pool: ${{matrix.vector.pool}}
286286
runs-on: ${{matrix.vector.pool}}
287287
steps:
288-
- uses: actions/checkout@v3
288+
- uses: actions/checkout@v4
289289
- run: ci/install-dependencies.sh
290290
- run: ci/run-build-and-tests.sh
291291
- run: ci/print-test-failures.sh
292292
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
293293
- name: Upload failed tests' directories
294294
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
295-
uses: actions/upload-artifact@v3
295+
uses: actions/upload-artifact@v4
296296
with:
297297
name: failed-tests-${{matrix.vector.jobname}}
298298
path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -318,23 +318,23 @@ jobs:
318318
runs-on: ubuntu-latest
319319
container: ${{matrix.vector.image}}
320320
steps:
321-
- uses: actions/checkout@v3
321+
- uses: actions/checkout@v4
322322
if: matrix.vector.jobname != 'linux32'
323-
- uses: actions/checkout@v1
323+
- uses: actions/checkout@v1 # cannot be upgraded because Node.js Actions aren't supported in this container
324324
if: matrix.vector.jobname == 'linux32'
325325
- run: ci/install-docker-dependencies.sh
326326
- run: ci/run-build-and-tests.sh
327327
- run: ci/print-test-failures.sh
328328
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
329329
- name: Upload failed tests' directories
330330
if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname != 'linux32'
331-
uses: actions/upload-artifact@v3
331+
uses: actions/upload-artifact@v4
332332
with:
333333
name: failed-tests-${{matrix.vector.jobname}}
334334
path: ${{env.FAILED_TEST_ARTIFACTS}}
335335
- name: Upload failed tests' directories
336336
if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname == 'linux32'
337-
uses: actions/upload-artifact@v1
337+
uses: actions/upload-artifact@v1 # cannot be upgraded because Node.js Actions aren't supported in this container
338338
with:
339339
name: failed-tests-${{matrix.vector.jobname}}
340340
path: ${{env.FAILED_TEST_ARTIFACTS}}
@@ -348,7 +348,7 @@ jobs:
348348
group: static-analysis-${{ github.ref }}
349349
cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
350350
steps:
351-
- uses: actions/checkout@v3
351+
- uses: actions/checkout@v4
352352
- run: ci/install-dependencies.sh
353353
- run: ci/run-static-analysis.sh
354354
- run: ci/check-directional-formatting.bash
@@ -371,7 +371,7 @@ jobs:
371371
artifact: sparse-20.04
372372
- name: Install the current `sparse` package
373373
run: sudo dpkg -i sparse-20.04/sparse_*.deb
374-
- uses: actions/checkout@v3
374+
- uses: actions/checkout@v4
375375
- name: Install other dependencies
376376
run: ci/install-dependencies.sh
377377
- run: make sparse
@@ -386,6 +386,6 @@ jobs:
386386
jobname: Documentation
387387
runs-on: ubuntu-latest
388388
steps:
389-
- uses: actions/checkout@v3
389+
- uses: actions/checkout@v4
390390
- run: ci/install-dependencies.sh
391391
- run: ci/test-documentation.sh

Documentation/RelNotes/2.39.4.txt

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
Git v2.39.4 Release Notes
2+
=========================
3+
4+
This addresses the security issues CVE-2024-32002, CVE-2024-32004,
5+
CVE-2024-32020 and CVE-2024-32021.
6+
7+
This release also backports fixes necessary to let the CI builds pass
8+
successfully.
9+
10+
Fixes since v2.39.3
11+
-------------------
12+
13+
* CVE-2024-32002:
14+
15+
Recursive clones on case-insensitive filesystems that support symbolic
16+
links are susceptible to case confusion that can be exploited to
17+
execute just-cloned code during the clone operation.
18+
19+
* CVE-2024-32004:
20+
21+
Repositories can be configured to execute arbitrary code during local
22+
clones. To address this, the ownership checks introduced in v2.30.3
23+
are now extended to cover cloning local repositories.
24+
25+
* CVE-2024-32020:
26+
27+
Local clones may end up hardlinking files into the target repository's
28+
object database when source and target repository reside on the same
29+
disk. If the source repository is owned by a different user, then
30+
those hardlinked files may be rewritten at any point in time by the
31+
untrusted user.
32+
33+
* CVE-2024-32021:
34+
35+
When cloning a local source repository that contains symlinks via the
36+
filesystem, Git may create hardlinks to arbitrary user-readable files
37+
on the same filesystem as the target repository in the objects/
38+
directory.
39+
40+
* CVE-2024-32465:
41+
42+
It is supposed to be safe to clone untrusted repositories, even those
43+
unpacked from zip archives or tarballs originating from untrusted
44+
sources, but Git can be tricked to run arbitrary code as part of the
45+
clone.
46+
47+
* Defense-in-depth: submodule: require the submodule path to contain
48+
directories only.
49+
50+
* Defense-in-depth: clone: when symbolic links collide with directories, keep
51+
the latter.
52+
53+
* Defense-in-depth: clone: prevent hooks from running during a clone.
54+
55+
* Defense-in-depth: core.hooksPath: add some protection while cloning.
56+
57+
* Defense-in-depth: fsck: warn about symlink pointing inside a gitdir.
58+
59+
* Various fix-ups on HTTP tests.
60+
61+
* Test update.
62+
63+
* HTTP Header redaction code has been adjusted for a newer version of
64+
cURL library that shows its traces differently from earlier
65+
versions.
66+
67+
* Fix was added to work around a regression in libcURL 8.7.0 (which has
68+
already been fixed in their tip of the tree).
69+
70+
* Replace macos-12 used at GitHub CI with macos-13.
71+
72+
* ci(linux-asan/linux-ubsan): let's save some time
73+
74+
* Tests with LSan from time to time seem to emit harmless message that makes
75+
our tests unnecessarily flakey; we work it around by filtering the
76+
uninteresting output.
77+
78+
* Update GitHub Actions jobs to avoid warnings against using deprecated
79+
version of Node.js.

Documentation/fsck-msgids.txt

+12
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,18 @@
157157
`nullSha1`::
158158
(WARN) Tree contains entries pointing to a null sha1.
159159

160+
`symlinkPointsToGitDir`::
161+
(WARN) Symbolic link points inside a gitdir.
162+
163+
`symlinkTargetBlob`::
164+
(ERROR) A non-blob found instead of a symbolic link's target.
165+
166+
`symlinkTargetLength`::
167+
(WARN) Symbolic link target longer than maximum path length.
168+
169+
`symlinkTargetMissing`::
170+
(ERROR) Unable to read symbolic link target's blob.
171+
160172
`treeNotSorted`::
161173
(ERROR) A tree is not properly sorted.
162174

Documentation/git-upload-pack.txt

+31
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,37 @@ ENVIRONMENT
5555
admins may need to configure some transports to allow this
5656
variable to be passed. See the discussion in linkgit:git[1].
5757

58+
`GIT_NO_LAZY_FETCH`::
59+
When cloning or fetching from a partial repository (i.e., one
60+
itself cloned with `--filter`), the server-side `upload-pack`
61+
may need to fetch extra objects from its upstream in order to
62+
complete the request. By default, `upload-pack` will refuse to
63+
perform such a lazy fetch, because `git fetch` may run arbitrary
64+
commands specified in configuration and hooks of the source
65+
repository (and `upload-pack` tries to be safe to run even in
66+
untrusted `.git` directories).
67+
+
68+
This is implemented by having `upload-pack` internally set the
69+
`GIT_NO_LAZY_FETCH` variable to `1`. If you want to override it
70+
(because you are fetching from a partial clone, and you are sure
71+
you trust it), you can explicitly set `GIT_NO_LAZY_FETCH` to
72+
`0`.
73+
74+
SECURITY
75+
--------
76+
77+
Most Git commands should not be run in an untrusted `.git` directory
78+
(see the section `SECURITY` in linkgit:git[1]). `upload-pack` tries to
79+
avoid any dangerous configuration options or hooks from the repository
80+
it's serving, making it safe to clone an untrusted directory and run
81+
commands on the resulting clone.
82+
83+
For an extra level of safety, you may be able to run `upload-pack` as an
84+
alternate user. The details will be platform dependent, but on many
85+
systems you can run:
86+
87+
git clone --no-local --upload-pack='sudo -u nobody git-upload-pack' ...
88+
5889
SEE ALSO
5990
--------
6091
linkgit:gitnamespaces[7]

Documentation/git.txt

+31
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,37 @@ The index is also capable of storing multiple entries (called "stages")
10401040
for a given pathname. These stages are used to hold the various
10411041
unmerged version of a file when a merge is in progress.
10421042

1043+
SECURITY
1044+
--------
1045+
1046+
Some configuration options and hook files may cause Git to run arbitrary
1047+
shell commands. Because configuration and hooks are not copied using
1048+
`git clone`, it is generally safe to clone remote repositories with
1049+
untrusted content, inspect them with `git log`, and so on.
1050+
1051+
However, it is not safe to run Git commands in a `.git` directory (or
1052+
the working tree that surrounds it) when that `.git` directory itself
1053+
comes from an untrusted source. The commands in its config and hooks
1054+
are executed in the usual way.
1055+
1056+
By default, Git will refuse to run when the repository is owned by
1057+
someone other than the user running the command. See the entry for
1058+
`safe.directory` in linkgit:git-config[1]. While this can help protect
1059+
you in a multi-user environment, note that you can also acquire
1060+
untrusted repositories that are owned by you (for example, if you
1061+
extract a zip file or tarball from an untrusted source). In such cases,
1062+
you'd need to "sanitize" the untrusted repository first.
1063+
1064+
If you have an untrusted `.git` directory, you should first clone it
1065+
with `git clone --no-local` to obtain a clean copy. Git does restrict
1066+
the set of options and hooks that will be run by `upload-pack`, which
1067+
handles the server side of a clone or fetch, but beware that the
1068+
surface area for attack against `upload-pack` is large, so this does
1069+
carry some risk. The safest thing is to serve the repository as an
1070+
unprivileged user (either via linkgit:git-daemon[1], ssh, or using
1071+
other tools to change user ids). See the discussion in the `SECURITY`
1072+
section of linkgit:git-upload-pack[1].
1073+
10431074
FURTHER DOCUMENTATION
10441075
---------------------
10451076

GIT-VERSION-GEN

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
22

33
GVF=GIT-VERSION-FILE
4-
DEF_VER=v2.39.3
4+
DEF_VER=v2.39.4
55

66
LF='
77
'

INSTALL

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ Issues of note:
139139
not need that functionality, use NO_CURL to build without
140140
it.
141141

142-
Git requires version "7.19.5" or later of "libcurl" to build
142+
Git requires version "7.21.3" or later of "libcurl" to build
143143
without NO_CURL. This version requirement may be bumped in
144144
the future.
145145

RelNotes

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Documentation/RelNotes/2.39.3.txt
1+
Documentation/RelNotes/2.39.4.txt

0 commit comments

Comments
 (0)