Commit Graph

16032 Commits

Author SHA1 Message Date
Edward Thomson
7ed8f12087 ssh_exec: use GIT_SSH_COMMAND in tests
We specify additional arguments to the ssh executable; as a result, we
specify arguments with `GIT_SSH_COMMAND`.
2025-12-01 21:44:36 +00:00
Edward Thomson
dfadbd0c8f ssh_exec: support GIT_SSH_COMMAND
Look for the `GIT_SSH_COMMAND` environment variable and prefer it to
`GIT_SSH`. The `GIT_SSH_COMMAND` will execute via the shell, which is
useful to provide additional arguments.
2025-12-01 21:44:36 +00:00
Edward Thomson
f05143b946 ssh_exec: escape remote paths properly
When sending paths to the remote server, escape them properly.
Escape them with a single quote, followed by the escaped character,
followed by another single quote. This prevents misparsing on the
remote side and potential command injection.
2025-12-01 21:44:36 +00:00
Edward Thomson
4c9134e501 str: allow escaping with prefix and suffix
Allow `git_str_puts_escaped` to take an escaping prefix and an escaping
suffix; this allows for more options, including the ability to better
support escaping executed paths.
2025-12-01 21:44:36 +00:00
Edward Thomson
adac288376 str: add case insensitive suffixcmp 2025-12-01 21:44:36 +00:00
Edward Thomson
479a1b5a92 ssh_exec: don't use sh for ssh execution
Construct the arguments for the ssh exec as an explicit array, instead
of trying to create a command-line for sh. The latter may use user input
(the remote path) so this may be vulnerable to command injection.
2025-12-01 21:44:36 +00:00
Edward Thomson
2ad709e77c process: resolve paths for win32
When using `git_process_new` on win32, resolve the path to the
application in the same way that we do on POSIX.

Search `PATH` for command to execute (unless the given executable is
fully qualified). In addition, better match Windows executable lookup
behavior itself (allowing the command to be `foo`, and looking for a
matching `foo.exe` or `foo.cmd`.)
2025-12-01 21:44:36 +00:00
Edward Thomson
98ba974617 process: improved process execution with shell
By default, `git_process_new` will no longer try to prepare a single
string to execute with the shell. Instead, by default, arguments remain
parameterized and the command to execute is located within the `PATH`.

The shell can also still optionally be used (so that additional
arguments can be included and variables handled appropriately) but this
is done by keeping arguments parameterized for safety.

This new behavior prevents accidental misuse and potential command-line
injection.
2025-11-30 23:51:52 +00:00
Edward Thomson
4d1e950326 fs: improve executable search on Windows
Ensure that when we look for an executable on Windows that we add
executable suffixes (`.exe`, `.cmd`). Without this, we would not support
looking for (eg) `ssh`, since we actually need to identify a file named
`ssh.exe` (or `ssh.cmd`) in `PATH`.
2025-11-29 12:50:44 +00:00
Edward Thomson
0f20ba29c1 fs: improve path-in-executable location
* Do not search `PATH` for fully- or partially-qualified filenames
  (eg, `foo/bar`)
* Ensure that a file in the `PATH` is executable before returning it
2025-11-29 12:50:44 +00:00
Edward Thomson
ed39bcee40 fs: improved executable-in-path location tests
Ensure that our `find_executable` behaves as expected:

* When the executable contains a fully- or partially-qualified filename
  component (eg, `foo/bar`) that `PATH` is not searched; these paths are
  relative to the current working directory.
* An empty segment in `PATH` (on POSIX systems) is treated as the
  current directory; this is for compatibility with Bourne shells.
* When a file exists in `PATH`, it is actually executable (on POSIX)
2025-11-29 12:50:44 +00:00
Patrick Steinhardt
58d9363f02 Merge pull request #7091 from emmanuel-ferdman/main
Update `racy.c` reference
2025-08-11 11:13:31 +02:00
Patrick Steinhardt
9d5f1bacc2 Merge pull request #7114 from pks-gitlab/pks-msvc-different-enum-warnings
cmake: disable warnings for operands with different enum types
2025-08-04 16:30:00 +02:00
Patrick Steinhardt
5d78d634f2 cmake: disable warnings for operands with different enum types
With a recent upgrade to a newer version of MSVC we now get a bunch of
warnings when two operands use different enum types. While sensible in
theory, in practice we have a couple of non-public enums that extend
public enums, like for example with `GIT_SUBMODULE_STATUS`.

