libgit2/src
Patrick Steinhardt 2176670289 blame: do not decrement commit refcount in make_origin
When we create a blame origin, we try to look up the blob that is
to be blamed at a certain revision. When this lookup fails, e.g.
because the file did not exist at that certain revision, we fail
to create the blame origin and return `NULL`. The blame origin
that we have just allocated is thereby free'd with
`origin_decref`.

The `origin_decref` function does not only decrement reference
counts for the blame origin, though, but also for its commit and
blob. When this is done in the error case, we will cause an
uneven reference count for these objects. This may result in
hard-to-debug failures at seemingly unrelated code paths, where
we try to access these objects when they in fact have already
been free'd.

Fix the issue by refactoring `make_origin` such that we only
allocate the object after the only function that may fail so that
we do not have to call `origin_decref` at all. Also fix the
`pass_blame` function, which indirectly calls `make_origin`, to
free the commit when `make_origin` failed.
2016-06-29 14:43:00 +02:00
..
hash hash_generic: __extension__ keyword for pedantry 2015-02-04 15:26:09 -05:00
transports HTTP authentication scheme name is case insensitive. 2016-06-19 11:46:43 +01:00
unix threads: add platform-independent thread initialization function 2016-06-20 20:07:33 +02:00
win32 threads: add platform-independent thread initialization function 2016-06-20 20:07:33 +02:00
xdiff leaks: call xdl_free_classifier 2016-03-31 10:43:57 -04:00
annotated_commit.c annotated_commit: provide refs and description 2016-04-26 13:19:58 -04:00
annotated_commit.h annotated_commit: provide refs and description 2016-04-26 13:19:58 -04:00
apply.c vector: more sensible names for grow_at/shrink_at 2016-05-26 13:01:08 -05:00
apply.h Introduce git_apply_patch 2016-05-26 11:36:11 -05:00
array.h Introduce git_apply_patch 2016-05-26 11:36:11 -05:00
attr_file.c attr_file: fix resource leak 2016-02-09 11:11:38 +01:00
attr_file.h Improvements to ignore performance on Windows. 2015-04-28 14:24:58 -04:00
attr.c attr: always return errors 2015-05-12 14:39:49 -04:00
attr.h Attribute file cache refactor 2014-04-17 14:56:41 -07:00
attrcache.c pool: Simplify implementation 2015-10-28 10:13:13 +01:00
attrcache.h attrcache: don't re-read attrs during checkout 2015-02-03 00:31:08 -05:00
bitvec.h Address PR comments 2014-02-20 14:27:10 -08:00
blame_git.c blame: do not decrement commit refcount in make_origin 2016-06-29 14:43:00 +02:00
blame_git.h blame: guard xdiff calls for large files 2015-10-05 22:59:53 +02:00
blame.c blame: handle error when resoling HEAD in normalize_options 2016-03-11 14:20:15 +01:00
blame.h blame: use size_t for line counts in git_blame__entry 2015-12-01 09:02:47 +01:00
blob.c blob: remove _fromchunks() 2016-03-22 20:00:25 +01:00
blob.h Fix rename detection to use actual blob size 2013-07-25 12:27:39 -07:00
branch.c annotated_commit: provide refs and description 2016-04-26 13:19:58 -04:00
branch.h branch: rename 'tracking' to 'upstream' 2013-03-30 15:45:57 +01:00
buf_text.c git_buf_text_lf_to_crlf: allow mixed line endings 2015-06-22 12:00:23 -04:00
buf_text.h git_buf_text_lf_to_crlf: allow mixed line endings 2015-06-22 12:00:23 -04:00
buffer.c git_buf_quote/unquote: handle > \177 2016-05-26 13:01:07 -05:00
buffer.h git_buf_quote: quote ugly characters 2016-05-26 13:01:06 -05:00
cache.c Fix #3094 - improve use of portable size_t/ssize_t format specifiers. 2015-07-12 19:55:19 +02:00
cache.h Refactor git_cache to use an rwlock 2014-08-26 15:12:43 -07:00
cc-compat.h There is no "z" size specifier on MSVC 2014-10-13 16:32:26 +02:00
checkout.c Merge pull request #3223 from ethomson/apply 2016-06-25 23:33:05 -04:00
checkout.h iterator: submodules are determined by an index or tree 2014-11-07 08:33:27 +01:00
cherrypick.c cherrypick, revert: drop unnecessary SAFE_CREATE 2015-02-27 13:47:30 -05:00
clone.c Remove unused static functions 2016-06-21 07:58:33 +02:00
clone.h clone: add flags to override whether to perform a local clone 2014-05-28 15:40:22 +02:00
commit_list.c pool: Dot not assume mallocs are zeroed out 2015-10-28 10:50:25 +01:00
commit_list.h merge-base: Remove redundant merge bases 2015-11-02 13:47:04 +01:00
commit.c checkout: drop unused repo 2016-06-01 10:03:51 -05:00
commit.h commit: introduce git_commit_body 2015-12-01 10:07:00 +01:00
common.h win32: rename pthread.{c,h} to thread.{c,h} 2016-06-20 19:50:18 +02:00
config_cache.c config_cache: check return value of git_config__lookup_entry 2016-03-11 14:20:15 +01:00
config_file.c Merge pull request #3712 from ethomson/config_duplicate_section 2016-03-29 03:26:43 -07:00
config_file.h config: implement basic transactional support 2015-08-12 04:09:09 +02:00
config.c config: add a ProgramData level 2015-10-21 15:11:18 +02:00
config.h config: add a ProgramData level 2015-10-21 15:11:18 +02:00
crlf.c crlf: do not ignore GIT_PASSTHROUGH error 2016-02-23 11:50:23 +01:00
curl_stream.c curl: ask for proxy credentials 2016-04-19 13:54:19 +02:00
curl_stream.h curl: remove the encrypted param to the constructor 2015-06-24 17:26:36 +02:00
date.c Introduce git__date_rfc2822_fmt. Allows for RFC2822 date headers 2014-04-11 21:55:35 +02:00
delta.c delta: refactor git_delta functions for consistency 2016-05-26 13:01:03 -05:00
delta.h delta: refactor git_delta functions for consistency 2016-05-26 13:01:03 -05:00
describe.c git_object_dup: introduce typesafe versions 2016-03-23 17:08:37 -04:00
diff_driver.c Merge pull request #3223 from ethomson/apply 2016-06-25 23:33:05 -04:00
diff_driver.h Initial take on builtin drivers with multiline 2014-01-24 10:43:05 -08:00
diff_file.c git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
diff_file.h diff: introduce binary diff callbacks 2015-06-12 09:39:20 -04:00
diff_generate.c introduce git_diff_from_buffer to parse diffs 2016-05-26 13:01:09 -05:00
diff_generate.h git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
diff_parse.c introduce git_diff_from_buffer to parse diffs 2016-05-26 13:01:09 -05:00
diff_print.c patch: show copy information for identical copies 2016-06-25 23:08:30 -04:00
diff_stats.c patch: patch_diff -> patch_generated 2016-05-26 13:01:08 -05:00
diff_tform.c git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
diff_tform.h git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
diff_xdiff.c patch: patch_diff -> patch_generated 2016-05-26 13:01:08 -05:00
diff_xdiff.h patch: patch_diff -> patch_generated 2016-05-26 13:01:08 -05:00
diff.c introduce git_diff_from_buffer to parse diffs 2016-05-26 13:01:09 -05:00
diff.h introduce git_diff_from_buffer to parse diffs 2016-05-26 13:01:09 -05:00
errors.c errors: tighten up git_error_state OOMs a bit more 2015-08-03 19:44:51 -04:00
fetch.c Rename FALLBACK to UNSPECIFIED 2015-06-25 12:48:44 +02:00
fetch.h Fix #3093 - remove declaration of unused function git_fetch__download_pack 2015-06-30 16:48:47 -04:00
fetchhead.c fetchhead: deal with quotes in branch names 2014-04-24 14:08:29 +02:00
fetchhead.h Join typedef and struct definitions in single file. 2014-09-24 11:00:51 +02:00
filebuf.c filebuf: fix uninitialized warning 2016-06-01 10:03:52 -05:00
filebuf.h filebuf: allow using a custom buffer size 2016-03-22 19:34:08 +01:00
fileops.c nsec: support NDK's crazy nanoseconds 2016-02-25 11:40:48 -05:00
fileops.h Merge pull request #3170 from CmdrMoozy/nsec_fix 2015-11-12 19:53:09 +01:00
filter.c filter: avoid races during filter registration 2016-02-08 16:31:42 -08:00
filter.h filter: avoid races during filter registration 2016-02-08 16:31:42 -08:00
fnmatch.c ignore: move star-star matching closer to it use 2016-04-19 19:39:06 +02:00
fnmatch.h Restore attributions for fnmatch 2014-05-19 14:39:45 +01:00
global.c threads: add platform-independent thread initialization function 2016-06-20 20:07:33 +02:00
global.h Setup better defaults for OpenSSL ciphers 2016-03-14 12:07:13 +00:00
graph.c graph: fix ahead-behind logic 2014-08-28 13:36:58 +02:00
hash.c
hash.h hash: use CommonCrypto on OSX for SHA-1 2014-10-24 13:31:18 +02:00
hashsig.c diff_tform: account for whitespace options 2015-03-04 00:01:34 -05:00
ident.c Fix ident replacement to match Git behavior 2015-05-26 19:56:06 +02:00
idxmap.h index: Also size-hint the hash table 2015-12-16 19:36:50 +01:00
ignore.c ignore: don't use realpath to canonicalize path 2016-04-02 21:32:28 +02:00
ignore.h Improvements to ignore performance on Windows. 2015-04-28 14:24:58 -04:00
index.c index: fix NULL pointer access in index_remove_entry 2016-06-07 09:14:14 +02:00
index.h Fix the build when defining USE_NSEC 2016-01-25 14:06:15 +02:00
indexer.c Merge pull request #3575 from pmq20/master-13jan16 2016-03-31 04:12:46 -07:00
integer.h Fix MAX 32 bit build problem described in libgit2/libgit2#2917 2015-02-20 18:59:43 +01:00
iterator.c iterator: ignore submodule in has_ended 2016-04-21 10:58:22 -04:00
iterator.h iterator: cleanups 2016-03-24 15:59:49 -04:00
khash.h khash: add eol so picky compilers stop warning 2015-07-10 09:53:31 -05:00
map.h Fix compiler warning (git_off_t cast to size_t). 2014-05-19 17:37:29 -07:00
merge_driver.c merge_driver: fix missing goto done; 2016-04-01 09:37:55 +02:00
merge_driver.h merge driver: remove check callback 2016-03-17 11:06:00 -04:00
merge_file.c merge_file: do not unnecessarily check ours/theirs for NULL 2016-05-02 17:45:23 +02:00
merge.c git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
merge.h merge driver: remove check callback 2016-03-17 11:06:00 -04:00
message.c message: don't assume the comment char 2014-05-18 10:06:49 +02:00
message.h
mwindow.c mwindow: free unused windows if we fail to mmap 2016-03-09 11:16:16 +01:00
mwindow.h pack: clean up error returns 2014-06-25 21:35:58 +02:00
netops.c netops: make the path optional in URLs 2016-04-19 13:54:19 +02:00
netops.h Drop extra_http_headers from git_remote 2015-09-08 14:01:57 -04:00
notes.c iterator: use an options struct instead of args 2015-08-28 18:39:47 -04:00
notes.h Introduce git_note_author, git_note_committer 2014-10-26 22:59:29 -04:00
object_api.c git_object_dup: introduce typesafe versions 2016-03-23 17:08:37 -04:00
object.c object: avoid call of memset with ouf of bounds pointer 2016-03-11 12:14:01 +01:00
object.h git_object__is_valid: use odb_read_header 2016-02-28 18:54:39 -05:00
odb_loose.c delta: move delta application to delta.c 2016-05-26 13:01:03 -05:00
odb_mempack.c mempack: expose clear function 2015-09-11 20:06:14 -04:00
odb_pack.c delta: move delta application to delta.c 2016-05-26 13:01:03 -05:00
odb.c Merge pull request #3223 from ethomson/apply 2016-06-25 23:33:05 -04:00
odb.h odb: improved not found error messages 2016-03-07 10:20:01 -05:00
offmap.h Remove extra semicolon outside of a function 2015-02-15 21:07:05 +01:00
oid.c git__*allocarray: safer realloc and malloc 2015-02-12 22:54:47 -05:00
oid.h git_odb_exists_many_prefixes: query odb for multiple short ids 2016-03-07 16:10:25 -05:00
oidarray.c merge: expose multiple merge bases 2014-07-27 17:17:22 +02:00
oidarray.h merge: expose multiple merge bases 2014-07-27 17:17:22 +02:00
oidmap.h mempack: expose clear function 2015-09-11 20:06:14 -04:00
openssl_stream.c Fix style: no braces 2016-04-27 13:56:16 +02:00
openssl_stream.h global: make openssl registration like the rest 2016-02-08 16:30:39 -08:00
pack-objects.c Merge pull request #3223 from ethomson/apply 2016-06-25 23:33:05 -04:00
pack-objects.h packbuilder: report progress during deltification 2015-05-13 15:52:13 +02:00
pack.c delta: move delta application to delta.c 2016-05-26 13:01:03 -05:00
pack.h Make packfile_unpack_compressed a private API 2016-01-13 11:02:38 +08:00
patch_generate.c git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
patch_generate.h patch: patch_diff -> patch_generated 2016-05-26 13:01:08 -05:00
patch_parse.c patch: show copy information for identical copies 2016-06-25 23:08:30 -04:00
patch_parse.h introduce git_diff_from_buffer to parse diffs 2016-05-26 13:01:09 -05:00
patch.c patch parse: dup the patch from the callers 2016-05-26 13:01:07 -05:00
patch.h git_patch_parse_ctx: refcount the context 2016-05-26 13:01:08 -05:00
path.c Patch parsing from patch files 2016-05-26 11:36:11 -05:00
path.h Patch parsing from patch files 2016-05-26 11:36:11 -05:00
pathspec.c iterator: disambiguate reset and reset_range 2016-03-23 17:08:37 -04:00
pathspec.h Add git_pathspec_match_diff API 2013-07-10 20:50:33 +02:00
pool.c Add a new build flag to disable the pool allocator and pass all git_pool_malloc calls straight to git__malloc 2016-01-12 16:08:38 -05:00
pool.h Fixed typo in one of the ifndef's in pool.h used to enable/disable debug mode 2016-02-26 12:51:13 -05:00
posix.c Split the page size from the mmap alignment 2016-03-16 21:36:25 +01:00
posix.h Split the page size from the mmap alignment 2016-03-16 21:36:25 +01:00
pqueue.c Fix pqueue sort boundary condition bug 2014-03-12 11:21:55 -07:00
pqueue.h Convert pqueue to just be a git_vector 2014-02-04 10:01:37 -08:00
proxy.c proxy: ask the user for credentials if necessary 2016-04-19 13:54:19 +02:00
proxy.h proxy: ask the user for credentials if necessary 2016-04-19 13:54:19 +02:00
push.c proxy: ask the user for credentials if necessary 2016-04-19 13:54:19 +02:00
push.h Tell the git_transport about the custom_headers 2015-09-08 14:02:33 -04:00
rebase.c rebase: change assertion to avoid 2016-06-01 10:03:52 -05:00
refdb_fs.c refdb_fs: fail if refcache returns NULL pointer 2016-03-11 14:20:15 +01:00
refdb_fs.h immutable references and a pluggable ref database 2013-03-07 11:01:52 -06:00
refdb.c refdb and odb backends must provide free function 2015-10-01 00:50:37 +02:00
refdb.h Introduce reference transactions 2014-09-30 15:44:32 +02:00
reflog.c Fix wrong format string in git_reflog_drop() error message 2015-04-24 23:56:59 +08:00
reflog.h reflog: move the reflog implementation into refdb_fs 2013-10-02 06:53:24 +02:00
refs.c Allow creating copies of git_reference objects. 2016-04-22 10:34:17 -07:00
refs.h repository: distinguish sequencer cherry-pick and revert 2015-11-20 13:19:23 -05:00
refspec.c refspec: check buffer with GITERR_CHECK_ALLOC_BUF 2016-02-23 11:50:23 +01:00
refspec.h refspec: git_refspec_parse() does not exist 2014-04-01 20:18:36 +02:00
remote.c Remove unused static functions 2016-06-21 07:58:33 +02:00
remote.h Drop extra_http_headers from git_remote 2015-09-08 14:01:57 -04:00
repo_template.h Make mode handling during init more like git 2013-02-27 13:44:15 -08:00
repository.c annotated_commit: provide refs and description 2016-04-26 13:19:58 -04:00
repository.h submodule: remove the per-repo cache 2015-06-22 17:02:54 +02:00
reset.c annotated_commit: provide refs and description 2016-04-26 13:19:58 -04:00
revert.c cherrypick, revert: drop unnecessary SAFE_CREATE 2015-02-27 13:47:30 -05:00
revparse.c reflog: Error handling on empty reflog 2014-09-05 03:25:53 +02:00
revwalk.c revwalk: use GITERR_CHECK_ALLOC_BUF 2016-02-23 11:50:23 +01:00
revwalk.h Reorder some khash declarations 2015-03-11 02:36:11 +01:00
settings.c Avoid old-style function definitions 2016-06-21 07:58:33 +02:00
sha1_lookup.c Backport @peff's fix for duplicates in sha1_lookup 2013-09-04 13:16:57 +02:00
sha1_lookup.h sha1_lookup: do not use the "experimental" lookup mode 2013-08-14 10:28:01 +02:00
signature.c Introduce git_signature_from_buffer 2016-04-28 12:47:14 -04:00
signature.h Introduce git_rebase_commit 2014-10-26 22:59:19 -04:00
socket_stream.c stream: constify the write buffer 2014-12-10 16:20:52 +01:00
socket_stream.h Add an OpenSSL IO stream 2014-12-10 01:17:41 +01:00
sortedcache.c pool: Simplify implementation 2015-10-28 10:13:13 +01:00
sortedcache.h Add stddef include for sortedcache 2013-08-28 11:20:47 -07:00
stash.c git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
status.c git_diff_generated: abstract generated diffs 2016-05-26 13:01:08 -05:00
status.h Rename diff objects and split patch.h 2013-10-11 14:51:54 -07:00
stransport_stream.c Fix unused variable 'message' warning 2016-05-05 23:35:48 -04:00
stransport_stream.h Add a SecureTransport TLS channel 2015-04-23 17:39:51 +02:00
stream.h net: use proxy options struct in the stream config 2016-04-19 13:54:19 +02:00
strmap.c config: get rid of a useless asignment 2013-08-12 11:40:57 +02:00
strmap.h Remove extra semicolon outside of a function 2015-02-15 21:07:05 +01:00
strnlen.h strnlen() is only available from Visual Studio 2005+ 2014-07-06 09:22:24 +02:00
submodule.c tree: re-use the id and filename in the odb object 2016-03-20 11:00:12 +01:00
submodule.h submodule: handle writing out all enum values for settings 2015-06-22 17:02:56 +02:00
sysdir.c config: add a ProgramData level 2015-10-21 15:11:18 +02:00
sysdir.h config: add a ProgramData level 2015-10-21 15:11:18 +02:00
tag.c tag: ignore extra header fields 2016-04-25 12:18:32 +02:00
tag.h Simplify object table parse functions 2013-04-22 16:52:06 +02:00
thread-utils.c Fix macro redefinition warning 2015-07-15 11:40:06 +01:00
thread-utils.h win32: rename pthread.{c,h} to thread.{c,h} 2016-06-20 19:50:18 +02:00
tls_stream.c stream: allow registering a user-provided TLS constructor 2015-11-03 08:10:29 -08:00
tls_stream.h Abstract away the TLS stream implementation 2015-04-23 17:39:51 +02:00
trace.c Remove trace / add git_diff_perfdata struct + api 2014-05-02 09:21:33 -07:00
trace.h Variadic macros is only available from Visual Studio 2005+ 2014-07-06 09:22:24 +02:00
transaction.c pool: Simplify implementation 2015-10-28 10:13:13 +01:00
transaction.h config: perform unlocking via git_transaction 2015-08-12 04:09:38 +02:00
transport.c Tabs 2015-12-28 11:45:12 -07:00
tree-cache.c tree-cache: correct the entry_count calculation 2014-10-22 21:25:08 +02:00
tree-cache.h index: write out the tree cache extension 2014-10-10 19:43:42 +02:00
tree.c Merge pull request #3792 from edquist/misc 2016-05-26 00:58:43 -05:00
tree.h tree: drop the now-unnecessary entries vector 2016-03-22 06:21:13 -07:00
tsort.c git__*allocarray: safer realloc and malloc 2015-02-12 22:54:47 -05:00
userdiff.h Update the javascript diff driver's function pattern. 2014-10-09 22:21:34 +02:00
util.c Patch parsing from patch files 2016-05-26 11:36:11 -05:00
util.h Patch parsing from patch files 2016-05-26 11:36:11 -05:00
vector.c vector: more sensible names for grow_at/shrink_at 2016-05-26 13:01:08 -05:00
vector.h vector: more sensible names for grow_at/shrink_at 2016-05-26 13:01:08 -05:00
zstream.c zstream: fail when asked to inflate garbage 2016-05-26 13:01:04 -05:00
zstream.h zstream: offer inflating, git_zstream_inflatebuf 2016-05-26 13:01:03 -05:00