From 0c00ece9f5499c2fe98a682babfb60661ce6f31d Mon Sep 17 00:00:00 2001 From: gitlost Date: Sat, 28 Mar 2020 10:13:06 +0000 Subject: [PATCH] #181 OSS-Fuzz CODEONE fix, double indexing typo --- backend/code1.c | 4 +- backend/library.c | 1 - backend/tests/CMakeLists.txt | 1 + backend/tests/test_code1.c | 79 ++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 backend/tests/test_code1.c diff --git a/backend/code1.c b/backend/code1.c index 0dd0dc8c..d6996839 100644 --- a/backend/code1.c +++ b/backend/code1.c @@ -2,7 +2,7 @@ /* libzint - the open source barcode library - Copyright (C) 2009-2017 Robin Stuart + Copyright (C) 2009-2020 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -442,7 +442,7 @@ static int c1_encode(struct zint_symbol *symbol, unsigned char source[], unsigne if (j == 13) { latch = 0; for (i = sp + 13; i < length; i++) { - if (!((source[sp + i] >= '0') && (source[sp + i] <= '9'))) { + if (!((source[i] >= '0') && (source[i] <= '9'))) { latch = 1; } } diff --git a/backend/library.c b/backend/library.c index 518e7584..af36984f 100644 --- a/backend/library.c +++ b/backend/library.c @@ -31,7 +31,6 @@ /* vim: set ts=4 sw=4 et : */ #include -#include #include #include #ifdef _MSC_VER diff --git a/backend/tests/CMakeLists.txt b/backend/tests/CMakeLists.txt index d96574d0..271cc04d 100644 --- a/backend/tests/CMakeLists.txt +++ b/backend/tests/CMakeLists.txt @@ -53,6 +53,7 @@ endmacro(zint_add_test) zint_add_test(auspost, test_auspost) zint_add_test(channel, test_channel) zint_add_test(codablock, test_codablock) +zint_add_test(code1, test_code1) zint_add_test(common, test_common) zint_add_test(composite, test_composite) zint_add_test(dmatrix, test_dmatrix) diff --git a/backend/tests/test_code1.c b/backend/tests/test_code1.c new file mode 100644 index 00000000..5db51e26 --- /dev/null +++ b/backend/tests/test_code1.c @@ -0,0 +1,79 @@ +/* + libzint - the open source barcode library + Copyright (C) 2020 Robin Stuart + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + */ +/* vim: set ts=4 sw=4 et : */ + +#include "testcommon.h" + +// #181 Nico Gunkel OSS-Fuzz +static void test_fuzz(void) +{ + testStart(""); + + int ret; + struct item { + int symbology; + unsigned char* data; + int length; + int ret; + }; + // s/\/\*[ 0-9]*\*\//\=printf("\/*%2d*\/", line(".") - line("'<")) + struct item data[] = { + /* 0*/ { BARCODE_CODEONE, "3333P33B\035333V3333333333333\0363", -1, 0 }, + }; + int data_size = sizeof(data) / sizeof(struct item); + + for (int i = 0; i < data_size; i++) { + + struct zint_symbol* symbol = ZBarcode_Create(); + assert_nonnull(symbol, "Symbol not created\n"); + + symbol->symbology = data[i].symbology; + int length = data[i].length; + if (length == -1) { + length = strlen(data[i].data); + } + + ret = ZBarcode_Encode(symbol, data[i].data, length); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); + + ZBarcode_Delete(symbol); + } + + testFinish(); +} + +int main() +{ + test_fuzz(); + + testReport(); + + return 0; +}