diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-07-24 14:59:38 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2015-07-24 14:59:38 -0500 |
commit | 14e805a2ceebb360e0bf8d5c006244d5f8af4741 (patch) | |
tree | 2a554b1698f1a46d1701b6833c00df73da7f430c | |
parent | 4e0421fdbdd54004041797b5dd5e79597c86f447 (diff) | |
parent | 4de7f3bfc3ad9b2b22620cbe012a70c1c11b3b17 (diff) | |
download | libgit2-14e805a2ceebb360e0bf8d5c006244d5f8af4741.tar.gz |
Merge pull request #3304 from libgit2/cmn/checkout-free-stream
filter: make sure to close the stream even on error
-rw-r--r-- | src/filter.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/filter.c b/src/filter.c index 70c4fa382..60473e4e1 100644 --- a/src/filter.c +++ b/src/filter.c @@ -950,18 +950,20 @@ int git_filter_list_stream_data( { git_vector filter_streams = GIT_VECTOR_INIT; git_writestream *stream_start; - int error = 0; + int error = 0, close_error; git_buf_sanitize(data); - if ((error = stream_list_init( - &stream_start, &filter_streams, filters, target)) == 0 && - (error = - stream_start->write(stream_start, data->ptr, data->size)) == 0) - error = stream_start->close(stream_start); + if ((error = stream_list_init(&stream_start, &filter_streams, filters, target)) < 0) + goto out; + error = stream_start->write(stream_start, data->ptr, data->size); + +out: + close_error = stream_start->close(stream_start); stream_list_free(&filter_streams); - return error; + /* propagate the stream init or write error */ + return error < 0 ? error : close_error; } int git_filter_list_stream_blob( |