@@ -311,4 +311,93 @@ test_expect_success \
311
311
test_must_fail git cat-file blob $blob_2 > /dev/null &&
312
312
test_must_fail git cat-file blob $blob_3 > /dev/null'
313
313
314
+ # \0 - empty base
315
+ # \1 - one byte in result
316
+ # \1 - one literal byte (X)
317
+ test_expect_success \
318
+ ' apply good minimal delta' \
319
+ ' printf "\0\1\1X" > minimal_delta &&
320
+ test-tool delta -p /dev/null minimal_delta /dev/null'
321
+
322
+ # \0 - empty base
323
+ # \1 - 1 byte in result
324
+ # \2 - two literal bytes (one too many)
325
+ test_expect_success \
326
+ ' apply delta with too many literal bytes' \
327
+ ' printf "\0\1\2XX" > too_big_literal &&
328
+ test_must_fail test-tool delta -p /dev/null too_big_literal /dev/null'
329
+
330
+ # \4 - four bytes in base
331
+ # \1 - one byte in result
332
+ # \221 - copy, one byte offset, one byte size
333
+ # \0 - copy from offset 0
334
+ # \2 - copy two bytes (one too many)
335
+ test_expect_success \
336
+ ' apply delta with too many copied bytes' \
337
+ ' printf "\4\1\221\0\2" > too_big_copy &&
338
+ printf base >base &&
339
+ test_must_fail test-tool delta -p base too_big_copy /dev/null'
340
+
341
+ # \0 - empty base
342
+ # \2 - two bytes in result
343
+ # \2 - two literal bytes (we are short one)
344
+ test_expect_success \
345
+ ' apply delta with too few literal bytes' \
346
+ ' printf "\0\2\2X" > truncated_delta &&
347
+ test_must_fail test-tool delta -p /dev/null truncated_delta /dev/null'
348
+
349
+ # \0 - empty base
350
+ # \1 - one byte in result
351
+ # \221 - copy, one byte offset, one byte size
352
+ # \0 - copy from offset 0
353
+ # \1 - copy one byte (we are short one)
354
+ test_expect_success \
355
+ ' apply delta with too few bytes in base' \
356
+ ' printf "\0\1\221\0\1" > truncated_base &&
357
+ test_must_fail test-tool delta -p /dev/null truncated_base /dev/null'
358
+
359
+ # \4 - four bytes in base
360
+ # \2 - two bytes in result
361
+ # \1 - one literal byte (X)
362
+ # \221 - copy, one byte offset, one byte size
363
+ # (offset/size missing)
364
+ #
365
+ # Note that the literal byte is necessary to get past the uninteresting minimum
366
+ # delta size check.
367
+ test_expect_success \
368
+ ' apply delta with truncated copy parameters' \
369
+ ' printf "\4\2\1X\221" > truncated_copy_delta &&
370
+ printf base >base &&
371
+ test_must_fail test-tool delta -p base truncated_copy_delta /dev/null'
372
+
373
+ # \0 - empty base
374
+ # \1 - one byte in result
375
+ # \1 - one literal byte (X)
376
+ # \1 - trailing garbage command
377
+ test_expect_success \
378
+ ' apply delta with trailing garbage literal' \
379
+ ' printf "\0\1\1X\1" > tail_garbage_literal &&
380
+ test_must_fail test-tool delta -p /dev/null tail_garbage_literal /dev/null'
381
+
382
+ # \4 - four bytes in base
383
+ # \1 - one byte in result
384
+ # \1 - one literal byte (X)
385
+ # \221 - copy, one byte offset, one byte size
386
+ # \0 - copy from offset 0
387
+ # \1 - copy 1 byte
388
+ test_expect_success \
389
+ ' apply delta with trailing garbage copy' \
390
+ ' printf "\4\1\1X\221\0\1" > tail_garbage_copy &&
391
+ printf base >base &&
392
+ test_must_fail test-tool delta -p /dev/null tail_garbage_copy /dev/null'
393
+
394
+ # \0 - empty base
395
+ # \1 - one byte in result
396
+ # \1 - one literal byte (X)
397
+ # \0 - bogus opcode
398
+ test_expect_success \
399
+ ' apply delta with trailing garbage opcode' \
400
+ ' printf "\0\1\1X\0" > tail_garbage_opcode &&
401
+ test_must_fail test-tool delta -p /dev/null tail_garbage_opcode /dev/null'
402
+
314
403
test_done
0 commit comments