mirror of
https://github.com/woo-j/zint.git
synced 2024-12-25 09:33:56 +03:00
#189 AZTEC gs1 FLG(0) missing after FLG(n) fix from Milton Neal; tests
This commit is contained in:
parent
5d60d67a84
commit
9199a51a75
@ -777,7 +777,8 @@ static int aztec_text_process(const unsigned char source[], const size_t src_len
|
|||||||
|
|
||||||
if ((reduced_encode_mode[i] == 'P') || (reduced_encode_mode[i] == 'p')) {
|
if ((reduced_encode_mode[i] == 'P') || (reduced_encode_mode[i] == 'p')) {
|
||||||
if (gs1 && (reduced_source[i] == '[')) {
|
if (gs1 && (reduced_source[i] == '[')) {
|
||||||
if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // FLG(0) = FNC1
|
if (!az_bin_append(0, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // FLG(n)
|
||||||
|
if (!az_bin_append(0, 3, binary_string)) return ZINT_ERROR_TOO_LONG; // FLG(0) = FNC1
|
||||||
} else if (reduced_source[i] == 13) {
|
} else if (reduced_source[i] == 13) {
|
||||||
if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR
|
if (!az_bin_append(1, 5, binary_string)) return ZINT_ERROR_TOO_LONG; // CR
|
||||||
} else if (reduced_source[i] == 'a') {
|
} else if (reduced_source[i] == 'a') {
|
||||||
@ -982,7 +983,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, unsigned char source[], const siz
|
|||||||
unsigned char desc_data[4], desc_ecc[6];
|
unsigned char desc_data[4], desc_ecc[6];
|
||||||
int err_code, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length;
|
int err_code, ecc_level, compact, data_length, data_maxsize, codeword_size, adjusted_length;
|
||||||
int remainder, padbits, count, gs1, adjustment_size;
|
int remainder, padbits, count, gs1, adjustment_size;
|
||||||
int debug = symbol->debug, reader = 0;
|
int debug = (symbol->debug & ZINT_DEBUG_PRINT), reader = 0;
|
||||||
int comp_loop = 4;
|
int comp_loop = 4;
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
|
@ -29,8 +29,343 @@
|
|||||||
*/
|
*/
|
||||||
/* vim: set ts=4 sw=4 et : */
|
/* vim: set ts=4 sw=4 et : */
|
||||||
|
|
||||||
|
//#define TEST_ENCODE_GENERATE_EXPECTED 1
|
||||||
|
|
||||||
#include "testcommon.h"
|
#include "testcommon.h"
|
||||||
|
|
||||||
|
static void test_encode(void)
|
||||||
|
{
|
||||||
|
testStart("");
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
struct item {
|
||||||
|
int symbology;
|
||||||
|
int input_mode;
|
||||||
|
int option_1;
|
||||||
|
int option_2;
|
||||||
|
unsigned char* data;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
int expected_rows;
|
||||||
|
int expected_width;
|
||||||
|
char* comment;
|
||||||
|
char* expected;
|
||||||
|
};
|
||||||
|
struct item data[] = {
|
||||||
|
/* 0*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "123456789012", 0, 15, 15, "ISO/IEC 24778:2008 Figure 1 (left)",
|
||||||
|
"000111000011100"
|
||||||
|
"110111001110010"
|
||||||
|
"111100001000100"
|
||||||
|
"001111111111100"
|
||||||
|
"010100000001000"
|
||||||
|
"100101111101010"
|
||||||
|
"100101000101110"
|
||||||
|
"001101010101100"
|
||||||
|
"101101000101111"
|
||||||
|
"101101111101010"
|
||||||
|
"110100000001101"
|
||||||
|
"000111111111111"
|
||||||
|
"110001010010001"
|
||||||
|
"101011110101010"
|
||||||
|
"100010001000101"
|
||||||
|
},
|
||||||
|
/* 1*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "Aztec Code is a public domain 2D matrix barcode symbology of nominally square symbols built on a square grid with a distinctive square bullseye pattern at their center.", 0, 41, 41, "ISO/IEC 24778:2008 Figure 1 (right) NOTE: Not the same but down to single encoding mode difference (UPPER space rather than LOWER space after 2D)",
|
||||||
|
"00001100110010010010111000010100001011000"
|
||||||
|
"01000110010110110001000000100101101000001"
|
||||||
|
"01011100101011001110101100000001100011001"
|
||||||
|
"11100000010100001000010010010100110001010"
|
||||||
|
"10101010101010101010101010101010101010101"
|
||||||
|
"00110101011100000001000100011001101100010"
|
||||||
|
"11001000100011110101100010110100011011010"
|
||||||
|
"01000101001101011011011111101100000101011"
|
||||||
|
"11011010111101111111101010001101111011100"
|
||||||
|
"01000101001000110011010101001101110100111"
|
||||||
|
"01011101100011100001100000101010111011001"
|
||||||
|
"00100101100111100101001111011011011100101"
|
||||||
|
"11101000000100001111101011010101101010101"
|
||||||
|
"00000100011101100101000001011110110000000"
|
||||||
|
"01001101010001111111111111110101101011100"
|
||||||
|
"00110000000010100000000000110100010000111"
|
||||||
|
"00001011011111101111111110100110000011110"
|
||||||
|
"00000111010010101000000010110011101100000"
|
||||||
|
"11001001010101101011111010111111100010111"
|
||||||
|
"11110001000101101010001010100111001100011"
|
||||||
|
"10101010101010101010101010101010101010101"
|
||||||
|
"00100100010000101010001010100101100000000"
|
||||||
|
"00001100111110101011111010111001111010000"
|
||||||
|
"10010101000010101000000010110110111001010"
|
||||||
|
"01011101011011101111111110110000110011110"
|
||||||
|
"00110101011100100000000000111011010100100"
|
||||||
|
"00111101000010111111111111110100011011011"
|
||||||
|
"00000010101100011111001110001000111000010"
|
||||||
|
"10001000010111101001100110011000001010001"
|
||||||
|
"10010001111100101111011100100011110101101"
|
||||||
|
"01111100000001001110100011011011110011000"
|
||||||
|
"10000001000010110110010010010101111000000"
|
||||||
|
"00101100010010001011111101101111111110101"
|
||||||
|
"00100001101000100101010001001110010001111"
|
||||||
|
"10011001111110000001110100000001010010011"
|
||||||
|
"10110010000000111110011001111111100101011"
|
||||||
|
"10101010101010101010101010101010101010101"
|
||||||
|
"10000010011110010010000100001010001101110"
|
||||||
|
"10101101110100001100111100110101001010001"
|
||||||
|
"00010010010011001011011010000110001000101"
|
||||||
|
"10001000001010100110100000001001001110000"
|
||||||
|
},
|
||||||
|
/* 2*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "Code 2D!", 0, 15, 15, "ISO/IEC 24778:2008 Figure G.2",
|
||||||
|
"000110001100000"
|
||||||
|
"000000110000010"
|
||||||
|
"101100001000101"
|
||||||
|
"011111111111100"
|
||||||
|
"111100000001101"
|
||||||
|
"000101111101100"
|
||||||
|
"100101000101111"
|
||||||
|
"001101010101001"
|
||||||
|
"001101000101010"
|
||||||
|
"010101111101001"
|
||||||
|
"100100000001011"
|
||||||
|
"100111111111101"
|
||||||
|
"010001100010010"
|
||||||
|
"011000011011010"
|
||||||
|
"111001101100000"
|
||||||
|
},
|
||||||
|
/* 3*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", 0, 53, 53, "**NOT SAME** ISO/IEC 24778:2008 Figure I.1 (left) TODO: investigate",
|
||||||
|
"00010101011010101010101010110101010101010110101010101"
|
||||||
|
"00101010100101010101010101001010101010101001010101010"
|
||||||
|
"11100101011010101010101010110101010101010110101010110"
|
||||||
|
"11011010100101010101010101001010101010101001010101001"
|
||||||
|
"00101001011010101010101010110101010101010110101011010"
|
||||||
|
"01010110100101010101010101001010101010101001010100101"
|
||||||
|
"10101010011010101010101010110101010101010110101101010"
|
||||||
|
"01010101100101010101010101001010101010101001010010101"
|
||||||
|
"10101010101010101010101010110101010101010110110101010"
|
||||||
|
"01010101010101010101010101001010101010101001001010101"
|
||||||
|
"10101010101010101010101010101010101010101010101010101"
|
||||||
|
"10101010100101111100100010001100110110010001010101010"
|
||||||
|
"01010101011011100000011011111100100111010010101010101"
|
||||||
|
"10101010100101000000011011011101100100000101010101010"
|
||||||
|
"01010101011010110110100001100000100100100010101010101"
|
||||||
|
"10101010100111101100101000001111010001001001010101010"
|
||||||
|
"01010101011110000110010111110110001101010010101010101"
|
||||||
|
"10101010100111001001110011011111100001000101010101010"
|
||||||
|
"01010101011110101000100001101101111001000010101010101"
|
||||||
|
"10101010100010011011101000000010011011000101010101010"
|
||||||
|
"01010101011010000001111111111111110100110110101010101"
|
||||||
|
"10101010100110000001100000000000110000010001010101010"
|
||||||
|
"01010101011000001000101111111110100001100110101010101"
|
||||||
|
"10101010100011000011101000000010101100001001010101010"
|
||||||
|
"01010101011101111101101011111010101000011010101010101"
|
||||||
|
"10101010100001100111101010001010101010110001010101010"
|
||||||
|
"10101010101010101010101010101010101010101010101010101"
|
||||||
|
"01010101010001101100101010001010100110010100101010101"
|
||||||
|
"10101010101101100011101011111010110001100011010101010"
|
||||||
|
"01010101010010110110101000000010100110110100101010101"
|
||||||
|
"10101010101111000100101111111110111110000011010101010"
|
||||||
|
"01010101010110011110100000000000110001100000101010101"
|
||||||
|
"10101010101011001000111111111111110100001111010101010"
|
||||||
|
"01010101010011101000001000001111000110001100101010101"
|
||||||
|
"10101010101001010100110111101001011010101111010101010"
|
||||||
|
"01010101010010100011010011000101101111011000101010101"
|
||||||
|
"10101010101111000100000111111101101110111111010101010"
|
||||||
|
"01010101010110100110110110000011100010000000101010101"
|
||||||
|
"10101010101101110111010001101100001000011111010101010"
|
||||||
|
"01010101010110001101001100010100101010110000101010101"
|
||||||
|
"10101010101000101001111010110101100111100111010101010"
|
||||||
|
"01010101010010010000111100011100110101100000101010101"
|
||||||
|
"10101010101010101010101010101010101010101010101010101"
|
||||||
|
"10101010010010101010101010010101010101010101010101010"
|
||||||
|
"01010101101101010101010101101010101010101010101010101"
|
||||||
|
"10101001010010101010101010010101010101010100110101010"
|
||||||
|
"01010110101101010101010101101010101010101011001010101"
|
||||||
|
"10100101010010101010101010010101010101010100101101010"
|
||||||
|
"01011010101101010101010101101010101010101011010010101"
|
||||||
|
"10010101010010101010101010010101010101010100101011010"
|
||||||
|
"01101010101101010101010101101010101010101011010100101"
|
||||||
|
"01010101010010101010101010010101010101010100101010110"
|
||||||
|
"10101010101101010101010101101010101010101011010101001"
|
||||||
|
},
|
||||||
|
/* 4*/ { BARCODE_AZTEC, UNICODE_MODE, -1, -1, "3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333", 0, 53, 53, "**NOT SAME** ISO/IEC 24778:2008 Figure I.1 (right) TODO: investigate",
|
||||||
|
"00111111111111111111111111111111111111111111111111111"
|
||||||
|
"00000000000000000000000000000000000000000000000000000"
|
||||||
|
"11101111111111111111111111111111111111111111111111101"
|
||||||
|
"11100000000000000000000000000000000000000000000000001"
|
||||||
|
"00101011111111111111111111111111111111111111111110101"
|
||||||
|
"10101000000000000000000000000000000000000000000000101"
|
||||||
|
"10101010111111111111111111111111111111111111111010101"
|
||||||
|
"10101010000000000000000000000000000000000000000010101"
|
||||||
|
"10101010101111111111111111111111111111111111101010101"
|
||||||
|
"10101010100000000000000000000000000000000000001010101"
|
||||||
|
"10101010101010101010101010101010101010101010101010101"
|
||||||
|
"10101010100100010001110111001110000101000000101010101"
|
||||||
|
"10101010101101011100101111110011101011101010101010101"
|
||||||
|
"10101010100100111100011011000001110011010000101010101"
|
||||||
|
"10101010101100110110001101111010001010101010101010101"
|
||||||
|
"10101010100110111110011111000100011001111100101010101"
|
||||||
|
"10101010101110110100111001111011110011111110101010101"
|
||||||
|
"10101010100110011110100000010101000011010000101010101"
|
||||||
|
"10101010101011001010101110101110001010011110101010101"
|
||||||
|
"10101010100110010101101000000010010101100000101010101"
|
||||||
|
"10101010101101111111111111111111111010111110101010101"
|
||||||
|
"10101010100111110111100000000000110001101000101010101"
|
||||||
|
"10101010101101101100101111111110100000000110101010101"
|
||||||
|
"10101010100101100001101000000010101110011000101010101"
|
||||||
|
"10101010101100110101101011111010101001000010101010101"
|
||||||
|
"10101010100001100111101010001010101100100000101010101"
|
||||||
|
"10101010101010101010101010101010101010101010101010101"
|
||||||
|
"10101010100000111110101010001010100010011000101010101"
|
||||||
|
"10101010101011011101101011111010111011110110101010101"
|
||||||
|
"10101010100100010000101000000010101001010000101010101"
|
||||||
|
"10101010101011010100101111111110110110000010101010101"
|
||||||
|
"10101010100011111000100000000000110110101000101010101"
|
||||||
|
"10101010101101000110111111111111111100100010101010101"
|
||||||
|
"10101010100100100000001000001111000100010100101010101"
|
||||||
|
"10101010101000111110011001100110101101100110101010101"
|
||||||
|
"10101010100101100010110011011100001010110100101010101"
|
||||||
|
"10101010101101111011000111100110101010011110101010101"
|
||||||
|
"10101010100001101011111001001000010001001000101010101"
|
||||||
|
"10101010101010100111010011111110000111100010101010101"
|
||||||
|
"10101010100000001011111101010011011010000000101010101"
|
||||||
|
"10101010101100100000011011100010000000101010101010101"
|
||||||
|
"10101010100001101101001111001100000001000100101010101"
|
||||||
|
"10101010101010101010101010101010101010101010101010101"
|
||||||
|
"10101010000000000000000000000000000000000000101010101"
|
||||||
|
"10101010111111111111111111111111111111111110101010101"
|
||||||
|
"10101000000000000000000000000000000000000000001010101"
|
||||||
|
"10101011111111111111111111111111111111111111101010101"
|
||||||
|
"10100000000000000000000000000000000000000000000010101"
|
||||||
|
"10101111111111111111111111111111111111111111111010101"
|
||||||
|
"10000000000000000000000000000000000000000000000000101"
|
||||||
|
"10111111111111111111111111111111111111111111111110101"
|
||||||
|
"00000000000000000000000000000000000000000000000000001"
|
||||||
|
"11111111111111111111111111111111111111111111111111101"
|
||||||
|
},
|
||||||
|
/* 5*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]03453120000011[17]120508[10]ABCD1234[410]9501101020917", 0, 23, 23, "#189 Follow embedded FLG(n) with FLG(0)",
|
||||||
|
"00100000101111000100100"
|
||||||
|
"00011101100110001010000"
|
||||||
|
"00000111000111101011011"
|
||||||
|
"01000001010100001100010"
|
||||||
|
"00001001100110000111110"
|
||||||
|
"00011011111000110101101"
|
||||||
|
"00001011100111101111110"
|
||||||
|
"11000111111111111010000"
|
||||||
|
"11001101000000010111110"
|
||||||
|
"00111011011111010111110"
|
||||||
|
"01000001010001011110010"
|
||||||
|
"00011001010101011111101"
|
||||||
|
"01101111010001011110011"
|
||||||
|
"10011001011111011011100"
|
||||||
|
"01011011000000010010110"
|
||||||
|
"00011101111111111001100"
|
||||||
|
"10101100110111100001101"
|
||||||
|
"10110101111100111010001"
|
||||||
|
"11101001010000011001110"
|
||||||
|
"00101010101010001111001"
|
||||||
|
"11000101000100100000100"
|
||||||
|
"00010001010101010101011"
|
||||||
|
"11101100000000000010110"
|
||||||
|
},
|
||||||
|
/* 6*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, "0", 0, 11, 11, "ISO/IEC 24778:2008 Figure A.1 (1st)",
|
||||||
|
"11101010101"
|
||||||
|
"11111111111"
|
||||||
|
"01000000010"
|
||||||
|
"11011111011"
|
||||||
|
"01010001010"
|
||||||
|
"11010101011"
|
||||||
|
"01010001010"
|
||||||
|
"11011111011"
|
||||||
|
"01000000010"
|
||||||
|
"01111111111"
|
||||||
|
"00101010100"
|
||||||
|
},
|
||||||
|
/* 7*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, "25", 0, 11, 11, "ISO/IEC 24778:2008 Figure A.1 (2nd)",
|
||||||
|
"11101100101"
|
||||||
|
"11111111111"
|
||||||
|
"01000000011"
|
||||||
|
"01011111011"
|
||||||
|
"01010001010"
|
||||||
|
"11010101011"
|
||||||
|
"11010001011"
|
||||||
|
"11011111010"
|
||||||
|
"11000000011"
|
||||||
|
"01111111111"
|
||||||
|
"00100100000"
|
||||||
|
},
|
||||||
|
/* 8*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, "125", 0, 11, 11, "ISO/IEC 24778:2008 Figure A.1 (3rd)",
|
||||||
|
"11110101101"
|
||||||
|
"11111111111"
|
||||||
|
"11000000011"
|
||||||
|
"11011111011"
|
||||||
|
"01010001010"
|
||||||
|
"01010101010"
|
||||||
|
"01010001011"
|
||||||
|
"01011111011"
|
||||||
|
"11000000010"
|
||||||
|
"01111111111"
|
||||||
|
"00111101000"
|
||||||
|
},
|
||||||
|
/* 9*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, "255", 0, 11, 11, "ISO/IEC 24778:2008 Figure A.1 (4th)",
|
||||||
|
"11110101001"
|
||||||
|
"11111111111"
|
||||||
|
"01000000011"
|
||||||
|
"11011111011"
|
||||||
|
"11010001011"
|
||||||
|
"01010101011"
|
||||||
|
"01010001010"
|
||||||
|
"11011111011"
|
||||||
|
"11000000010"
|
||||||
|
"01111111111"
|
||||||
|
"00110011100"
|
||||||
|
},
|
||||||
|
};
|
||||||
|
int data_size = sizeof(data) / sizeof(struct item);
|
||||||
|
|
||||||
|
char escaped[1024];
|
||||||
|
|
||||||
|
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;
|
||||||
|
symbol->input_mode = data[i].input_mode;
|
||||||
|
if (data[i].option_1 != -1) {
|
||||||
|
symbol->option_1 = data[i].option_1;
|
||||||
|
}
|
||||||
|
if (data[i].option_2 != -1) {
|
||||||
|
symbol->option_2 = data[i].option_2;
|
||||||
|
}
|
||||||
|
//symbol->debug = ZINT_DEBUG_PRINT;
|
||||||
|
|
||||||
|
int 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);
|
||||||
|
|
||||||
|
#ifdef TEST_ENCODE_GENERATE_EXPECTED
|
||||||
|
printf(" /*%3d*/ { %s, %s, %d, %d, \"%s\", %s, %d, %d, \"%s\",\n",
|
||||||
|
i, testUtilBarcodeName(data[i].symbology), testUtilInputModeName(data[i].input_mode), data[i].option_1, data[i].option_2,
|
||||||
|
testUtilEscape(data[i].data, length, escaped, sizeof(escaped)), testUtilErrorName(data[i].ret), symbol->rows, symbol->width, data[i].comment);
|
||||||
|
testUtilModulesDump(symbol, " ", "\n");
|
||||||
|
printf(" },\n");
|
||||||
|
#else
|
||||||
|
if (ret < 5) {
|
||||||
|
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d (%s)\n", i, symbol->rows, data[i].expected_rows, data[i].data);
|
||||||
|
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d (%s)\n", i, symbol->width, data[i].expected_width, data[i].data);
|
||||||
|
|
||||||
|
if (ret == 0) {
|
||||||
|
int width, row;
|
||||||
|
ret = testUtilModulesCmp(symbol, data[i].expected, &width, &row);
|
||||||
|
assert_zero(ret, "i:%d testUtilModulesCmp ret %d != 0 width %d row %d (%s)\n", i, ret, width, row, data[i].data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ZBarcode_Delete(symbol);
|
||||||
|
}
|
||||||
|
|
||||||
|
testFinish();
|
||||||
|
}
|
||||||
|
|
||||||
// #181 Nico Gunkel OSS-Fuzz
|
// #181 Nico Gunkel OSS-Fuzz
|
||||||
static void test_fuzz(void)
|
static void test_fuzz(void)
|
||||||
{
|
{
|
||||||
@ -479,7 +814,8 @@ static void test_fuzz(void)
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
test_fuzz();
|
test_encode();
|
||||||
|
//test_fuzz();
|
||||||
|
|
||||||
testReport();
|
testReport();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user