summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* tests: only copy when `ptr` is non-NULLpks/test-allocatorEdward Thomson2023-05-151-2/+6
| | | | Avoid passing a `NULL` ptr to `memcpy` -- that's UB (even if size is 0)
* tests: add allocation failure test for buffersPatrick Steinhardt2023-05-151-0/+13
| | | | | Test that `git_buf` correctly fails if no more bytes can be allocated. This is mostly for demonstration purposes.
* tests: add allocator with limited number of bytesPatrick Steinhardt2023-05-154-2/+200
| | | | | | | | | | | | | | | | | | | | | | | | In several circumstances, we get bug reports about things that happen in situations where the environment is quite limited with regards to available memory. While it's expected that functionality will fail if memory allocations fail, the assumption is that we should do so in a controlled way. Most importantly, we do not want to crash hard due to e.g. accessing NULL pointers. Naturally, it is quite hard to debug such situations. But since our addition of pluggable allocators, we are able to implement allocators that fail in deterministic ways, e.g. after a certain amount of bytes has been allocated. This commit does exactly that. To be able to properly keep track of the amount of bytes currently allocated, allocated pointers contain tracking information. This tracking information is currently limited to the number of bytes allocated, so that we can correctly replenish them on calling `free` on the pointer. In the future, it would be feasible to extend the tracked information even further, e.g. by adding information about file and line where the allocation has been performed. As this introduced some overhead to allocations though, only information essential to limited allocations is currently tracked.
* alloc: simplify pluggable allocatorsEdward Thomson2023-05-147-288/+101
| | | | | | | | | | | | | Remove the number of functions that custom allocator users need to provide; nobody should need to implement `substrdup`. Keep it to the basics that are actually _needed_ for allocation (malloc, realloc, free) and reimplement the rest ourselves. In addition, move the failure check and error setting _out_ of the custom allocators and into a wrapper so that users don't need to deal with this. This also allows us to call our allocator (without the wrapper) early so that it does not try to set an error on failure, which may be important for bootstrapping.
* Merge pull request #6535 from libgit2/ethomson/timeoutsEdward Thomson2023-05-1345-410/+779
|\
| * clone: skip timeout tests on WinHTTPethomson/timeoutsEdward Thomson2023-05-131-0/+16
| |
| * win32: use WSAGetLastError to determine blockingEdward Thomson2023-05-131-1/+14
| |
| * win32: getsockopt takes a `char *` instead of a `void *`Edward Thomson2023-05-131-1/+2
| | | | | | | | Monsters.
| * cmake: use `check_symbol_exists` for rand functionsEdward Thomson2023-05-131-2/+2
| | | | | | | | | | `check_symbol_exists` is superior to `check_function_exists`; use it consistently in our cmake configuration
| * posix: use WSAPoll on win32Edward Thomson2023-05-133-2/+10
| |
| * posix: introduce p_poll emulation with selectEdward Thomson2023-05-135-5/+85
| | | | | | | | Not all systems have poll(2); emulate it with select(2).
| * streams: sockets are non-blocking and can timeoutEdward Thomson2023-05-139-30/+335
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make socket I/O non-blocking and add optional timeouts. Users may now set `GIT_OPT_SET_SERVER_CONNECT_TIMEOUT` to set a shorter connection timeout. (The connect timeout cannot be longer than the operating system default.) Users may also now configure the socket read and write timeouts with `GIT_OPT_SET_SERVER_TIMEOUT`. By default, connects still timeout based on the operating system defaults (typically 75 seconds) and socket read and writes block. Add a test against our custom testing git server that ensures that we can timeout reads against a slow server.
| * ci: update to poxygit v0.6.0Edward Thomson2023-05-131-1/+1
| | | | | | | | | | v0.6.0 of poxygit add support for throttling connections to test timeouts and low-bandwidth situations.
| * net: move `gitno` buffer to `staticstr`Edward Thomson2023-05-1322-237/+151
| | | | | | | | | | | | | | | | The `gitno` buffer interface is another layer on top of socket reads. Abstract it a bit into a "static string" that has `git_str` like semantics but without heap allocation which moves the actual reading logic into the socket / stream code, and allows for easier future usage of a static / stack-allocated `git_str`-like interface.
| * net: move rfc2818 hostname / wildcard matching to utilEdward Thomson2023-05-137-78/+80
| |
| * stransport: store error informationEdward Thomson2023-05-131-11/+28
| | | | | | | | | | | | We lose some error information from the read / write callbacks to stransport. Store our own error value in the object so that we can ensure that we rely upon it.
| * util: make monotonic time fn return msEdward Thomson2023-05-1310-53/+66
|/ | | | | | | | | | | | | | | | | `git__timer` is now `git_time_monotonic`, and returns milliseconds since an arbitrary epoch. Using a floating point to store the number of seconds elapsed was clever, as it better supports the wide range of precision from the different monotonic clocks of different systems. But we're a version control system, not a real-time clock. Milliseconds is a good enough precision for our work _and_ it's the units that system calls like `poll` take and that our users interact with. Make `git_time_monotonic` return the monotonically increasing number of milliseconds "ticked" since some arbitrary epoch.
* Merge pull request #5722 from libgit2/ethomson/tlsdata_failEdward Thomson2023-05-137-33/+118
|\ | | | | Thread-local storage: handle failure cases
| * threadstate: don't use an unnecessary macroEdward Thomson2023-05-133-11/+9
| | | | | | | | | | Now that we've reduced the usage of GIT_THREADSTATE, remove it entirely in favor of git_threadstate_get().
| * oid: don't assume thread local state was initializedEdward Thomson2023-05-135-13/+45
| | | | | | | | | | | | git_oid_tostr_s could fail if thread-local state initialization fails. In that case, it will now return `NULL`. Callers should check for `NULL` and propagate the failure.
| * errors: don't rely on tls data workingEdward Thomson2023-05-131-13/+68
| | | | | | | | | | | | Thread-local storage data may fail to initialize; in this case, do not try to set the error message into it. When the thread state has not been initialized, return a hardcoded message to that affect.
| * errors: drop unneccessary g_git prefixEdward Thomson2023-05-131-6/+6
|/
* Merge pull request #6488 from libgit2/ethomson/workflowEdward Thomson2023-05-134-126/+146
|\ | | | | actions: simplify execution with composite action
| * reusableethomson/workflowEdward Thomson2023-02-172-60/+73
| |
| * nightlyEdward Thomson2023-02-171-29/+14
| |
| * fixup! fixup! actions: simplify execution with composite actionEdward Thomson2023-02-161-2/+2
| |
| * fixup! actions: simplify execution with composite actionEdward Thomson2023-02-161-1/+1
| |
| * actions: simplify execution with composite actionEdward Thomson2023-02-162-37/+59
| |
* | Merge pull request #6561 from libgit2/ethomson/xdiffEdward Thomson2023-05-1312-129/+133
|\ \ | | | | | | Update xdiff to git 2.40.1's version
| * | xdiff: update to xdiff from git 2.40.1ethomson/xdiffEdward Thomson2023-05-1111-129/+131
| | |
| * | util: add GIT_UNUSED_ARGEdward Thomson2023-05-111-0/+2
| | | | | | | | | | | | | | | Add `GIT_UNUSED_ARG` which is an attribute for arguments, for compatibility with dependencies.
* | | Merge pull request #6558 from DimitryAndric/fix-qsort-variants-2Edward Thomson2023-05-125-23/+41
|\ \ \ | |/ / |/| | Work around -Werror problems when detecting qsort variants
| * | cmake: refactor `check_prototype_definition`Edward Thomson2023-05-123-15/+21
| | | | | | | | | | | | | | | Introduce `check_prototype_definition_safe` that is safe for `Werror` usage.
| * | cmake: simplify QSORT namesEdward Thomson2023-05-123-18/+20
| | | | | | | | | | | | `QSORT_R` and `QSORT_S` -> `QSORT`
| * | Work around -Werror problems when detecting qsort variantsDimitry Andric2023-05-091-0/+10
| | | | | | | | | | | | | | | | | | | | | If `ENABLE_WERROR` is on, the CMake configure tests for the `qsort_r` and `qsort_s` variants may fail due to warnings about unused functions or unused parameters. These warnings can be ignored, so disable them specifically for running those tests.
* | | Merge pull request #6557 from libgit2/ethomson/shallowEdward Thomson2023-05-0960-76/+1628
|\ \ \ | |/ / |/| | Shallow (#6396) with some fixes from review
| * | fetch: remove `unshallow` optionEdward Thomson2023-05-093-13/+15
| | | | | | | | | | | | | | | The `depth` field is suitable to specify unshallowing; provide an enum to aide in specifying the `unshallow` value.
| * | oid: use an oid array instead of shallowarrayEdward Thomson2023-05-0918-176/+304
| | | | | | | | | | | | | | | | | | Users should provide us an array of object ids; we don't need a separate type. And especially, we should not be mutating user-providing values. Instead, use `git_oid *` in the shallow code.
| * | cli: add --depth option to cloneEdward Thomson2023-05-081-6/+22
| | |
| * | grafts: make `from_file` be `open_or_refresh`Edward Thomson2023-05-083-8/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The semantics of `from_file` are weird - it looks like a function that just opens a file, but it actually inspects the pointer, which is unexpected and could make things very crashy. Make an `open` function that just does an open, and move the magic to `open_or_refresh` whose name better indicates that it may do weird stuff.
| * | shallow: cleanup whitespace in testsEdward Thomson2023-05-081-16/+16
| | |
| * | shallow: don't default to -1 for depthEdward Thomson2023-05-083-12/+9
| | | | | | | | | | | | | | | Depth of `0` should indicate full depth. Disallow negative values (they may have a future meaning) and use `0` as the default.
| * | grafts: handle SHA256 graft filesEdward Thomson2023-05-085-12/+24
| | |
| * | grafts: use `git_parse` to parse object IDsEdward Thomson2023-05-081-9/+7
| | | | | | | | | | | | Don't mix parsing by hand and using `git_parse` to parse.
| * | futils: use SHA256 for checksums alwaysEdward Thomson2023-05-082-7/+11
| | | | | | | | | | | | | | | | | | | | | | | | Use SHA256 for file checksums. SHA1 makes no sense as a default in 2023. Given that we're just looking at a file checksum to see if it's changed, this does not need to take repository's OID type into account or otherwise be configurable.
| * | shallow: avoid unnecessary pkt freeEdward Thomson2023-05-081-7/+9
| | | | | | | | | | | | Looks like a double-free here.
| * | transport: transports understand oid typeEdward Thomson2023-04-253-12/+24
| | | | | | | | | | | | Teach the smart transport more about oid types, instead of assuming SHA1.
| * | shallow: don't assume SHA1Edward Thomson2023-04-252-26/+46
| | |
| * | smart: validate shallow/unshallow pktsEdward Thomson2023-04-251-6/+24
| | |
| * | shallow: use GIT_ASSERT (not assert)Edward Thomson2023-04-242-11/+13
| | |