Skip to content

Commit b1cf11b

Browse files
committed
test: add corrupt .gz test case for tar unit test
1 parent 0822e7a commit b1cf11b

3 files changed

Lines changed: 21 additions & 0 deletions

File tree

test/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ add_custom_command(
226226
COMMAND ${CMAKE_COMMAND} -E tar cf ${CMAKE_CURRENT_BINARY_DIR}/test-multiple.tar ${CMAKE_CURRENT_SOURCE_DIR}/*.py
227227
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_BINARY_DIR}/test-invalid.tar
228228
COMMAND ${CMAKE_COMMAND} -E tar czf ${CMAKE_CURRENT_BINARY_DIR}/test.tar.gz ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
229+
COMMAND ${CMAKE_COMMAND} -E tar czf ${CMAKE_CURRENT_BINARY_DIR}/test-corrupt.gz ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
230+
COMMAND bash ${TEST}/util/unit/corrupt-tar-gz.sh ${CMAKE_CURRENT_BINARY_DIR}/test.tar.gz ${CMAKE_CURRENT_BINARY_DIR}/test-corrupt.gz
229231
COMMAND ${CMAKE_COMMAND} -E tar cf ${CMAKE_CURRENT_BINARY_DIR}/test-tar-gz-inside.tar ${CMAKE_CURRENT_BINARY_DIR}/test.tar.gz
230232
)
231233

test/util/unit/corrupt-tar-gz.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
INFILE="$1"
3+
OUTFILE="$2"
4+
5+
printf '\x0a\x0f\x0a\x0f\x0a\x0f\x0a\x0f' | dd conv=notrunc bs=1 of=$OUTFILE seek=$((`ls -nl $INFILE | awk '{print $5}'` - 8))

test/util/unit/tar_test.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,20 @@ CASE("Reading invalid tar file")
9191
close(fd);
9292
}
9393

94+
CASE("Reading corrupt tar.gz file")
95+
{
96+
tar::Reader r;
97+
struct stat st;
98+
int res = stat("test-corrupt.gz", &st);
99+
EXPECT(res != -1);
100+
size_t size = st.st_size;
101+
int fd = open("test-corrupt.gz", O_RDONLY);
102+
EXPECT_NOT(fd == -1);
103+
const uint8_t *mem = (const uint8_t *)mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0);
104+
EXPECT_THROWS_AS(tar::Tar tar = r.decompress(mem, size), tar::Tar_exception);
105+
close(fd);
106+
}
107+
94108
CASE("Reading tar.gz inside tar file")
95109
{
96110
tar::Reader r;

0 commit comments

Comments
 (0)