- 10 Jun, 2017 2 commits
-
-
When deleting a directory during checkout, do not simply delete the directory, since there may be untracked files. Instead, go into the iterator and examine each file. In the original code (the code with the faulty assumption), we look to see if there's an index entry beneath the directory that we want to remove. Eg, it looks to see if we have a workdir entry foo and an index entry foo/bar.txt. If this is not the case, then the working directory must have precious files in that directory. This part is okay. The part that's not okay is if there is an index entry foo/bar.txt. It just blows away the whole damned directory. That's not cool. Instead, by simply pushing the directory itself onto the stack and iterating each entry, we will deal with the files one by one - whether they're in the index (and can be force removed) or not (and are precious). The original code was a bad optimization, assuming that we didn't need to git_iterator_advance_into if there was any index entry in the folder. That's wrong - we could have optimized this iff all folder entries are in the index. Instead, we need to simply dig into the directory and analyze its entries.
Edward Thomson committed -
If the `GIT_CHECKOUT_FORCE` flag is given to any of the `git_checkout` invocations, we remove files which were previously staged. But while doing so, we unfortunately also remove unstaged files in a directory which contains at least one staged file, resulting in potential data loss. This commit adds two tests to verify behavior.
Patrick Steinhardt committed
-
- 10 Apr, 2017 1 commit
-
-
Patrick Steinhardt committed
-
- 07 Apr, 2017 2 commits
-
-
Coverity
Edward Thomson committed -
pkgconfig: fix handling of prefixes containing whitespaces
Edward Thomson committed
-
- 05 Apr, 2017 1 commit
-
-
Our libgit2.pc.in file is quoting the `libdir` variable in our declared "Libs:" line. The intention is to handle whitespaces here, but pkgconfig already does so by automatically escaping whitespace with backslashes. The correct thing to do is to instead quote the prefix, as this is the one which is being substituted by CMake upon installation. As both libdir and includedir will be expanded to "${prefix}/lib" and "${prefix}/include", respectively, pkgconfig will also correctly escape whitespaces. Note that this will actually break when a user manually wants to override libdir and includedir with a path containing whitespace. But actually, this cannot be helped, as always quoting these variables will actuall break the common case of being prefixed with "${prefix}". So we just bail out here and declare this as unsupported out of the box.
Patrick Steinhardt committed
-
- 04 Apr, 2017 5 commits
-
-
When executing `git_futils_mmap_ro_file`, we first try to guess whether the file is mmapable at all. Part of this check is whether the file is too large to be mmaped, which can be true on systems with 32 bit `size_t` types. The check is performed by first getting the file size wtih `git_futils_filesize` and then checking whether the returned size can be represented as `size_t`, returning an error if so. While this test also catches the case where the function returned an error (as `-1` is not representable by `size_t`), we will set the misleading error message "file too large to mmap". But in fact, a negative return value from `git_futils_filesize` will be caused by the inability to fstat the file. Fix the error message by handling negative return values separately and not overwriting the error message in that case.
Patrick Steinhardt committed -
We do not check the return value of `git__calloc`, which may return `NULL` in out-of-memory situations. Fix the error by using `GITERR_CHECK_ALLOC`.
Patrick Steinhardt committed -
Short-circuit the call to `git_path_resolve_relative` in case `git_buf_joinpath` returns an error. While this does not fix any immediate errors, the resulting code is easier to read and handles potential new error conditions raised by `git_buf_joinpath`.
Patrick Steinhardt committed -
In the `_check_dir_contents` function, we first allocate memory for joining the directory and subdirectory together and afterwards use `git_buf_joinpath`. While this function in fact should not fail as memory is already allocated, err on the safe side and check for returned errors.
Patrick Steinhardt committed -
The current code in `parse_section_header_ext` is only prepared to properly handle out-of-memory conditions for the `git_buf` structure. While very unlikely and probably caused by a programming error, it is also possible to run into error conditions other than out-of-memory previous to reaching the actual parsing loop. In these cases, we will run into undefined behavior as the `rpos` variable is only initialized after these triggerable errors, but we use it in the cleanup-routine. Fix the issue by unifying the function's cleanup code with an `end_error` section, which will not use the `rpos` variable.
Patrick Steinhardt committed
-
- 03 Apr, 2017 2 commits
-
-
Correct non-existent file references in `odb.h`
Edward Thomson committed -
There are references to odb_backends.h when the file is actually named odb_backend.h and in the sys folder.
Remy Suen committed
-
- 28 Mar, 2017 5 commits
-
-
git_treebuilder_write_with_buffer refactorings
Edward Thomson committed -
While writing the tree inside of a buffer, we check whether the buffer runs out of memory after each tree entry. While we set the error code as soon as we detect the OOM situation, we happily proceed iterating over the entries. This is not useful at all, as we will try to write into the buffer repeatedly, which cannot work. Fix this by exiting as soon as we are OOM.
Patrick Steinhardt committed -
The `git_tree_entry *entry` variable is defined twice inside of this function. While this is not a problem currently, remove the shadowing variable to avoid future confusion.
Patrick Steinhardt committed -
While we detect errors in `git_treebuilder_write_with_buffer`, we just exit directly instead of freeing allocated memory. Fix this by remembering error codes and skipping forward to the function's cleanup code.
Patrick Steinhardt committed -
Fix memory leaks
Patrick Steinhardt committed
-
- 24 Mar, 2017 3 commits
-
-
Patrick Steinhardt committed
-
The recent addition of an error code to `pass_whole_blame` in ff8d2eb1 (blame_git: check return value of object lookup, 2017-03-20) introduced a spurious goto. Remove it.
Patrick Steinhardt committed -
git_futils: don't O_EXCL and O_TRUNC
Patrick Steinhardt committed
-
- 23 Mar, 2017 6 commits
-
-
sha1dc: perf improvements from upstream
Carlos Martín Nieto committed -
Edward Thomson committed
-
Edward Thomson committed
-
Edward Thomson committed
-
inet_pton: don't assume addr families don't exist
Edward Thomson committed -
Update SHA-1 collision detection code (cr-marcstevens/sha1collisiondetection) to master to include performance improvements.
Edward Thomson committed
-
- 22 Mar, 2017 6 commits
-
-
Worktree fixes
Edward Thomson committed -
fsync all the things
Edward Thomson committed -
Coverity fixes
Edward Thomson committed -
Fix the documentation for git_cred_acquire_cb
Edward Thomson committed -
Address family 5 might exist on some crazy system like Haiku. Use `INT_MAX-1` as an unsupported address family.
Edward Thomson committed -
`O_EXCL` and `O_TRUNC` are mutually exclusive flags to open(2); you can't truncate a file if you're asserting that it can't exist in the first place. Drop `O_TRUNC`.
Edward Thomson committed
-
- 21 Mar, 2017 7 commits
-
-
git_cred_acquire_cb isn't using the standard @param and @return tags. This is causing the generated documentation to not be formatted properly.
Remy Suen committed -
Patrick Steinhardt committed
-
While parsing patch header lines, we iterate over each line and check if the line has trailing garbage. What we do not check though is that the line is actually a line ending with a trailing newline. Fix this by checking the return code of `parse_advance_expected_str`.
Patrick Steinhardt committed -
The `pack_entry_find_prefix` function receives a `git_rawobj` structure as argument. While the function first initializes the structure to a sensible state, Coverity is unable to correctly detect this, resulting in a warning. Fix this warning by initializing the object to all-zeroes before passing it to the function.
Patrick Steinhardt committed -
While parsing section headers, we use a buffer to store the actual section name. We do not check though if the buffer runs out of memory at any stage. Do so.
Patrick Steinhardt committed -
The function `pass_whole_blame` performs an object lookup but does not check if the lookup actually succeeds. Convert the function to return an error code and check for it in the calling function.
Patrick Steinhardt committed -
README: Mention how to run tests
Edward Thomson committed
-