Skip to content

Commit f887fd6

Browse files
committed
copy back git_buf after callback
1 parent e0a8b4e commit f887fd6

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

src/libgit2/filter.c

Lines changed: 16 additions & 6 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;
@@ -907,19 +918,18 @@ static int buffered_stream_close(git_writestream *s)
907918
git_buf legacy_output = GIT_BUF_INIT,
908919
legacy_input = GIT_BUF_INIT;
909920

910-
legacy_output.ptr = buffered_stream->output->ptr;
911-
legacy_output.size = buffered_stream->output->size;
912-
legacy_output.reserved = buffered_stream->output->asize;
913-
legacy_input.ptr = buffered_stream->input.ptr;
914-
legacy_input.size = buffered_stream->input.size;
915-
legacy_input.reserved = buffered_stream->input.asize;
921+
BUF_TO_STRUCT(&legacy_output, buffered_stream->output);
922+
BUF_TO_STRUCT(&legacy_input, &buffered_stream->input);
916923

917924
error = buffered_stream->legacy_write_fn(
918925
buffered_stream->filter,
919926
buffered_stream->payload,
920927
&legacy_output,
921928
&legacy_input,
922929
buffered_stream->source);
930+
931+
STRUCT_TO_BUF(buffered_stream->output, &legacy_output);
932+
STRUCT_TO_BUF(&buffered_stream->input, &legacy_input);
923933
} else
924934
#endif
925935
error = buffered_stream->write_fn(

0 commit comments

Comments
 (0)