Skip to content

Commit 3847522

Browse files
authored
Merge pull request libgit2#6303 from zawata/legacy_buffer_stream_segfault
filter: Fix Segfault
2 parents f98dd54 + f887fd6 commit 3847522

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/libgit2/filter.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,17 @@ static int buffered_stream_write(
893893
return git_str_put(&buffered_stream->input, buffer, len);
894894
}
895895

896+
#ifndef GIT_DEPRECATE_HARD
897+
# define BUF_TO_STRUCT(b, s) \
898+
(b)->ptr = (s)->ptr; \
899+
(b)->size = (s)->size; \
900+
(b)->reserved = (s)->asize;
901+
# define STRUCT_TO_BUF(s, b) \
902+
(s)->ptr = (b)->ptr; \
903+
(s)->size = (b)->size; \
904+
(s)->asize = (b)->reserved;
905+
#endif
906+
896907
static int buffered_stream_close(git_writestream *s)
897908
{
898909
struct buffered_stream *buffered_stream = (struct buffered_stream *)s;
@@ -902,6 +913,25 @@ static int buffered_stream_close(git_writestream *s)
902913

903914
GIT_ASSERT_ARG(buffered_stream);
904915

916+
#ifndef GIT_DEPRECATE_HARD
917+
if (buffered_stream->write_fn == NULL) {
918+
git_buf legacy_output = GIT_BUF_INIT,
919+
legacy_input = GIT_BUF_INIT;
920+
921+
BUF_TO_STRUCT(&legacy_output, buffered_stream->output);
922+
BUF_TO_STRUCT(&legacy_input, &buffered_stream->input);
923+
924+
error = buffered_stream->legacy_write_fn(
925+
buffered_stream->filter,
926+
buffered_stream->payload,
927+
&legacy_output,
928+
&legacy_input,
929+
buffered_stream->source);
930+
931+
STRUCT_TO_BUF(buffered_stream->output, &legacy_output);
932+
STRUCT_TO_BUF(&buffered_stream->input, &legacy_input);
933+
} else
934+
#endif
905935
error = buffered_stream->write_fn(
906936
buffered_stream->filter,
907937
buffered_stream->payload,

0 commit comments

Comments
 (0)