Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 34ff34f

Browse files
committed
filter: make sure to close the stream even on error
When the stream list init or write fail, we must also make sure to close the stream, as that's the function contract.
1 parent 678c4aa commit 34ff34f

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/filter.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -947,18 +947,20 @@ int git_filter_list_stream_data(
947947
{
948948
git_vector filter_streams = GIT_VECTOR_INIT;
949949
git_writestream *stream_start;
950-
int error = 0;
950+
int error = 0, close_error;
951951

952952
git_buf_sanitize(data);
953953

954-
if ((error = stream_list_init(
955-
&stream_start, &filter_streams, filters, target)) == 0 &&
956-
(error =
957-
stream_start->write(stream_start, data->ptr, data->size)) == 0)
958-
error = stream_start->close(stream_start);
954+
if ((error = stream_list_init(&stream_start, &filter_streams, filters, target)) < 0)
955+
goto out;
959956

957+
error = stream_start->write(stream_start, data->ptr, data->size);
958+
959+
out:
960+
close_error = stream_start->close(stream_start);
960961
stream_list_free(&filter_streams);
961-
return error;
962+
/* propagate the stream init or write error */
963+
return error < 0 ? error : close_error;
962964
}
963965

964966
int git_filter_list_stream_blob(

0 commit comments

Comments
 (0)