diff options
| -rwxr-xr-x | t/t9011-svn-da.sh | 5 | ||||
| -rw-r--r-- | vcs-svn/svndiff.c | 7 | 
2 files changed, 10 insertions, 2 deletions
diff --git a/t/t9011-svn-da.sh b/t/t9011-svn-da.sh index 26a4a3694a..d9acd0c8a6 100755 --- a/t/t9011-svn-da.sh +++ b/t/t9011-svn-da.sh @@ -133,4 +133,9 @@ test_expect_success 'reject truncated inline data' '  	test_must_fail test-svn-fe -d preimage inline.trunc 10  ' +test_expect_success 'reject truncated inline data (after instruction section)' ' +	printf "SVNQ%b%b%s" "QQ\001\001\003" "\0201" "b" | q_to_nul >insn.trunc && +	test_must_fail test-svn-fe -d preimage insn.trunc 11 +' +  test_done diff --git a/vcs-svn/svndiff.c b/vcs-svn/svndiff.c index 175168f599..8968fdb4eb 100644 --- a/vcs-svn/svndiff.c +++ b/vcs-svn/svndiff.c @@ -25,13 +25,15 @@  #define VLI_BITS_PER_DIGIT 7  struct window { +	struct strbuf instructions;  	struct strbuf data;  }; -#define WINDOW_INIT	{ STRBUF_INIT } +#define WINDOW_INIT	{ STRBUF_INIT, STRBUF_INIT }  static void window_release(struct window *ctx)  { +	strbuf_release(&ctx->instructions);  	strbuf_release(&ctx->data);  } @@ -124,7 +126,8 @@ static int apply_one_window(struct line_buffer *delta, off_t *delta_len)  	/* "source view" offset and length already handled; */  	if (read_length(delta, &out_len, delta_len) ||  	    read_length(delta, &instructions_len, delta_len) || -	    read_length(delta, &data_len, delta_len)) +	    read_length(delta, &data_len, delta_len) || +	    read_chunk(delta, delta_len, &ctx.instructions, instructions_len))  		goto error_out;  	if (instructions_len) {  		error("What do you think I am?  A delta applier?");  | 
