diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-11-16 15:41:57 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-11-18 00:58:07 +0100 |
commit | da6eadc840716eb29b0175f39b2790bba166db4a (patch) | |
tree | 2da0a94126432e7af409ed809ea3476a1e44597c /tests | |
parent | 0f68ca18f491b4e53cec788b327a752cbeb43377 (diff) |
Add a single, central hex blob decoder
Since we need it twice (once for tar, once for the filemap xattr
parser), add a single, central implementation to libutil, add a
unit test for that implementation and then use it in both libtar
and gensquashfs.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libtar/Makemodule.am | 60 | ||||
-rw-r--r-- | tests/libutil/Makemodule.am | 5 | ||||
-rw-r--r-- | tests/libutil/hex_decode.c | 66 |
3 files changed, 100 insertions, 31 deletions
diff --git a/tests/libtar/Makemodule.am b/tests/libtar/Makemodule.am index 145481a..8802409 100644 --- a/tests/libtar/Makemodule.am +++ b/tests/libtar/Makemodule.am @@ -1,160 +1,160 @@ TARDATADIR=$(top_srcdir)/tests/libtar/data test_tar_gnu0_SOURCES = tests/libtar/tar_simple.c -test_tar_gnu0_LDADD = libtar.a libio.a libcompat.a +test_tar_gnu0_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_gnu0_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_gnu0_CPPFLAGS += -DTESTFILE=format-acceptance/gnu.tar test_tar_gnu1_SOURCES = tests/libtar/tar_simple.c -test_tar_gnu1_LDADD = libtar.a libio.a libcompat.a +test_tar_gnu1_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_gnu1_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_gnu1_CPPFLAGS += -DTESTFILE=format-acceptance/gnu-g.tar test_tar_gnu2_SOURCES = tests/libtar/tar_simple.c -test_tar_gnu2_LDADD = libtar.a libio.a libcompat.a +test_tar_gnu2_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_gnu2_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_gnu2_CPPFLAGS += -DTESTFILE=user-group-largenum/gnu.tar test_tar_gnu2_CPPFLAGS += -DTESTUID=0x80000000 -DTESTGID=0x80000000 test_tar_gnu2_CPPFLAGS += -DTESTTS=1542995392 test_tar_gnu3_SOURCES = tests/libtar/tar_simple.c -test_tar_gnu3_LDADD = libtar.a libio.a libcompat.a +test_tar_gnu3_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_gnu3_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_gnu3_CPPFLAGS += -DTESTFILE=negative-mtime/gnu.tar -DTESTTS=-315622800 test_tar_gnu4_SOURCES = tests/libtar/tar_simple.c -test_tar_gnu4_LDADD = libtar.a libio.a libcompat.a +test_tar_gnu4_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_gnu4_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_gnu4_CPPFLAGS += -DTESTFILE=long-paths/gnu.tar -DLONG_NAME_TEST test_tar_gnu4_CPPFLAGS += -DTESTTS=1542909670 test_tar_gnu5_SOURCES = tests/libtar/tar_simple.c -test_tar_gnu5_LDADD = libtar.a libio.a libcompat.a +test_tar_gnu5_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_gnu5_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_gnu5_CPPFLAGS += -DTESTFILE=large-mtime/gnu.tar -DTESTTS=8589934592L test_tar_gnu6_SOURCES = tests/libtar/tar_big_file.c -test_tar_gnu6_LDADD = libtar.a libio.a libcompat.a +test_tar_gnu6_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_gnu6_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_gnu6_CPPFLAGS += -DTESTFILE=file-size/gnu.tar test_tar_pax0_SOURCES = tests/libtar/tar_simple.c -test_tar_pax0_LDADD = libtar.a libio.a libcompat.a +test_tar_pax0_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_pax0_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_pax0_CPPFLAGS += -DTESTFILE=format-acceptance/pax.tar test_tar_pax1_SOURCES = tests/libtar/tar_simple.c -test_tar_pax1_LDADD = libtar.a libio.a libcompat.a +test_tar_pax1_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_pax1_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_pax1_CPPFLAGS += -DTESTFILE=user-group-largenum/pax.tar test_tar_pax1_CPPFLAGS += -DTESTUID=2147483648UL -DTESTGID=2147483648UL test_tar_pax1_CPPFLAGS += -DTESTTS=1542995392 test_tar_pax2_SOURCES = tests/libtar/tar_simple.c -test_tar_pax2_LDADD = libtar.a libio.a libcompat.a +test_tar_pax2_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_pax2_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_pax2_CPPFLAGS += -DTESTFILE=large-mtime/pax.tar -DTESTTS=8589934592L test_tar_pax3_SOURCES = tests/libtar/tar_simple.c -test_tar_pax3_LDADD = libtar.a libio.a libcompat.a +test_tar_pax3_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_pax3_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_pax3_CPPFLAGS += -DTESTFILE=negative-mtime/pax.tar -DTESTTS=-315622800 test_tar_pax4_SOURCES = tests/libtar/tar_simple.c -test_tar_pax4_LDADD = libtar.a libio.a libcompat.a +test_tar_pax4_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_pax4_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_pax4_CPPFLAGS += -DTESTFILE=long-paths/pax.tar test_tar_pax4_CPPFLAGS += -DLONG_NAME_TEST -DTESTTS=1542909670 test_tar_pax5_SOURCES = tests/libtar/tar_big_file.c -test_tar_pax5_LDADD = libtar.a libio.a libcompat.a +test_tar_pax5_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_pax5_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_pax5_CPPFLAGS += -DTESTFILE=file-size/pax.tar test_tar_ustar0_SOURCES = tests/libtar/tar_simple.c -test_tar_ustar0_LDADD = libtar.a libio.a libcompat.a +test_tar_ustar0_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_ustar0_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_ustar0_CPPFLAGS += -DTESTFILE=format-acceptance/ustar.tar test_tar_ustar1_SOURCES = tests/libtar/tar_simple.c -test_tar_ustar1_LDADD = libtar.a libio.a libcompat.a +test_tar_ustar1_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_ustar1_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_ustar1_CPPFLAGS += -DTESTFILE=format-acceptance/ustar-pre-posix.tar test_tar_ustar2_SOURCES = tests/libtar/tar_simple.c -test_tar_ustar2_LDADD = libtar.a libio.a libcompat.a +test_tar_ustar2_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_ustar2_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_ustar2_CPPFLAGS += -DTESTFILE=format-acceptance/v7.tar test_tar_ustar3_SOURCES = tests/libtar/tar_simple.c -test_tar_ustar3_LDADD = libtar.a libio.a libcompat.a +test_tar_ustar3_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_ustar3_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_ustar3_CPPFLAGS += -DTESTFILE=user-group-largenum/8-digit.tar test_tar_ustar3_CPPFLAGS += -DTESTUID=8388608 -DTESTGID=8388608 test_tar_ustar3_CPPFLAGS += -DTESTTS=1542995392 test_tar_ustar4_SOURCES = tests/libtar/tar_simple.c -test_tar_ustar4_LDADD = libtar.a libio.a libcompat.a +test_tar_ustar4_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_ustar4_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_ustar4_CPPFLAGS += -DTESTFILE=large-mtime/12-digit.tar test_tar_ustar4_CPPFLAGS += -DTESTTS=8589934592L test_tar_ustar5_SOURCES = tests/libtar/tar_simple.c -test_tar_ustar5_LDADD = libtar.a libio.a libcompat.a +test_tar_ustar5_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_ustar5_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_ustar5_CPPFLAGS += -DTESTFILE=long-paths/ustar.tar test_tar_ustar5_CPPFLAGS += -DLONG_NAME_TEST -DTESTTS=1542909670 test_tar_ustar6_SOURCES = tests/libtar/tar_big_file.c -test_tar_ustar6_LDADD = libtar.a libio.a libcompat.a +test_tar_ustar6_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_ustar6_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_ustar6_CPPFLAGS += -DTESTFILE=file-size/12-digit.tar test_tar_target_filled_SOURCES = tests/libtar/tar_target_filled.c -test_tar_target_filled_LDADD = libtar.a libio.a libcompat.a +test_tar_target_filled_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_target_filled_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_sparse_gnu_SOURCES = tests/libtar/tar_sparse_gnu.c -test_tar_sparse_gnu_LDADD = libtar.a libio.a libcompat.a +test_tar_sparse_gnu_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_sparse_gnu_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_sparse_gnu0_SOURCES = tests/libtar/tar_sparse.c -test_tar_sparse_gnu0_LDADD = libtar.a libio.a libcompat.a +test_tar_sparse_gnu0_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_sparse_gnu0_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_sparse_gnu0_CPPFLAGS += -DTESTFILE=sparse-files/pax-gnu0-0.tar test_tar_sparse_gnu1_SOURCES = tests/libtar/tar_sparse.c -test_tar_sparse_gnu1_LDADD = libtar.a libio.a libcompat.a +test_tar_sparse_gnu1_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_sparse_gnu1_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_sparse_gnu1_CPPFLAGS += -DTESTFILE=sparse-files/pax-gnu0-1.tar test_tar_sparse_gnu2_SOURCES = tests/libtar/tar_sparse.c -test_tar_sparse_gnu2_LDADD = libtar.a libio.a libcompat.a +test_tar_sparse_gnu2_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_sparse_gnu2_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_sparse_gnu2_CPPFLAGS += -DTESTFILE=sparse-files/pax-gnu1-0.tar test_tar_sparse_gnu3_SOURCES = tests/libtar/tar_sparse.c -test_tar_sparse_gnu3_LDADD = libtar.a libio.a libcompat.a +test_tar_sparse_gnu3_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_sparse_gnu3_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_sparse_gnu3_CPPFLAGS += -DTESTFILE=sparse-files/gnu.tar test_tar_xattr_bsd_SOURCES = tests/libtar/tar_xattr.c -test_tar_xattr_bsd_LDADD = libtar.a libio.a libcompat.a +test_tar_xattr_bsd_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_xattr_bsd_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_xattr_bsd_CPPFLAGS += -DTESTFILE=xattr/xattr-libarchive.tar test_tar_xattr_schily_SOURCES = tests/libtar/tar_xattr.c -test_tar_xattr_schily_LDADD = libtar.a libio.a libcompat.a +test_tar_xattr_schily_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_xattr_schily_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_xattr_schily_CPPFLAGS += -DTESTFILE=xattr/xattr-schily.tar test_tar_xattr_schily_bin_SOURCES = tests/libtar/tar_xattr_bin.c -test_tar_xattr_schily_bin_LDADD = libtar.a libio.a libcompat.a +test_tar_xattr_schily_bin_LDADD = libtar.a libio.a libutil.a libcompat.a test_tar_xattr_schily_bin_CPPFLAGS = $(AM_CPPFLAGS) -DTESTPATH=$(TARDATADIR) test_tar_xattr_schily_bin_CPPFLAGS += -DTESTFILE=xattr/xattr-schily-binary.tar tar_fuzz_SOURCES = tests/libtar/tar_fuzz.c -tar_fuzz_LDADD = libtar.a libio.a libcompat.a +tar_fuzz_LDADD = libtar.a libio.a libutil.a libcompat.a LIBTAR_TESTS = \ test_tar_ustar0 test_tar_ustar1 test_tar_ustar2 test_tar_ustar3 \ diff --git a/tests/libutil/Makemodule.am b/tests/libutil/Makemodule.am index 2ea2d43..5a69de4 100644 --- a/tests/libutil/Makemodule.am +++ b/tests/libutil/Makemodule.am @@ -30,10 +30,13 @@ test_filename_sane_w32_LDADD = libcompat.a test_sdate_epoch_SOURCES = tests/libutil/epoch.c test_sdate_epoch_LDADD = libutil.a libcompat.a +test_hex_decode_SOURCES = tests/libutil/hex_decode.c +test_hex_decode_LDADD = libutil.a libcompat.a + LIBUTIL_TESTS = \ test_str_table test_rbtree test_xxhash test_threadpool test_ismemzero \ test_canonicalize_name test_filename_sane test_filename_sane_w32 \ - test_sdate_epoch + test_sdate_epoch test_hex_decode check_PROGRAMS += $(LIBUTIL_TESTS) TESTS += $(LIBUTIL_TESTS) diff --git a/tests/libutil/hex_decode.c b/tests/libutil/hex_decode.c new file mode 100644 index 0000000..21ac4e7 --- /dev/null +++ b/tests/libutil/hex_decode.c @@ -0,0 +1,66 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * hex_decode.c + * + * Copyright (C) 2022 David Oberhollenzer <goliath@infraroot.at> + */ +#include "config.h" +#include "util/util.h" +#include "util/test.h" + +static const struct { + int result; + const char *in; + const char *out; +} test_vec[] = { + { 0, "", NULL }, + { -1, "A", NULL }, + { 0, "AA", "\xAA" }, + { 0, "0A", "\x0A" }, + { 0, "A0", "\xA0" }, + { -1, "A0B", NULL }, + { 0, "A0BC", "\xA0\xBC" }, + { 0, "0123456789ABCDEF", "\x01\x23\x45\x67\x89\xAB\xCD\xEF" }, + { 0, "0123456789abcdef", "\x01\x23\x45\x67\x89\xAB\xCD\xEF" }, + { -1, "0123456789ABCDEFGH", NULL }, + { -1, "0123456789abcdefgh", NULL }, +}; + +int main(int argc, char **argv) +{ + sqfs_u8 buffer[256]; + size_t i, j; + (void)argc; (void)argv; + + for (i = 0; i < sizeof(test_vec) / sizeof(test_vec[0]); ++i) { + size_t in_len = strlen(test_vec[i].in); + size_t out_len = in_len / 2; + int ret; + + /* initialize the buffer */ + for (j = 0; j < sizeof(buffer); ++j) { + buffer[j] = (j % 2) ? 0xAA : 0x55; + } + + /* convert */ + ret = hex_decode(test_vec[i].in, in_len, + buffer, sizeof(buffer)); + + /* make sure pattern is un-touched after expected offset */ + for (j = out_len; j < sizeof(buffer); ++j) { + TEST_ASSERT(buffer[j] == ((j % 2) ? 0xAA : 0x55)); + } + + /* check result */ + if (test_vec[i].result == 0) { + TEST_ASSERT(ret == 0); + ret = memcmp(buffer, test_vec[i].out, out_len); + TEST_ASSERT(ret == 0); + } else { + TEST_ASSERT(ret != 0); + } + } + + return EXIT_SUCCESS; +} + |