Browse Source

vcs-svn: read instructions from deltas

Buffer the instruction section upon encountering it for later
interpretation.

An alternative design would involve parsing the instructions
at this point and buffering them in some processed form.  Using
the unprocessed form is simpler.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Ramkumar Ramachandra <artagnon@gmail.com>
maint
Jonathan Nieder 14 years ago
parent
commit
ef2ac77e9f
  1. 5
      t/t9011-svn-da.sh
  2. 7
      vcs-svn/svndiff.c

5
t/t9011-svn-da.sh

@ -133,4 +133,9 @@ test_expect_success 'reject truncated inline data' ' @@ -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

7
vcs-svn/svndiff.c

@ -25,13 +25,15 @@ @@ -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) @@ -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?");

Loading…
Cancel
Save