]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
Tests: test_index: Test lzma_index_buffer_decode() more
authorLasse Collin <lasse.collin@tukaani.org>
Sat, 27 Apr 2024 12:13:39 +0000 (15:13 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Tue, 21 May 2024 21:12:07 +0000 (00:12 +0300)
(cherry picked from commit 4ad88b2544c2aaf8de8f38af54587098cbe66c1d)

tests/test_index.c

index 9e3e5fc29c29ceef67aa47d281165059597e4856..20d8f47b28c273e522809dc16e013aa90da62b39 100644 (file)
@@ -1698,18 +1698,41 @@ test_lzma_index_buffer_decode(void)
                        decode_buffer, &in_pos, 0), LZMA_DATA_ERROR);
        assert_true(idx == NULL);
 
-       lzma_index_end(idx_allocated, NULL);
-       idx_allocated = NULL;
-
        in_pos = 1;
+       idx = idx_allocated;
        assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL,
                        decode_buffer, &in_pos, 0), LZMA_PROG_ERROR);
+       assert_true(idx == NULL);
+
+       // Test too short input
        in_pos = 0;
+       idx = idx_allocated;
+       assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL,
+                       decode_buffer, &in_pos, decode_buffer_size - 1),
+                       LZMA_DATA_ERROR);
+       assert_true(idx == NULL);
+
+       lzma_index_end(idx_allocated, NULL);
+       idx_allocated = NULL;
 
        // Test expected successful decode
+       in_pos = 0;
        assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL,
                        decode_buffer, &in_pos, decode_buffer_size), LZMA_OK);
 
+       assert_uint_eq(in_pos, decode_buffer_size);
+       assert_true(index_is_equal(decode_test_index, idx));
+
+       lzma_index_end(idx, NULL);
+
+       // Test too much input. This won't read past
+       // the end of the allocated array (decode_buffer_size bytes).
+       in_pos = 0;
+       assert_lzma_ret(lzma_index_buffer_decode(&idx, &memlimit, NULL,
+                       decode_buffer, &in_pos, decode_buffer_size + 16),
+                       LZMA_OK);
+
+       assert_uint_eq(in_pos, decode_buffer_size);
        assert_true(index_is_equal(decode_test_index, idx));
 
        lzma_index_end(idx, NULL);