Let's for now disable this warning to unblock our builds. The
alternative would be to add casts all over the place, but that feels
rather cumbersome.
2025-08-01 08:48:59 +02:00
Emmanuel Ferdman
b87080c069 Update racy.c reference
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-06-14 04:11:54 -07:00
Edward Thomson
5ab90d3c27 Merge pull request #7087 from libgit2/ethomson/transport_register_docs 2025-06-06 22:36:09 +01:00
Edward Thomson
3fd47e36f7 Merge pull request #7086 from libgit2/ethomson/licenses 2025-06-06 22:35:40 +01:00
Edward Thomson
2643c31c37 Merge pull request #7085 from libgit2/ethomson/ssh_exec 2025-06-06 22:35:28 +01:00
Edward Thomson
a9ae10c32d transport: update registration docs
The documentation for `git_transport_register` erroneously stated that
the trailing `://` was required for the scheme. It is not.
2025-06-06 21:18:51 +01:00
Edward Thomson
516302bc53 openssl: update dynamic to OpenSSL 3.0 definitions
Use the definitions from OpenSSL 3.0 so that we can move to the OpenSSL
3.0 license (Apache).
2025-06-06 21:15:38 +01:00
Edward Thomson
bdb12e90d0 license: update wildmat license information
Our license claims that the wildmat code (originally from Rich $alz) is
is under a BSD license that requires attribution. However, the wildmat
documentation states that the code is available in the public domain
(https://github.com/richsalz/wildmat), and the author himself has
indicated that we can remove the acknowledgement clause
(https://github.com/libgit2/libgit2/issues/7050#issuecomment-2727028530).
2025-06-06 21:15:38 +01:00
Edward Thomson
a3248405fe ssh: use more compatible git commands over ssh
git runs commands as "git-upload-pack 'path-to-repo'", and some servers
enforce the single-quoted syntax. Emulate this.
2025-06-06 20:33:10 +01:00
Edward Thomson
dbc19dc08e Merge pull request #7077 from JohannesWilde/AvoidDuplicateDefinition
Avoid duplicate definition of git_http_auth_dummy.
2025-06-05 14:00:40 +01:00
Edward Thomson
d0da6819ec Merge pull request #7057 from kivikakk/diff-stat-alignment
diff: correct diff stat alignment in presence of renames w/ common prefix.
2025-06-05 13:53:57 +01:00
Edward Thomson
de652db0e1 Merge pull request #7044 from nelhage/fix-fuzzer-build
fuzzers: Fix CFLAGS
2025-06-05 13:26:14 +01:00
Edward Thomson
dd65bfe181 Avoid duplicate definition of git_http_auth_dummy
Avoid defining `git_http_auth_ntlm` when not using ntlm; this will be
set to a dummy function instead.
2025-06-05 13:20:29 +01:00
Edward Thomson
3082736857 Merge pull request #7059 from georgthegreat/circular-includes
Fix circular includes between types.h and oid.h
2025-06-05 13:11:20 +01:00
Edward Thomson
29e4e1984d Merge pull request #7064 from wklatka/openssl-fips-memory-leak
Fix memory leak in openssl fips modes
2025-06-05 12:46:21 +01:00
Edward Thomson
c232aec6f3 Merge pull request #7076 from DominiqueFuchs/docfix-remote-url
docs: correct wrong docstring info for git_remote_url
2025-06-04 15:38:08 +01:00
Edward Thomson
a95181aed6 Merge pull request #7061 from csware/tag-head
tag: Refuse to use HEAD as a tagname
2025-06-04 15:29:29 +01:00
Edward Thomson
488560c270 Merge pull request #7079 from Faless/fix/static_linker_flags
Fix MSVC cross compilation
2025-06-04 10:29:09 +01:00
Fabio Alessandrelli
4c7bca5e2f Fix MSVC cross compilation
Currently, the DefaultCFlags.cmake overrides the
CMAKE_STATIC_LINKER_FLAGS to suppress linker warnings about files with
no symbols defined.

This has the side effect of breaking MSVC cross compilation (where
CMAKE_STATIC_LINKER_FLAGS is used to specify the /MACHINE:ARCH flag)

This commit make sure we append to CMAKE_STATIC_LINKER_FLAGS instead of
replacing its values
2025-05-27 19:00:09 +02:00
Johannes Wilde
c881632306 Avoid duplicate definition of git_http_auth_dummy.
src\libgit2\transports\auth_negotiate.h redefines git_http_auth_negotiate as git_http_auth_dummy if GIT_AUTH_NEGOTIATE is not defined, which thus leads to the uncommented code actually being a redifintion of git_http_auth_dummy. The linker complained [Windows 11, MSVC 2022 64bit].
2025-05-24 13:31:56 +02:00
Dominique Fuchs
00e1550a23 docs: correct docstring info for git_remote_url
Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
2025-05-16 15:00:53 +02:00
wklatka
4e8717fbc9 Fixed memory leak in openssl fips modes 2025-04-11 15:27:24 +02:00
Sven Strickroth
3dc766a875 tag: Refuse to use HEAD as a tagname
Sync with vanilla Git, cf. https://github.com/git/git/commit/bbd445d5efd415

Signed-off-by: Sven Strickroth <email@cs-ware.de>
2025-04-07 21:18:20 +02:00
Yuriy Chernyshov
60fdf919e7 Fix circular includes between types.h and oid.h 2025-03-31 13:04:34 +03:00
Talya Connor
d88347a89c AUTHORS: add self. 2025-03-29 18:51:33 +11:00
Talya Connor
9f93169473 diff: account for common prefix in max namelen. 2025-03-29 18:50:19 +11:00
Talya Connor
31f5c30999 test: failing diff stat test. 2025-03-29 18:16:45 +11:00
Nelson Elhage
1f4f900766 Don't use -fsanitizer for the standalone fuzzer build. 2025-03-03 23:47:41 +00:00
Nelson Elhage
4cd34f1d94 fuzzers: Fix CFLAGS
I'm seeing the current fuzzer build fail (during `cmake`) like so:

```
-- Performing Test IS_FSANITIZE_FUZZER_NO_LINK_SUPPORTED
-- Performing Test IS_FSANITIZE_FUZZER_NO_LINK_SUPPORTED - Failed
CMake Error at cmake/AddCFlagIfSupported.cmake:17 (message):
  Required flag -fsanitize=fuzzer-no-link is not supported
Call Stack (most recent call first):
  fuzzers/CMakeLists.txt:6 (add_c_flag)
```

The cmake log output contains something like so:

```
        /src/aflplusplus/libAFLDriver.a(aflpp_driver.o): in function `main':
        aflpp_driver.c:(.text+0x11b): undefined reference to `LLVMFuzzerTestOneInput'
        clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

I haven't figured out exactly what's happening, but I believe that
once line 5 has added `-fsanitize=fuzzer` to `CFLAGS`, future compile-
tests **also** use it during linking. This in turn pulls in the fuzzer
`main`, which expects an `LLVMFuzzerTestOneInput` symbol, and thus
fails.

Instead, just add `-fsanitize=fuzzer-no-link` to CFLAGS (as suggested
[by the documentation][libfuzzer]), and then use `-fsanitize=fuzzer`
only for linking the fuzzer targets. At least in my environment, this
results in a working fuzzer build.

[libfuzzer]: https://llvm.org/docs/LibFuzzer.html#fuzzer-usage
2025-03-03 22:51:52 +00:00
Edward Thomson
21a351b0ed Merge pull request #7043 from libgit2/ethomson/benchmark
Benchmarks: refactoring
2025-03-02 22:48:48 +01:00
Edward Thomson
2599c96d25 ci: run administrative benchmarks 2025-03-02 20:46:38 +00:00
Edward Thomson
771ec303d4 benchmarks: introduce --admin flag for admin benchmarks
Some benchmarks require administrative privileges, namely the ones that
blow up the disk cache. Don't run them by default, to avoid obnoxious
sudo password prompts, etc. Users can specify `--admin` to run them.
2025-03-02 20:46:38 +00:00
Edward Thomson
8d8ab0b110 benchmarks: rename cache benchmarks
The default in the world is to have a disk cache; it's exceptional to
_not_. Flip our naming, so that the (exceptional) `nocache` tests are
called out explicitly.
2025-03-02 20:46:38 +00:00
Edward Thomson
1c485493cc Merge pull request #7042 from libgit2/ethomson/benchmark 2025-03-02 10:56:58 +01:00
Edward Thomson
48d031f6ab cli: fix benchmark commit interrogation
Don't fail the benchmark script if we can't identify the CLI commit.
2025-03-02 08:56:38 +00:00
Edward Thomson
eb22b60063 Merge pull request #7039 from ytnuf/stdint
Revert include path regression
2025-02-26 16:46:53 +01:00
ytnuf
a465da73a5 Revert include path regression 2025-02-13 11:10:45 +00:00