mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
AZTEC: fix out-of-bounds crash when user-specified size given,
ticket #300, props Andre Maute; fix 4-layer compact block max (76 -> 64); fix encoding of byte-blocks > 11-bit limit library: fix 21-bit Unicode conversion in `escape_char_process()`; fix restricting escaped data length by using de-escaped length to check (`escape_char_process()` adapted to do length only calc also)
This commit is contained in:
parent
06ae7c1b7a
commit
7c4a538248
@ -113,6 +113,11 @@ Bugs
|
|||||||
- EAN-2/EAN-5: fix `BARCODE_BIND_TOP/BIND/BOX` output
|
- EAN-2/EAN-5: fix `BARCODE_BIND_TOP/BIND/BOX` output
|
||||||
- PDF417: fix out-of-bounds crash in `pdf_text_submode_length()`, ticket #300,
|
- PDF417: fix out-of-bounds crash in `pdf_text_submode_length()`, ticket #300,
|
||||||
props Andre Maute
|
props Andre Maute
|
||||||
|
- AZTEC: fix out-of-bounds crash when user-specified size given, ticket #300,
|
||||||
|
props Andre Maute; fix 4-layer compact block max (76 -> 64); fix encoding of
|
||||||
|
byte-blocks > 11-bit limit
|
||||||
|
- library: fix 21-bit Unicode conversion in `escape_char_process()`; fix
|
||||||
|
restricting escaped data length by using de-escaped length to check
|
||||||
|
|
||||||
|
|
||||||
Version 2.12.0 (2022-12-12)
|
Version 2.12.0 (2022-12-12)
|
||||||
|
103
backend/aztec.c
103
backend/aztec.c
@ -104,7 +104,6 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
|
|||||||
int count;
|
int count;
|
||||||
char next_mode;
|
char next_mode;
|
||||||
int reduced_length;
|
int reduced_length;
|
||||||
int byte_mode = 0;
|
|
||||||
char *encode_mode = (char *) z_alloca(src_len + 1);
|
char *encode_mode = (char *) z_alloca(src_len + 1);
|
||||||
unsigned char *reduced_source = (unsigned char *) z_alloca(src_len + 1);
|
unsigned char *reduced_source = (unsigned char *) z_alloca(src_len + 1);
|
||||||
char *reduced_encode_mode = (char *) z_alloca(src_len + 1);
|
char *reduced_encode_mode = (char *) z_alloca(src_len + 1);
|
||||||
@ -497,11 +496,7 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
|
|||||||
current_mode = initial_mode;
|
current_mode = initial_mode;
|
||||||
for (i = 0; i < reduced_length; i++) {
|
for (i = 0; i < reduced_length; i++) {
|
||||||
|
|
||||||
if (reduced_encode_mode[i] != 'B') {
|
if (reduced_encode_mode[i] != current_mode) {
|
||||||
byte_mode = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((reduced_encode_mode[i] != current_mode) && (!byte_mode)) {
|
|
||||||
/* Change mode */
|
/* Change mode */
|
||||||
if (current_mode == 'U') {
|
if (current_mode == 'U') {
|
||||||
switch (reduced_encode_mode[i]) {
|
switch (reduced_encode_mode[i]) {
|
||||||
@ -628,27 +623,43 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Byte mode length descriptor */
|
/* Byte mode - process full block here */
|
||||||
if ((reduced_encode_mode[i] == 'B') && (!byte_mode)) {
|
if (reduced_encode_mode[i] == 'B') {
|
||||||
|
int big_batch = 0;
|
||||||
for (count = 0; ((i + count) < reduced_length) && (reduced_encode_mode[i + count] == 'B'); count++);
|
for (count = 0; ((i + count) < reduced_length) && (reduced_encode_mode[i + count] == 'B'); count++);
|
||||||
|
|
||||||
if (count > 2079) {
|
assert(count <= 2047 + 2078); /* Can't be more than 19968 / 8 = 2496 */
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count > 31) {
|
if (count > 2047) { /* Max 11-bit number */
|
||||||
|
big_batch = count > 2078 ? 2078 : count;
|
||||||
/* Put 00000 followed by 11-bit number of bytes less 31 */
|
/* Put 00000 followed by 11-bit number of bytes less 31 */
|
||||||
if (!(bp = az_bin_append_posn(0, 5, binary_string, bp))) return 0;
|
if (!(bp = az_bin_append_posn(big_batch - 31, 16, binary_string, bp))) return 0;
|
||||||
if (!(bp = az_bin_append_posn(count - 31, 11, binary_string, bp))) return 0;
|
for (j = 0; j < big_batch; j++) {
|
||||||
|
if (!(bp = az_bin_append_posn(reduced_source[i++], 8, binary_string, bp))) return 0;
|
||||||
|
}
|
||||||
|
count -= big_batch;
|
||||||
|
}
|
||||||
|
if (count) {
|
||||||
|
if (big_batch) {
|
||||||
|
if (!(bp = az_bin_append_posn(31, 5, binary_string, bp))) return 0; /* B/S */
|
||||||
|
}
|
||||||
|
if (count > 31) {
|
||||||
|
assert(count <= 2078);
|
||||||
|
/* Put 00000 followed by 11-bit number of bytes less 31 */
|
||||||
|
if (!(bp = az_bin_append_posn(count - 31, 16, binary_string, bp))) return 0;
|
||||||
} else {
|
} else {
|
||||||
/* Put 5-bit number of bytes */
|
/* Put 5-bit number of bytes */
|
||||||
if (!(bp = az_bin_append_posn(count, 5, binary_string, bp))) return 0;
|
if (!(bp = az_bin_append_posn(count, 5, binary_string, bp))) return 0;
|
||||||
}
|
}
|
||||||
byte_mode = 1;
|
for (j = 0; j < count; j++) {
|
||||||
|
if (!(bp = az_bin_append_posn(reduced_source[i++], 8, binary_string, bp))) return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i--;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((reduced_encode_mode[i] != 'B') && (reduced_encode_mode[i] != 'u')
|
if ((reduced_encode_mode[i] != 'u') && (reduced_encode_mode[i] != 'p')) {
|
||||||
&& (reduced_encode_mode[i] != 'p')) {
|
|
||||||
current_mode = reduced_encode_mode[i];
|
current_mode = reduced_encode_mode[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -709,8 +720,6 @@ static int aztec_text_process(const unsigned char source[], int src_len, int bp,
|
|||||||
if (!(bp = az_bin_append_posn(AztecSymbolChar[(int) reduced_source[i]], 4, binary_string, bp)))
|
if (!(bp = az_bin_append_posn(AztecSymbolChar[(int) reduced_source[i]], 4, binary_string, bp)))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (reduced_encode_mode[i] == 'B') {
|
|
||||||
if (!(bp = az_bin_append_posn(reduced_source[i], 8, binary_string, bp))) return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1064,17 +1073,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int
|
|||||||
if (count == codeword_size) {
|
if (count == codeword_size) {
|
||||||
adjusted_string[adjusted_length - 1] = '0';
|
adjusted_string[adjusted_length - 1] = '0';
|
||||||
}
|
}
|
||||||
|
if (debug_print) printf("Adjusted Length: %d, Data Max Size %d\n", adjusted_length, data_maxsize);
|
||||||
if (debug_print) {
|
|
||||||
fputs("Codewords:\n", stdout);
|
|
||||||
for (i = 0; i < (adjusted_length / codeword_size); i++) {
|
|
||||||
for (j = 0; j < codeword_size; j++) {
|
|
||||||
printf("%c", adjusted_string[(i * codeword_size) + j]);
|
|
||||||
}
|
|
||||||
fputc(' ', stdout);
|
|
||||||
}
|
|
||||||
fputc('\n', stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
} while (adjusted_length > data_maxsize);
|
} while (adjusted_length > data_maxsize);
|
||||||
/* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s
|
/* This loop will only repeat on the rare occasions when the rule about not having all 1s or all 0s
|
||||||
@ -1117,8 +1116,11 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int
|
|||||||
|
|
||||||
if (count == 0 || count == (codeword_size - 1)) {
|
if (count == 0 || count == (codeword_size - 1)) {
|
||||||
/* Codeword of B-1 '0's or B-1 '1's */
|
/* Codeword of B-1 '0's or B-1 '1's */
|
||||||
adjusted_string[j] = count == 0 ? '1' : '0';
|
if (j + 1 >= AZTEC_MAX_CAPACITY) {
|
||||||
j++;
|
strcpy(symbol->errtxt, "704: Data too long for specified Aztec Code symbol size");
|
||||||
|
return ZINT_ERROR_TOO_LONG;
|
||||||
|
}
|
||||||
|
adjusted_string[j++] = count == 0 ? '1' : '0';
|
||||||
count = binary_string[i] == '1' ? 1 : 0;
|
count = binary_string[i] == '1' ? 1 : 0;
|
||||||
} else {
|
} else {
|
||||||
count = 0;
|
count = 0;
|
||||||
@ -1127,9 +1129,7 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int
|
|||||||
} else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */
|
} else if (binary_string[i] == '1') { /* Skip B so only counting B-1 */
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
adjusted_string[j++] = binary_string[i];
|
||||||
adjusted_string[j] = binary_string[i];
|
|
||||||
j++;
|
|
||||||
}
|
}
|
||||||
adjusted_length = j;
|
adjusted_length = j;
|
||||||
|
|
||||||
@ -1141,6 +1141,18 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int
|
|||||||
}
|
}
|
||||||
if (debug_print) printf("Remainder: %d Pad bits: %d\n", remainder, padbits);
|
if (debug_print) printf("Remainder: %d Pad bits: %d\n", remainder, padbits);
|
||||||
|
|
||||||
|
/* Check if the data actually fits into the selected symbol size */
|
||||||
|
if (compact) {
|
||||||
|
data_maxsize = codeword_size * (AztecCompactSizes[layers - 1] - 3);
|
||||||
|
} else {
|
||||||
|
data_maxsize = codeword_size * (AztecSizes[layers - 1] - 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (adjusted_length + padbits > data_maxsize) {
|
||||||
|
strcpy(symbol->errtxt, "505: Data too long for specified Aztec Code symbol size");
|
||||||
|
return ZINT_ERROR_TOO_LONG;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < padbits; i++) {
|
for (i = 0; i < padbits; i++) {
|
||||||
adjusted_string[adjusted_length++] = '1';
|
adjusted_string[adjusted_length++] = '1';
|
||||||
}
|
}
|
||||||
@ -1155,28 +1167,17 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int
|
|||||||
adjusted_string[adjusted_length - 1] = '0';
|
adjusted_string[adjusted_length - 1] = '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the data actually fits into the selected symbol size */
|
if (debug_print) printf("Adjusted Length: %d\n", adjusted_length);
|
||||||
if (compact) {
|
|
||||||
data_maxsize = codeword_size * (AztecCompactSizes[layers - 1] - 3);
|
|
||||||
} else {
|
|
||||||
data_maxsize = codeword_size * (AztecSizes[layers - 1] - 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (adjusted_length > data_maxsize) {
|
|
||||||
strcpy(symbol->errtxt, "505: Data too long for specified Aztec Code symbol size");
|
|
||||||
return ZINT_ERROR_TOO_LONG;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug_print) {
|
if (debug_print) {
|
||||||
fputs("Codewords:\n", stdout);
|
printf("Codewords (%d):\n", adjusted_length / codeword_size);
|
||||||
for (i = 0; i < (adjusted_length / codeword_size); i++) {
|
for (i = 0; i < (adjusted_length / codeword_size); i++) {
|
||||||
printf(" %.*s", codeword_size, adjusted_string + i * codeword_size);
|
printf(" %.*s", codeword_size, adjusted_string + i * codeword_size);
|
||||||
}
|
}
|
||||||
fputc('\n', stdout);
|
fputc('\n', stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reader && (layers > 22)) {
|
if (reader && (layers > 22)) {
|
||||||
strcpy(symbol->errtxt, "506: Data too long for reader initialisation symbol");
|
strcpy(symbol->errtxt, "506: Data too long for reader initialisation symbol");
|
||||||
return ZINT_ERROR_TOO_LONG;
|
return ZINT_ERROR_TOO_LONG;
|
||||||
@ -1186,14 +1187,16 @@ INTERNAL int aztec(struct zint_symbol *symbol, struct zint_seg segs[], const int
|
|||||||
|
|
||||||
if (compact) {
|
if (compact) {
|
||||||
ecc_blocks = AztecCompactSizes[layers - 1] - data_blocks;
|
ecc_blocks = AztecCompactSizes[layers - 1] - data_blocks;
|
||||||
|
if (layers == 4) { /* Can use spare blocks for ECC (76 available - 64 max data blocks) */
|
||||||
|
ecc_blocks += 12;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ecc_blocks = AztecSizes[layers - 1] - data_blocks;
|
ecc_blocks = AztecSizes[layers - 1] - data_blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug_print) {
|
if (debug_print) {
|
||||||
printf("Generating a %s symbol with %d layers\n", compact ? "compact" : "full-size", layers);
|
printf("Generating a %s symbol with %d layers\n", compact ? "compact" : "full-size", layers);
|
||||||
printf("Requires %d", compact ? AztecCompactSizes[layers - 1] : AztecSizes[layers - 1]);
|
printf("Requires %d codewords of %d-bits\n", data_blocks + ecc_blocks, codeword_size);
|
||||||
printf(" codewords of %d-bits\n", codeword_size);
|
|
||||||
printf(" (%d data words, %d ecc words)\n", data_blocks, ecc_blocks);
|
printf(" (%d data words, %d ecc words)\n", data_blocks, ecc_blocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* aztec.h - Handles Aztec 2D Symbols */
|
/* aztec.h - Handles Aztec 2D Symbols */
|
||||||
/*
|
/*
|
||||||
libzint - the open source barcode library
|
libzint - the open source barcode library
|
||||||
Copyright (C) 2008-2022 Robin Stuart <rstuart114@gmail.com>
|
Copyright (C) 2008-2023 Robin Stuart <rstuart114@gmail.com>
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
@ -104,7 +104,7 @@ static const short AztecSizes[32] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const short AztecCompactSizes[4] = {
|
static const short AztecCompactSizes[4] = {
|
||||||
17, 40, 51, 76
|
17, 40, 51, 64 /* 64 data blocks (Mode Message max) but 76 altogether */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const short Aztec10DataSizes[32] = {
|
static const short Aztec10DataSizes[32] = {
|
||||||
@ -136,7 +136,7 @@ static const short Aztec50DataSizes[32] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const short AztecCompact10DataSizes[4] = {
|
static const short AztecCompact10DataSizes[4] = {
|
||||||
78, 198, 336, 520
|
78, 198, 336, 512 /* Max 64 * 8 */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const short AztecCompact23DataSizes[4] = {
|
static const short AztecCompact23DataSizes[4] = {
|
||||||
|
@ -706,20 +706,17 @@ static int esc_base(struct zint_symbol *symbol, unsigned char *input_string, int
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helper to parse escape sequences */
|
/* Helper to parse escape sequences. If `escaped_string` NULL, calculates length only */
|
||||||
static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_string, int *p_length) {
|
static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_string, int *p_length,
|
||||||
|
unsigned char *escaped_string) {
|
||||||
const int length = *p_length;
|
const int length = *p_length;
|
||||||
int in_posn, out_posn;
|
int in_posn = 0, out_posn = 0;
|
||||||
int ch;
|
int ch;
|
||||||
int val;
|
int val;
|
||||||
int i;
|
int i;
|
||||||
unsigned long unicode;
|
unsigned long unicode;
|
||||||
unsigned char *escaped_string = (unsigned char *) z_alloca(length + 1);
|
|
||||||
const int extra_escape_mode = (symbol->input_mode & EXTRA_ESCAPE_MODE) && symbol->symbology == BARCODE_CODE128;
|
const int extra_escape_mode = (symbol->input_mode & EXTRA_ESCAPE_MODE) && symbol->symbology == BARCODE_CODE128;
|
||||||
|
|
||||||
in_posn = 0;
|
|
||||||
out_posn = 0;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (input_string[in_posn] == '\\') {
|
if (input_string[in_posn] == '\\') {
|
||||||
if (in_posn + 1 >= length) {
|
if (in_posn + 1 >= length) {
|
||||||
@ -729,7 +726,8 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
|
|||||||
ch = input_string[in_posn + 1];
|
ch = input_string[in_posn + 1];
|
||||||
/* NOTE: if add escape character, must also update regex in "frontend_qt/datawindow.php" */
|
/* NOTE: if add escape character, must also update regex in "frontend_qt/datawindow.php" */
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case '0': escaped_string[out_posn] = 0x00; /* Null */
|
case '0':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x00; /* Null */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case '^': /* CODE128 specific */
|
case '^': /* CODE128 specific */
|
||||||
@ -738,44 +736,64 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
|
|||||||
return ZINT_ERROR_INVALID_DATA;
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
}
|
}
|
||||||
/* Pass thru unaltered */
|
/* Pass thru unaltered */
|
||||||
|
if (escaped_string) {
|
||||||
escaped_string[out_posn++] = '\\';
|
escaped_string[out_posn++] = '\\';
|
||||||
escaped_string[out_posn] = '^';
|
escaped_string[out_posn] = '^';
|
||||||
|
} else {
|
||||||
|
out_posn++;
|
||||||
|
}
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
if (in_posn < length) { /* Note allowing '\\^' on its own at end */
|
if (in_posn < length) { /* Note allowing '\\^' on its own at end */
|
||||||
|
if (escaped_string) {
|
||||||
escaped_string[++out_posn] = input_string[in_posn++];
|
escaped_string[++out_posn] = input_string[in_posn++];
|
||||||
|
} else {
|
||||||
|
++out_posn;
|
||||||
|
in_posn++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'E': escaped_string[out_posn] = 0x04; /* End of Transmission */
|
case 'E':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x04; /* End of Transmission */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'a': escaped_string[out_posn] = 0x07; /* Bell */
|
case 'a':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x07; /* Bell */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'b': escaped_string[out_posn] = 0x08; /* Backspace */
|
case 'b':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x08; /* Backspace */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 't': escaped_string[out_posn] = 0x09; /* Horizontal tab */
|
case 't':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x09; /* Horizontal tab */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'n': escaped_string[out_posn] = 0x0a; /* Line feed */
|
case 'n':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x0a; /* Line feed */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'v': escaped_string[out_posn] = 0x0b; /* Vertical tab */
|
case 'v':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x0b; /* Vertical tab */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'f': escaped_string[out_posn] = 0x0c; /* Form feed */
|
case 'f':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x0c; /* Form feed */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'r': escaped_string[out_posn] = 0x0d; /* Carriage return */
|
case 'r':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x0d; /* Carriage return */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'e': escaped_string[out_posn] = 0x1b; /* Escape */
|
case 'e':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x1b; /* Escape */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'G': escaped_string[out_posn] = 0x1d; /* Group Separator */
|
case 'G':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x1d; /* Group Separator */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'R': escaped_string[out_posn] = 0x1e; /* Record Separator */
|
case 'R':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = 0x1e; /* Record Separator */
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
@ -784,10 +802,11 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
|
|||||||
if ((val = esc_base(symbol, input_string, length, in_posn + 2, ch)) == -1) {
|
if ((val = esc_base(symbol, input_string, length, in_posn + 2, ch)) == -1) {
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
}
|
}
|
||||||
escaped_string[out_posn] = val;
|
if (escaped_string) escaped_string[out_posn] = val;
|
||||||
in_posn += 4 + (ch != 'x');
|
in_posn += 4 + (ch != 'x');
|
||||||
break;
|
break;
|
||||||
case '\\': escaped_string[out_posn] = '\\';
|
case '\\':
|
||||||
|
if (escaped_string) escaped_string[out_posn] = '\\';
|
||||||
in_posn += 2;
|
in_posn += 2;
|
||||||
break;
|
break;
|
||||||
case 'u':
|
case 'u':
|
||||||
@ -814,46 +833,59 @@ static int escape_char_process(struct zint_symbol *symbol, unsigned char *input_
|
|||||||
sprintf(symbol->errtxt, "246: Invalid value for '\\%c' escape sequence in input data", ch);
|
sprintf(symbol->errtxt, "246: Invalid value for '\\%c' escape sequence in input data", ch);
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
}
|
}
|
||||||
if (unicode >= 0x800) {
|
if (unicode < 0x80) {
|
||||||
if (unicode >= 0x10000) {
|
if (escaped_string) escaped_string[out_posn] = (unsigned char) unicode;
|
||||||
escaped_string[out_posn] = 0xf0 + (unsigned char) (unicode >> 16);
|
} else if (unicode < 0x800) {
|
||||||
|
if (escaped_string) {
|
||||||
|
escaped_string[out_posn++] = (unsigned char) (0xC0 | (unicode >> 6));
|
||||||
|
escaped_string[out_posn] = (unsigned char) (0x80 | (unicode & 0x3F));
|
||||||
|
} else {
|
||||||
out_posn++;
|
out_posn++;
|
||||||
}
|
}
|
||||||
escaped_string[out_posn] = 0xe0 + ((unicode & 0xf000) >> 12);
|
} else if (unicode < 0x10000) {
|
||||||
out_posn++;
|
if (escaped_string) {
|
||||||
escaped_string[out_posn] = 0x80 + ((unicode & 0x0fc0) >> 6);
|
escaped_string[out_posn++] = (unsigned char) (0xE0 | (unicode >> 12));
|
||||||
out_posn++;
|
escaped_string[out_posn++] = (unsigned char) (0x80 | ((unicode >> 6) & 0x3F));
|
||||||
escaped_string[out_posn] = 0x80 + (unicode & 0x003f);
|
escaped_string[out_posn] = (unsigned char) (0x80 | (unicode & 0x3F));
|
||||||
} else if (unicode >= 0x80) {
|
|
||||||
escaped_string[out_posn] = 0xc0 + ((unicode & 0x07c0) >> 6);
|
|
||||||
out_posn++;
|
|
||||||
escaped_string[out_posn] = 0x80 + (unicode & 0x003f);
|
|
||||||
} else {
|
} else {
|
||||||
escaped_string[out_posn] = unicode & 0x7f;
|
out_posn += 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (escaped_string) {
|
||||||
|
escaped_string[out_posn++] = (unsigned char) (0xF0 | (unicode >> 18));
|
||||||
|
escaped_string[out_posn++] = (unsigned char) (0x80 | ((unicode >> 12) & 0x3F));
|
||||||
|
escaped_string[out_posn++] = (unsigned char) (0x80 | ((unicode >> 6) & 0x3F));
|
||||||
|
escaped_string[out_posn] = (unsigned char) (0x80 | (unicode & 0x3F));
|
||||||
|
} else {
|
||||||
|
out_posn += 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
in_posn += 6 + (ch == 'U') * 2;
|
in_posn += 6 + (ch == 'U') * 2;
|
||||||
break;
|
break;
|
||||||
default: sprintf(symbol->errtxt, "234: Unrecognised escape character '\\%c' in input data", ch);
|
default:
|
||||||
|
sprintf(symbol->errtxt, "234: Unrecognised escape character '\\%c' in input data", ch);
|
||||||
return ZINT_ERROR_INVALID_DATA;
|
return ZINT_ERROR_INVALID_DATA;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
escaped_string[out_posn] = input_string[in_posn];
|
if (escaped_string) escaped_string[out_posn] = input_string[in_posn];
|
||||||
in_posn++;
|
in_posn++;
|
||||||
}
|
}
|
||||||
out_posn++;
|
out_posn++;
|
||||||
} while (in_posn < length);
|
} while (in_posn < length);
|
||||||
|
|
||||||
memcpy(input_string, escaped_string, out_posn);
|
if (escaped_string) {
|
||||||
input_string[out_posn] = '\0';
|
escaped_string[out_posn] = '\0';
|
||||||
|
}
|
||||||
*p_length = out_posn;
|
*p_length = out_posn;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ZINT_TEST /* Wrapper for direct testing */
|
#ifdef ZINT_TEST /* Wrapper for direct testing (also used by `testUtilZXingCPPCmp()` in "tests/testcommon.c") */
|
||||||
INTERNAL int escape_char_process_test(struct zint_symbol *symbol, unsigned char *input_string, int *length) {
|
INTERNAL int escape_char_process_test(struct zint_symbol *symbol, unsigned char *input_string, int *p_length,
|
||||||
return escape_char_process(symbol, input_string, length);
|
unsigned char *escaped_string) {
|
||||||
|
return escape_char_process(symbol, input_string, p_length, escaped_string);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -920,11 +952,23 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[
|
|||||||
}
|
}
|
||||||
return error_tag(symbol, ZINT_ERROR_INVALID_DATA, NULL);
|
return error_tag(symbol, ZINT_ERROR_INVALID_DATA, NULL);
|
||||||
}
|
}
|
||||||
|
if (symbol->input_mode & ESCAPE_MODE) { /* Calculate de-escaped length for check against ZINT_MAX_DATA_LEN */
|
||||||
|
int escaped_len = local_segs[i].length;
|
||||||
|
error_number = escape_char_process(symbol, local_segs[i].source, &escaped_len, NULL /*escaped_string*/);
|
||||||
|
if (error_number != 0) { /* Only returns errors, not warnings */
|
||||||
|
return error_tag(symbol, error_number, NULL);
|
||||||
|
}
|
||||||
|
if (escaped_len > ZINT_MAX_DATA_LEN) {
|
||||||
|
return error_tag(symbol, ZINT_ERROR_TOO_LONG, "797: Input data too long");
|
||||||
|
}
|
||||||
|
total_len += escaped_len;
|
||||||
|
} else {
|
||||||
if (local_segs[i].length > ZINT_MAX_DATA_LEN) {
|
if (local_segs[i].length > ZINT_MAX_DATA_LEN) {
|
||||||
return error_tag(symbol, ZINT_ERROR_TOO_LONG, "777: Input data too long");
|
return error_tag(symbol, ZINT_ERROR_TOO_LONG, "777: Input data too long");
|
||||||
}
|
}
|
||||||
total_len += local_segs[i].length;
|
total_len += local_segs[i].length;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (total_len == 0) {
|
if (total_len == 0) {
|
||||||
return error_tag(symbol, ZINT_ERROR_INVALID_DATA, "205: No input data");
|
return error_tag(symbol, ZINT_ERROR_INVALID_DATA, "205: No input data");
|
||||||
@ -1141,29 +1185,32 @@ int ZBarcode_Encode_Segs(struct zint_symbol *symbol, const struct zint_seg segs[
|
|||||||
|
|
||||||
local_sources = (unsigned char *) z_alloca(total_len + seg_count);
|
local_sources = (unsigned char *) z_alloca(total_len + seg_count);
|
||||||
|
|
||||||
|
/* Copy input, de-escaping if required */
|
||||||
for (i = 0, local_source = local_sources; i < seg_count; i++) {
|
for (i = 0, local_source = local_sources; i < seg_count; i++) {
|
||||||
local_segs[i].source = local_source;
|
local_segs[i].source = local_source;
|
||||||
|
if (symbol->input_mode & ESCAPE_MODE) {
|
||||||
|
/* Checked already */
|
||||||
|
(void) escape_char_process(symbol, segs[i].source, &local_segs[i].length, local_segs[i].source);
|
||||||
|
} else {
|
||||||
memcpy(local_segs[i].source, segs[i].source, local_segs[i].length);
|
memcpy(local_segs[i].source, segs[i].source, local_segs[i].length);
|
||||||
local_segs[i].source[local_segs[i].length] = '\0';
|
local_segs[i].source[local_segs[i].length] = '\0';
|
||||||
|
}
|
||||||
local_source += local_segs[i].length + 1;
|
local_source += local_segs[i].length + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start acting on input mode */
|
if ((symbol->input_mode & ESCAPE_MODE) && symbol->primary[0] && strchr(symbol->primary, '\\') != NULL) {
|
||||||
if (symbol->input_mode & ESCAPE_MODE) {
|
char primary[sizeof(symbol->primary)];
|
||||||
for (i = 0; i < seg_count; i++) {
|
|
||||||
error_number = escape_char_process(symbol, local_segs[i].source, &local_segs[i].length);
|
|
||||||
if (error_number != 0) { /* Only returns errors, not warnings */
|
|
||||||
return error_tag(symbol, error_number, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (symbol->primary[0]) {
|
|
||||||
int primary_len = (int) strlen(symbol->primary);
|
int primary_len = (int) strlen(symbol->primary);
|
||||||
error_number = escape_char_process(symbol, (unsigned char *) symbol->primary, &primary_len);
|
if (primary_len >= (int) sizeof(symbol->primary)) {
|
||||||
|
return error_tag(symbol, ZINT_ERROR_INVALID_DATA, "799: Invalid primary string");
|
||||||
|
}
|
||||||
|
ustrcpy(primary, symbol->primary);
|
||||||
|
error_number = escape_char_process(symbol, (unsigned char *) primary, &primary_len,
|
||||||
|
(unsigned char *) symbol->primary);
|
||||||
if (error_number != 0) { /* Only returns errors, not warnings */
|
if (error_number != 0) { /* Only returns errors, not warnings */
|
||||||
return error_tag(symbol, error_number, NULL);
|
return error_tag(symbol, error_number, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((symbol->input_mode & 0x07) == UNICODE_MODE) {
|
if ((symbol->input_mode & 0x07) == UNICODE_MODE) {
|
||||||
/* Only strip BOM on first segment */
|
/* Only strip BOM on first segment */
|
||||||
|
@ -31,6 +31,194 @@
|
|||||||
|
|
||||||
#include "testcommon.h"
|
#include "testcommon.h"
|
||||||
|
|
||||||
|
static void test_large(const testCtx *const p_ctx) {
|
||||||
|
int debug = p_ctx->debug;
|
||||||
|
|
||||||
|
struct item {
|
||||||
|
int symbology;
|
||||||
|
int eci;
|
||||||
|
int option_1;
|
||||||
|
int option_2;
|
||||||
|
int output_options;
|
||||||
|
struct zint_structapp structapp;
|
||||||
|
char *pattern;
|
||||||
|
int length;
|
||||||
|
int ret;
|
||||||
|
int expected_rows;
|
||||||
|
int expected_width;
|
||||||
|
const char *ret_errtxt;
|
||||||
|
};
|
||||||
|
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
|
||||||
|
struct item data[] = {
|
||||||
|
/* 0*/ { BARCODE_AZTEC, -1, 1, -1, -1, { 0, 0, "" }, "\xFF", 2053, 0, 151, 151, "" },
|
||||||
|
/* 1*/ { BARCODE_AZTEC, -1, 1, -1, -1, { 0, 0, "" }, "\xFF", 2054, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 2*/ { BARCODE_AZTEC, -1, 1, -1, -1, { 0, 0, "" }, "\xFF", 2237, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 3*/ { BARCODE_AZTEC, -1, 1, -1, -1, { 0, 0, "" }, "\xFF", 2238, ZINT_ERROR_TOO_LONG, -1, -1, "Error 502: Input too long or too many extended ASCII characters" },
|
||||||
|
/* 4*/ { BARCODE_AZTEC, -1, 2, -1, -1, { 0, 0, "" }, "1", 3835, 0, 151, 151, "" },
|
||||||
|
/* 5*/ { BARCODE_AZTEC, -1, 2, -1, -1, { 0, 0, "" }, "1", 3836, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 6*/ { BARCODE_AZTEC, -1, 2, -1, -1, { 0, 0, "" }, "A", 3069, 0, 151, 151, "" },
|
||||||
|
/* 7*/ { BARCODE_AZTEC, -1, 2, -1, -1, { 0, 0, "" }, "A", 3070, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 8*/ { BARCODE_AZTEC, -1, 2, -1, -1, { 0, 0, "" }, "\xFF", 1756, 0, 151, 151, "" },
|
||||||
|
/* 9*/ { BARCODE_AZTEC, -1, 2, -1, -1, { 0, 0, "" }, "\xFF", 1757, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 10*/ { BARCODE_AZTEC, -1, 3, -1, -1, { 0, 0, "" }, "1", 3184, 0, 151, 151, "" },
|
||||||
|
/* 11*/ { BARCODE_AZTEC, -1, 3, -1, -1, { 0, 0, "" }, "1", 3185, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 12*/ { BARCODE_AZTEC, -1, 3, -1, -1, { 0, 0, "" }, "A", 2548, 0, 151, 151, "" },
|
||||||
|
/* 13*/ { BARCODE_AZTEC, -1, 3, -1, -1, { 0, 0, "" }, "A", 2549, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 14*/ { BARCODE_AZTEC, -1, 3, -1, -1, { 0, 0, "" }, "\xFF", 1457, 0, 151, 151, "" },
|
||||||
|
/* 15*/ { BARCODE_AZTEC, -1, 3, -1, -1, { 0, 0, "" }, "\xFF", 1458, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 16*/ { BARCODE_AZTEC, -1, 4, -1, -1, { 0, 0, "" }, "1", 2485, 0, 151, 151, "" },
|
||||||
|
/* 17*/ { BARCODE_AZTEC, -1, 4, -1, -1, { 0, 0, "" }, "1", 2486, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 18*/ { BARCODE_AZTEC, -1, 4, -1, -1, { 0, 0, "" }, "A", 1989, 0, 151, 151, "" },
|
||||||
|
/* 19*/ { BARCODE_AZTEC, -1, 4, -1, -1, { 0, 0, "" }, "A", 1990, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 20*/ { BARCODE_AZTEC, -1, 4, -1, -1, { 0, 0, "" }, "\xFF", 1137, 0, 151, 151, "" },
|
||||||
|
/* 21*/ { BARCODE_AZTEC, -1, 4, -1, -1, { 0, 0, "" }, "\xFF", 1138, ZINT_ERROR_TOO_LONG, -1, -1, "Error 504: Input too long (too many bits for selected ECC)" },
|
||||||
|
/* 22*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "\xFF", 7, 0, 15, 15, "" },
|
||||||
|
/* 23*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "\xFF", 8, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 24*/ { BARCODE_AZTEC, -1, -1, 1, -1, { 0, 0, "" }, "\xFF", 2078, ZINT_ERROR_TOO_LONG, -1, -1, "Error 704: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 25*/ { BARCODE_AZTEC, -1, -1, 2, -1, { 0, 0, "" }, "\xFF", 22, 0, 19, 19, "" },
|
||||||
|
/* 26*/ { BARCODE_AZTEC, -1, -1, 2, -1, { 0, 0, "" }, "\xFF", 23, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 27*/ { BARCODE_AZTEC, -1, -1, 2, -1, { 0, 0, "" }, "\xFF", 2077, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 28*/ { BARCODE_AZTEC, -1, -1, 2, -1, { 0, 0, "" }, "\xFF", 2078, ZINT_ERROR_TOO_LONG, -1, -1, "Error 704: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 29*/ { BARCODE_AZTEC, -1, -1, 3, -1, { 0, 0, "" }, "\xFF", 39, 0, 23, 23, "" },
|
||||||
|
/* 30*/ { BARCODE_AZTEC, -1, -1, 3, -1, { 0, 0, "" }, "\xFF", 40, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 31*/ { BARCODE_AZTEC, -1, -1, 4, -1, { 0, 0, "" }, "\xFF", 51, 0, 27, 27, "" },
|
||||||
|
/* 32*/ { BARCODE_AZTEC, -1, -1, 4, -1, { 0, 0, "" }, "\xFF", 52, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 33*/ { BARCODE_AZTEC, -1, -1, 5, -1, { 0, 0, "" }, "\xFF", 10, 0, 19, 19, "" },
|
||||||
|
/* 34*/ { BARCODE_AZTEC, -1, -1, 5, -1, { 0, 0, "" }, "\xFF", 11, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 35*/ { BARCODE_AZTEC, -1, -1, 5, -1, { 0, 0, "" }, "\xFF", 2077, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 36*/ { BARCODE_AZTEC, -1, -1, 5, -1, { 0, 0, "" }, "\xFF", 2078, ZINT_ERROR_TOO_LONG, -1, -1, "Error 704: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 37*/ { BARCODE_AZTEC, -1, -1, 6, -1, { 0, 0, "" }, "\xFF", 27, 0, 23, 23, "" },
|
||||||
|
/* 38*/ { BARCODE_AZTEC, -1, -1, 6, -1, { 0, 0, "" }, "\xFF", 28, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 39*/ { BARCODE_AZTEC, -1, -1, 7, -1, { 0, 0, "" }, "\xFF", 47, 0, 27, 27, "" },
|
||||||
|
/* 40*/ { BARCODE_AZTEC, -1, -1, 7, -1, { 0, 0, "" }, "\xFF", 48, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 41*/ { BARCODE_AZTEC, -1, -1, 8, -1, { 0, 0, "" }, "\xFF", 72, 0, 31, 31, "" },
|
||||||
|
/* 42*/ { BARCODE_AZTEC, -1, -1, 8, -1, { 0, 0, "" }, "\xFF", 73, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 43*/ { BARCODE_AZTEC, -1, -1, 9, -1, { 0, 0, "" }, "\xFF", 100, 0, 37, 37, "" },
|
||||||
|
/* 44*/ { BARCODE_AZTEC, -1, -1, 9, -1, { 0, 0, "" }, "\xFF", 101, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 45*/ { BARCODE_AZTEC, -1, -1, 10, -1, { 0, 0, "" }, "\xFF", 131, 0, 41, 41, "" },
|
||||||
|
/* 46*/ { BARCODE_AZTEC, -1, -1, 10, -1, { 0, 0, "" }, "\xFF", 132, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 47*/ { BARCODE_AZTEC, -1, -1, 11, -1, { 0, 0, "" }, "\xFF", 166, 0, 45, 45, "" },
|
||||||
|
/* 48*/ { BARCODE_AZTEC, -1, -1, 11, -1, { 0, 0, "" }, "\xFF", 167, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 49*/ { BARCODE_AZTEC, -1, -1, 12, -1, { 0, 0, "" }, "\xFF", 205, 0, 49, 49, "" },
|
||||||
|
/* 50*/ { BARCODE_AZTEC, -1, -1, 12, -1, { 0, 0, "" }, "\xFF", 206, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 51*/ { BARCODE_AZTEC, -1, -1, 13, -1, { 0, 0, "" }, "\xFF", 253, 0, 53, 53, "" },
|
||||||
|
/* 52*/ { BARCODE_AZTEC, -1, -1, 13, -1, { 0, 0, "" }, "\xFF", 254, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 53*/ { BARCODE_AZTEC, -1, -1, 14, -1, { 0, 0, "" }, "\xFF", 300, 0, 57, 57, "" },
|
||||||
|
/* 54*/ { BARCODE_AZTEC, -1, -1, 14, -1, { 0, 0, "" }, "\xFF", 301, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 55*/ { BARCODE_AZTEC, -1, -1, 15, -1, { 0, 0, "" }, "\xFF", 349, 0, 61, 61, "" },
|
||||||
|
/* 56*/ { BARCODE_AZTEC, -1, -1, 15, -1, { 0, 0, "" }, "\xFF", 350, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 57*/ { BARCODE_AZTEC, -1, -1, 16, -1, { 0, 0, "" }, "\xFF", 403, 0, 67, 67, "" },
|
||||||
|
/* 58*/ { BARCODE_AZTEC, -1, -1, 16, -1, { 0, 0, "" }, "\xFF", 404, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 59*/ { BARCODE_AZTEC, -1, -1, 17, -1, { 0, 0, "" }, "\xFF", 462, 0, 71, 71, "" },
|
||||||
|
/* 60*/ { BARCODE_AZTEC, -1, -1, 17, -1, { 0, 0, "" }, "\xFF", 463, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 61*/ { BARCODE_AZTEC, -1, -1, 18, -1, { 0, 0, "" }, "\xFF", 523, 0, 75, 75, "" },
|
||||||
|
/* 62*/ { BARCODE_AZTEC, -1, -1, 18, -1, { 0, 0, "" }, "\xFF", 524, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 63*/ { BARCODE_AZTEC, -1, -1, 19, -1, { 0, 0, "" }, "\xFF", 588, 0, 79, 79, "" },
|
||||||
|
/* 64*/ { BARCODE_AZTEC, -1, -1, 19, -1, { 0, 0, "" }, "\xFF", 589, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 65*/ { BARCODE_AZTEC, -1, -1, 20, -1, { 0, 0, "" }, "\xFF", 655, 0, 83, 83, "" },
|
||||||
|
/* 66*/ { BARCODE_AZTEC, -1, -1, 20, -1, { 0, 0, "" }, "\xFF", 656, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 67*/ { BARCODE_AZTEC, -1, -1, 21, -1, { 0, 0, "" }, "\xFF", 727, 0, 87, 87, "" },
|
||||||
|
/* 68*/ { BARCODE_AZTEC, -1, -1, 21, -1, { 0, 0, "" }, "\xFF", 728, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 69*/ { BARCODE_AZTEC, -1, -1, 22, -1, { 0, 0, "" }, "\xFF", 804, 0, 91, 91, "" },
|
||||||
|
/* 70*/ { BARCODE_AZTEC, -1, -1, 22, -1, { 0, 0, "" }, "\xFF", 805, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 71*/ { BARCODE_AZTEC, -1, -1, 23, -1, { 0, 0, "" }, "\xFF", 883, 0, 95, 95, "" },
|
||||||
|
/* 72*/ { BARCODE_AZTEC, -1, -1, 23, -1, { 0, 0, "" }, "\xFF", 884, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 73*/ { BARCODE_AZTEC, -1, -1, 24, -1, { 0, 0, "" }, "\xFF", 966, 0, 101, 101, "" },
|
||||||
|
/* 74*/ { BARCODE_AZTEC, -1, -1, 24, -1, { 0, 0, "" }, "\xFF", 967, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 75*/ { BARCODE_AZTEC, -1, -1, 25, -1, { 0, 0, "" }, "\xFF", 1051, 0, 105, 105, "" },
|
||||||
|
/* 76*/ { BARCODE_AZTEC, -1, -1, 25, -1, { 0, 0, "" }, "\xFF", 1052, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 77*/ { BARCODE_AZTEC, -1, -1, 26, -1, { 0, 0, "" }, "\xFF", 1141, 0, 109, 109, "" },
|
||||||
|
/* 78*/ { BARCODE_AZTEC, -1, -1, 26, -1, { 0, 0, "" }, "\xFF", 1142, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 79*/ { BARCODE_AZTEC, -1, -1, 27, -1, { 0, 0, "" }, "\xFF", 1258, 0, 113, 113, "" },
|
||||||
|
/* 80*/ { BARCODE_AZTEC, -1, -1, 27, -1, { 0, 0, "" }, "\xFF", 1259, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 81*/ { BARCODE_AZTEC, -1, -1, 28, -1, { 0, 0, "" }, "\xFF", 1357, 0, 117, 117, "" },
|
||||||
|
/* 82*/ { BARCODE_AZTEC, -1, -1, 28, -1, { 0, 0, "" }, "\xFF", 1358, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 83*/ { BARCODE_AZTEC, -1, -1, 29, -1, { 0, 0, "" }, "\xFF", 1459, 0, 121, 121, "" },
|
||||||
|
/* 84*/ { BARCODE_AZTEC, -1, -1, 29, -1, { 0, 0, "" }, "\xFF", 1460, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 85*/ { BARCODE_AZTEC, -1, -1, 30, -1, { 0, 0, "" }, "\xFF", 1566, 0, 125, 125, "" },
|
||||||
|
/* 86*/ { BARCODE_AZTEC, -1, -1, 30, -1, { 0, 0, "" }, "\xFF", 1567, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 87*/ { BARCODE_AZTEC, -1, -1, 31, -1, { 0, 0, "" }, "\xFF", 1676, 0, 131, 131, "" },
|
||||||
|
/* 88*/ { BARCODE_AZTEC, -1, -1, 31, -1, { 0, 0, "" }, "\xFF", 1677, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 89*/ { BARCODE_AZTEC, -1, -1, 32, -1, { 0, 0, "" }, "\xFF", 1789, 0, 135, 135, "" },
|
||||||
|
/* 90*/ { BARCODE_AZTEC, -1, -1, 32, -1, { 0, 0, "" }, "\xFF", 1790, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 91*/ { BARCODE_AZTEC, -1, -1, 33, -1, { 0, 0, "" }, "\xFF", 1907, 0, 139, 139, "" },
|
||||||
|
/* 92*/ { BARCODE_AZTEC, -1, -1, 33, -1, { 0, 0, "" }, "\xFF", 1908, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 93*/ { BARCODE_AZTEC, -1, -1, 34, -1, { 0, 0, "" }, "\xFF", 2028, 0, 143, 143, "" },
|
||||||
|
/* 94*/ { BARCODE_AZTEC, -1, -1, 34, -1, { 0, 0, "" }, "\xFF", 2029, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 95*/ { BARCODE_AZTEC, -1, -1, 35, -1, { 0, 0, "" }, "\xFF", 2149, 0, 147, 147, "" },
|
||||||
|
/* 96*/ { BARCODE_AZTEC, -1, -1, 35, -1, { 0, 0, "" }, "\xFF", 2150, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/* 97*/ { BARCODE_AZTEC, -1, -1, 36, -1, { 0, 0, "" }, "\xFF", 2237, 0, 151, 151, "" },
|
||||||
|
/* 98*/ { BARCODE_AZTEC, -1, -1, 36, -1, { 0, 0, "" }, "\xFF", 2238, ZINT_ERROR_TOO_LONG, -1, -1, "Error 502: Input too long or too many extended ASCII characters" },
|
||||||
|
/* 99*/ { BARCODE_AZTEC, -1, -1, 34, -1, { 0, 0, "" }, "1", 4429, 0, 143, 143, "" },
|
||||||
|
/*100*/ { BARCODE_AZTEC, -1, -1, 34, -1, { 0, 0, "" }, "1", 4430, ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Data too long for specified Aztec Code symbol size" },
|
||||||
|
/*101*/ { BARCODE_AZTEC, -1, -1, 35, -1, { 0, 0, "" }, "1", 4483, 0, 147, 147, "" },
|
||||||
|
/*102*/ { BARCODE_AZTEC, -1, -1, 35, -1, { 0, 0, "" }, "1", 4484, ZINT_ERROR_TOO_LONG, -1, -1, "Error 502: Input too long or too many extended ASCII characters" },
|
||||||
|
/*103*/ { BARCODE_AZTEC, -1, -1, 36, -1, { 0, 0, "" }, "1", 4483, 0, 151, 151, "" },
|
||||||
|
/*104*/ { BARCODE_AZTEC, -1, -1, 36, -1, { 0, 0, "" }, "1", 4484, ZINT_ERROR_TOO_LONG, -1, -1, "Error 502: Input too long or too many extended ASCII characters" },
|
||||||
|
/*105*/ { BARCODE_AZTEC, 899, -1, 36, -1, { 0, 0, "" }, "\xFF", 2234, 0, 151, 151, "" },
|
||||||
|
/*106*/ { BARCODE_AZTEC, 899, -1, 36, -1, { 0, 0, "" }, "\xFF", 2235, ZINT_ERROR_TOO_LONG, -1, -1, "Error 502: Input too long or too many extended ASCII characters" },
|
||||||
|
/*107*/ { BARCODE_AZTEC, -1, -1, 36, -1, { 2, 3, "1234567890123456789012" }, "\xFF", 2221, 0, 151, 151, "" },
|
||||||
|
/*108*/ { BARCODE_AZTEC, -1, -1, 36, -1, { 2, 3, "1234567890123456789012" }, "\xFF", 2222, ZINT_ERROR_TOO_LONG, -1, -1, "Error 502: Input too long or too many extended ASCII characters" },
|
||||||
|
/*109*/ { BARCODE_AZTEC, 899, -1, 36, -1, { 2, 3, "1234567890123456789012" }, "\xFF", 2218, 0, 151, 151, "" },
|
||||||
|
/*110*/ { BARCODE_AZTEC, 899, -1, 36, -1, { 2, 3, "1234567890123456789012" }, "\xFF", 2219, ZINT_ERROR_TOO_LONG, -1, -1, "Error 502: Input too long or too many extended ASCII characters" },
|
||||||
|
};
|
||||||
|
int data_size = ARRAY_SIZE(data);
|
||||||
|
int i, length, ret;
|
||||||
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
|
char escaped[8192];
|
||||||
|
char cmp_buf[32768];
|
||||||
|
char cmp_msg[8192];
|
||||||
|
|
||||||
|
char data_buf[ZINT_MAX_DATA_LEN];
|
||||||
|
|
||||||
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
|
testStartSymbol("test_large", &symbol);
|
||||||
|
|
||||||
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
|
if (testContinue(p_ctx, i)) continue;
|
||||||
|
|
||||||
|
symbol = ZBarcode_Create();
|
||||||
|
assert_nonnull(symbol, "Symbol not created\n");
|
||||||
|
|
||||||
|
testUtilStrCpyRepeat(data_buf, data[i].pattern, data[i].length);
|
||||||
|
assert_equal(data[i].length, (int) strlen(data_buf), "i:%d length %d != strlen(data_buf) %d\n", i, data[i].length, (int) strlen(data_buf));
|
||||||
|
|
||||||
|
length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, data[i].eci, data[i].option_1, data[i].option_2, -1, data[i].output_options, data_buf, data[i].length, debug);
|
||||||
|
if (data[i].structapp.count) {
|
||||||
|
symbol->structapp = data[i].structapp;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ZBarcode_Encode(symbol, (unsigned char *) data_buf, length);
|
||||||
|
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
||||||
|
|
||||||
|
if (ret < ZINT_ERROR) {
|
||||||
|
assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows);
|
||||||
|
assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width);
|
||||||
|
|
||||||
|
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data_buf, length, debug)) {
|
||||||
|
int cmp_len, ret_len;
|
||||||
|
char modules_dump[22801 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilZXingCPP(i, symbol, data_buf, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data_buf, length, NULL /*primary*/, escaped, &ret_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
assert_zero(strcmp(symbol->errtxt, data[i].ret_errtxt), "i:%d errtxt %s != %s\n", i, symbol->errtxt, data[i].ret_errtxt);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZBarcode_Delete(symbol);
|
||||||
|
}
|
||||||
|
|
||||||
|
testFinish();
|
||||||
|
}
|
||||||
|
|
||||||
static void test_options(const testCtx *const p_ctx) {
|
static void test_options(const testCtx *const p_ctx) {
|
||||||
int debug = p_ctx->debug;
|
int debug = p_ctx->debug;
|
||||||
|
|
||||||
@ -76,9 +264,9 @@ static void test_options(const testCtx *const p_ctx) {
|
|||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
testStart("test_options");
|
testStartSymbol("test_options", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -2390,7 +2578,7 @@ static void test_encode(const testCtx *const p_ctx) {
|
|||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
char escaped[1024];
|
char escaped[1024];
|
||||||
char cmp_buf[32768];
|
char cmp_buf[32768];
|
||||||
@ -2399,7 +2587,7 @@ static void test_encode(const testCtx *const p_ctx) {
|
|||||||
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); /* Only do BWIPP test if asked, too slow otherwise */
|
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); /* Only do BWIPP test if asked, too slow otherwise */
|
||||||
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
testStart("test_encode");
|
testStartSymbol("test_encode", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -2656,7 +2844,7 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
|||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, j, seg_count, ret;
|
int i, j, seg_count, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
char escaped[1024];
|
char escaped[1024];
|
||||||
char cmp_buf[32768];
|
char cmp_buf[32768];
|
||||||
@ -2665,7 +2853,7 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
|||||||
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); /* Only do BWIPP test if asked, too slow otherwise */
|
int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); /* Only do BWIPP test if asked, too slow otherwise */
|
||||||
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
testStart("test_encode_segs");
|
testStartSymbol("test_encode_segs", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -2747,7 +2935,7 @@ static void test_encode_segs(const testCtx *const p_ctx) {
|
|||||||
testFinish();
|
testFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #181 Nico Gunkel OSS-Fuzz */
|
/* #181 Nico Gunkel OSS-Fuzz and #300 Andre Maute */
|
||||||
static void test_fuzz(const testCtx *const p_ctx) {
|
static void test_fuzz(const testCtx *const p_ctx) {
|
||||||
int debug = p_ctx->debug;
|
int debug = p_ctx->debug;
|
||||||
|
|
||||||
@ -2757,6 +2945,7 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
int length;
|
int length;
|
||||||
int input_mode;
|
int input_mode;
|
||||||
int option_1;
|
int option_1;
|
||||||
|
int option_2;
|
||||||
int ret;
|
int ret;
|
||||||
};
|
};
|
||||||
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
|
/* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */
|
||||||
@ -2833,7 +3022,8 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
"\377\377\377\377\377\377\261\261\261\261\261\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\135\135\135\135\135\135"
|
"\377\377\377\377\377\377\261\261\261\261\261\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\135\135\135\135\135\135"
|
||||||
"\135\335\135\060\060\010\010\010\010\010\060",
|
"\135\335\135\060\060\010\010\010\010\010\060",
|
||||||
2251, DATA_MODE, -1, ZINT_ERROR_TOO_LONG }, /* Original OSS-Fuzz triggering data for malloc leak */
|
2251, DATA_MODE, -1, -1, ZINT_ERROR_TOO_LONG
|
||||||
|
}, /* Original OSS-Fuzz triggering data for malloc leak */
|
||||||
/* 1*/ { BARCODE_AZTEC,
|
/* 1*/ { BARCODE_AZTEC,
|
||||||
"\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060"
|
"\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060"
|
||||||
"\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\000\060\060\060\060\000\060\060\000\060\060\060\060"
|
"\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\060\000\060\060\060\060\000\060\060\000\060\060\060\060"
|
||||||
@ -2923,7 +3113,8 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"\060\060\060\363\060\060\060\060\060\060\060\060\060\060\060\060\362\060\060\060\060\060\000\060\060\377\060\060\060\175\175\175"
|
"\060\060\060\363\060\060\060\060\060\060\060\060\060\060\060\060\362\060\060\060\060\060\000\060\060\377\060\060\060\175\175\175"
|
||||||
"\175\060\060\060\175\175\175\175\060\060\005\060\005\060\005\060\060\060\060\000\000\060\060\060\060\060\060\377\060\060\060\060"
|
"\175\060\060\060\175\175\175\175\060\060\005\060\005\060\005\060\060\060\060\000\000\060\060\060\060\060\060\377\060\060\060\060"
|
||||||
"\377\060\377\377\060\060\057\060\060\057\060\060\060\000\000\060\060",
|
"\377\060\377\377\060\060\057\060\060\057\060\060\060\000\000\060\060",
|
||||||
2801, DATA_MODE, -1, ZINT_ERROR_TOO_LONG }, /* Original OSS-Fuzz triggering data for binary_string buffer overrun */
|
2801, DATA_MODE, -1, -1, ZINT_ERROR_TOO_LONG
|
||||||
|
}, /* Original OSS-Fuzz triggering data for binary_string buffer overrun */
|
||||||
/* 2*/ { BARCODE_AZTEC,
|
/* 2*/ { BARCODE_AZTEC,
|
||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
@ -2958,7 +3149,8 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123",
|
"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123",
|
||||||
4483, -1, 1, 0 }, /* 4483 = (1664 (Max codewords) - 169 (ECC codewords) - 2 (overhead)) * 3 (3 4-bit digits per 12-bit wordcode) */
|
4483, -1, 1, -1, 0
|
||||||
|
}, /* 4483 = (1664 (Max codewords) - 169 (ECC codewords) - 5/12 (D/L) - 3/12 (padding)) * 3 (3 4-bit digits per 12-bit wordcode) = 4483 */
|
||||||
/* 3*/ { BARCODE_AZTEC,
|
/* 3*/ { BARCODE_AZTEC,
|
||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
@ -2993,7 +3185,8 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"
|
||||||
"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123",
|
"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123",
|
||||||
4484, -1, 1, ZINT_ERROR_TOO_LONG },
|
4484, -1, 1, -1, ZINT_ERROR_TOO_LONG
|
||||||
|
},
|
||||||
/* 4*/ { BARCODE_AZTEC,
|
/* 4*/ { BARCODE_AZTEC,
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
@ -3023,7 +3216,8 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY",
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY",
|
||||||
3587, -1, 1, 0 },
|
3587, -1, 1, -1, 0
|
||||||
|
},
|
||||||
/* 5*/ { BARCODE_AZTEC,
|
/* 5*/ { BARCODE_AZTEC,
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
@ -3053,7 +3247,8 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||||
3588, -1, 1, ZINT_ERROR_TOO_LONG },
|
3588, -1, 1, -1, ZINT_ERROR_TOO_LONG
|
||||||
|
},
|
||||||
/* 6*/ { BARCODE_AZTEC,
|
/* 6*/ { BARCODE_AZTEC,
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
@ -3106,8 +3301,13 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240",
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
2079, -1, 1, 0 },
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240",
|
||||||
|
2237, -1, 1, -1, 0
|
||||||
|
},
|
||||||
/* 7*/ { BARCODE_AZTEC,
|
/* 7*/ { BARCODE_AZTEC,
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
@ -3160,14 +3360,139 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240",
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
2080, -1, 1, ZINT_ERROR_TOO_LONG },
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240"
|
||||||
|
"\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240\240",
|
||||||
|
2238, -1, 1, -1, ZINT_ERROR_TOO_LONG
|
||||||
|
},
|
||||||
|
/* 8*/ { BARCODE_AZTEC,
|
||||||
|
"\105\105\000\000\000\000\000\000\000\000\077\012\377\377\377\072\376\376\350\350\350\350\350\250\350\350\350\350\354\350\350\350\350\350\001\000\000\000\000\000"
|
||||||
|
"\000\036\103\012\072\103\103\000\100\116\000\000\000\000\000\000\000\000\000\000\002\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\077\012"
|
||||||
|
"\377\377\377\072\376\376\350\350\350\350\350\250\350\350\350\350\354\350\350\350\000\000\000\000\000\000\000\033\000\036\103\012\072\103\103\000\100\116\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\012\000\000\000\000\072\103\103\103\103\012\012\000\365\365\365\365\365\365\374\365\365\365\365\365\000\000\001\000\000\000\000\000\100\377\337\377"
|
||||||
|
"\377\377\377\377\000\000\000\000\372\377\000\100\377\377\350\350\000\000\350\350\350\350\350\350\350\350\001\000\000\000\000\000\000\036\103\012\072\103\365\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\377\377\377\350\350\350\350\350\350\350\350\350\350\350\350\350\350\061\350\350\350\350\354\350\350\350\350\350\001\000\000\000"
|
||||||
|
"\000\000\000\036\103\012\072\103\103\000\100\116\000\000\000\000\000\000\000\000\000\000\000\216\000\000\000\000\000\000\000\377\377\377\377\377\377\377\000\000"
|
||||||
|
"\377\365\374\365\365\365\365\001\236\365\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\064\064\064\064\064\064\064\064\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153"
|
||||||
|
"\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\064\064\064\064\064\064\064\064\064\064\044\064\064\064\064\064\064\064\064\064"
|
||||||
|
"\064\064\064\064\064\064\064\064\064\064\064\064\064\064\064\064\064\264\264\362\362\362\362\242\242\242\242\242\242\242\242\242\242\242\242\242\242\242\242\242"
|
||||||
|
"\242\242\242\242\242\242\242\242\242\242\242\242\242\103\000\100\116\000\000\000\000\000\000\000\000\000\000\000\222\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\072\103\103\103\103\012\012\000\365\365\365\365\365"
|
||||||
|
"\365\374\365\365\365\365\365\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\100\377\377\377\377\377\377\377\000\000\000\000"
|
||||||
|
"\000\000\000\100\377\377\350\350\000\000\350\350\350\350\350\350\350\350\001\000\000\000\000\000\000\036\103\012\072\103\365\000\000\000\000\000\000\000\266\266"
|
||||||
|
"\266\266\112\000\000\000\266\266\266\266\266\266\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\077\012\377"
|
||||||
|
"\377\377\072\376\376\350\350\350\350\350\000\000\000\000\001\000\000\000\350\350\350\001\000\000\000\000\000\000\036\103\012\072\103\103\000\100\116\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\222\000\000\000\000\000\000\000\000\000\000\025\000\000\000\000\001\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\012\000\000\000\000\072\103\103\103\103\012\012\000\365\365\365\365\365\365\374\365\365\365\365\365\000\000\000\311\000\000\000\000\100\377\337\377\377"
|
||||||
|
"\377\377\377\000\000\000\000\000\000\000\100\377\377\350\353\000\000\350\150\350\350\350\350\350\350\001\000\000\000\000\000\000\036\103\012\072\103\365\000\000"
|
||||||
|
"\000\000\000\000\000\047\000\377\377\377\350\350\350\350\350\350\350\350\350\350\350\350\350\350\254\350\350\350\350\354\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\350\350\350\350\350\001\000\000\127\000\000\000\036\103"
|
||||||
|
"\012\072\103\103\000\100\116\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\050\050\050\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\266"
|
||||||
|
"\266\266\266\266\266\377\377\377\377\377\013\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\005\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\266\266\266\266\266\266\266\266\266\266\377\377\377\377\377\377\377\377\377\377\377\377\044"
|
||||||
|
"\377\377\377\377\377\377\050\064\064\064\000\000\000\000\072\376\376\350\350\350\350\350\350\377\377\377\377\377\377\377\377\377\377\377\377\377\005\377\377\377"
|
||||||
|
"\377\350\350\350\350\350\350\350\310\350\350\001\000\000\000\000\000\000\036\103\012\072\103\103\000\000\000\000\000\000\000\000\000\000\000\000\000\000\266\266"
|
||||||
|
"\266\266\266\266\377\377\377\377\377\013\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\005\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\172\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\266\266\266\266\266\266\266\266\266\266\377\377\377\377\377\377\377\377\377\377\377\377\044\377"
|
||||||
|
"\377\377\377\377\377\050\064\064\064\000\000\000\000\072\376\376\350\350\350\350\350\350\377\377\377\377\377\377\377\377\377\377\377\377\377\005\377\377\377\377"
|
||||||
|
"\350\350\350\350\350\350\350\310\350\350\001\000\000\000\000\000\000\036\103\012\072\103\103\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\310\000\064\064\064\064\064\064\064\064\064\064\064\064\064\064\073\064\064\064\064"
|
||||||
|
"\064\064\064\064\064\064\064\064\000\377\365\374\365\365\365\365\001\236\365\000\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\064\064\064\064\064\064\064\064\153\153\153\153\153"
|
||||||
|
"\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\153\337\266\266\266\000"
|
||||||
|
"\000\000\000\000\000\000\377\377\377\377\377\000\000\000\000\000\000\000\100\377\377\350\350\000\000\350\350\350\350\350\350\350\350\001\000\000\000\000\000\000"
|
||||||
|
"\036\103\012\072\103\365\000\000\000\000\000\000\000\000\000\377\377\377\350\350\350\350\350\350\350\350\350\350\350\350\350\350\254\350\350\350\350\354\350\350"
|
||||||
|
"\350\350\350\001\000\000\000\000\000\000\036\103\012\072\103\103\000\100\116\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\050\000\050\050\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
|
"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\000\177\377\377\377"
|
||||||
|
"\046\000\000\000\000\000\000\027\027\027\027\027\027\027\027\027\027\027\027\000\027\027\027\027\000\004\000\000\000\000\000\135\000\044\103\000\000\377\377\377"
|
||||||
|
"\377\377\103\377\364\377\364",
|
||||||
|
2167, DATA_MODE, -1, 1, ZINT_ERROR_TOO_LONG
|
||||||
|
}, /* #300 (#2) Andre Maute */
|
||||||
|
/* 9*/ { BARCODE_AZTEC,
|
||||||
|
"111\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||||
|
"111",
|
||||||
|
2054, DATA_MODE, 1, -1, 0
|
||||||
|
}, /* 2048 byte block surrounded by digits */
|
||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
testStart("test_fuzz");
|
char escaped[8192];
|
||||||
|
char cmp_buf[32768];
|
||||||
|
char cmp_msg[8192];
|
||||||
|
|
||||||
|
int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); /* Only do ZXing-C++ test if asked, too slow otherwise */
|
||||||
|
|
||||||
|
testStartSymbol("test_fuzz", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -3176,11 +3501,26 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
symbol = ZBarcode_Create();
|
symbol = ZBarcode_Create();
|
||||||
assert_nonnull(symbol, "Symbol not created\n");
|
assert_nonnull(symbol, "Symbol not created\n");
|
||||||
|
|
||||||
length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug);
|
length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, data[i].option_1, data[i].option_2, -1, -1 /*output_options*/, data[i].data, data[i].length, debug);
|
||||||
|
|
||||||
ret = ZBarcode_Encode(symbol, (unsigned char *) data[i].data, length);
|
ret = ZBarcode_Encode(symbol, (unsigned char *) 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);
|
assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt);
|
||||||
|
|
||||||
|
if (ret < ZINT_ERROR) {
|
||||||
|
|
||||||
|
if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) {
|
||||||
|
int cmp_len, ret_len;
|
||||||
|
char modules_dump[22801 + 1];
|
||||||
|
assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i);
|
||||||
|
ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, cmp_buf, sizeof(cmp_buf), &cmp_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret);
|
||||||
|
|
||||||
|
ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, escaped, &ret_len);
|
||||||
|
assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n",
|
||||||
|
i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, escaped);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ZBarcode_Delete(symbol);
|
ZBarcode_Delete(symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3299,6 +3639,7 @@ static void test_perf(const testCtx *const p_ctx) {
|
|||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
testFunction funcs[] = { /* name, func */
|
testFunction funcs[] = { /* name, func */
|
||||||
|
{ "test_large", test_large },
|
||||||
{ "test_options", test_options },
|
{ "test_options", test_options },
|
||||||
{ "test_encode", test_encode },
|
{ "test_encode", test_encode },
|
||||||
{ "test_encode_segs", test_encode_segs },
|
{ "test_encode_segs", test_encode_segs },
|
||||||
|
@ -216,9 +216,9 @@ static void test_checks(const testCtx *const p_ctx) {
|
|||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
testStart("test_checks");
|
testStartSymbol("test_checks", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -296,22 +296,22 @@ static void test_checks_segs(const testCtx *const p_ctx) {
|
|||||||
/* 2*/ { BARCODE_CODE128, -1, { { NULL, 0, 0 }, { NULL, 0, 0 } }, 1, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 772: Input segment 0 source NULL" },
|
/* 2*/ { BARCODE_CODE128, -1, { { NULL, 0, 0 }, { NULL, 0, 0 } }, 1, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 772: Input segment 0 source NULL" },
|
||||||
/* 3*/ { BARCODE_CODE128, -1, { { TU(""), 0, 0 }, { NULL, 0, 0 } }, 1, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 778: No input data" },
|
/* 3*/ { BARCODE_CODE128, -1, { { TU(""), 0, 0 }, { NULL, 0, 0 } }, 1, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 778: No input data" },
|
||||||
/* 4*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 0 }, { NULL, 0, 0 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 772: Input segment 1 source NULL" },
|
/* 4*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 0 }, { NULL, 0, 0 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 772: Input segment 1 source NULL" },
|
||||||
/* 4*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 0 }, { TU(""), 0, 0 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 773: Input segment 1 empty" },
|
/* 5*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 0 }, { TU(""), 0, 0 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 773: Input segment 1 empty" },
|
||||||
/* 5*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 0 } }, 2, -1, 4, -1, ZINT_ERROR_INVALID_OPTION, "Error 774: Symbol ECI 4 must match segment zero ECI 3" },
|
/* 6*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 0 } }, 2, -1, 4, -1, ZINT_ERROR_INVALID_OPTION, "Error 774: Symbol ECI 4 must match segment zero ECI 3" },
|
||||||
/* 6*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 775: Symbology does not support multiple segments" },
|
/* 7*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 775: Symbology does not support multiple segments" },
|
||||||
/* 7*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 3 }, { NULL, 0, 0 } }, 1, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 217: Symbology does not support ECI switching" },
|
/* 8*/ { BARCODE_CODE128, -1, { { TU("A"), 0, 3 }, { NULL, 0, 0 } }, 1, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 217: Symbology does not support ECI switching" },
|
||||||
/* 8*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 1 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 218: Invalid ECI code 1" },
|
/* 9*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 1 } }, 2, -1, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 218: Invalid ECI code 1" },
|
||||||
/* 9*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, GS1_MODE, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 776: GS1 mode not supported for multiple segments" },
|
/* 10*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, GS1_MODE, -1, -1, ZINT_ERROR_INVALID_OPTION, "Error 776: GS1 mode not supported for multiple segments" },
|
||||||
/* 10*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("\200"), 0, 4 } }, 2, UNICODE_MODE, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 245: Invalid UTF-8 in input data" },
|
/* 11*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("\200"), 0, 4 } }, 2, UNICODE_MODE, -1, -1, ZINT_ERROR_INVALID_DATA, "Error 245: Invalid UTF-8 in input data" },
|
||||||
/* 11*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, -1, -1, -1, 0, "" },
|
/* 12*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 3 }, { TU("B"), 0, 4 } }, 2, -1, -1, -1, 0, "" },
|
||||||
/* 12*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 0 }, { TU("B"), 0, 4 } }, 2, -1, 3, -1, 0, "" },
|
/* 13*/ { BARCODE_AZTEC, -1, { { TU("A"), 0, 0 }, { TU("B"), 0, 4 } }, 2, -1, 3, -1, 0, "" },
|
||||||
/* 13*/ { BARCODE_AZTEC, -1, { { TU("A"), ZINT_MAX_DATA_LEN, 3 }, { TU("B"), 1, 4 } }, 2, -1, -1, -1, ZINT_ERROR_TOO_LONG, "Error 243: Input data too long" },
|
/* 14*/ { BARCODE_AZTEC, -1, { { TU("A"), ZINT_MAX_DATA_LEN, 3 }, { TU("B"), 1, 4 } }, 2, -1, -1, -1, ZINT_ERROR_TOO_LONG, "Error 243: Input data too long" },
|
||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, ret;
|
int i, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
testStart("test_checks_segs");
|
testStartSymbol("test_checks_segs", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -362,11 +362,11 @@ static void test_input_data(const testCtx *const p_ctx) {
|
|||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
char *text;
|
char *text;
|
||||||
|
|
||||||
testStart("test_input_data");
|
testStartSymbol("test_input_data", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -438,9 +438,9 @@ static void test_input_mode(const testCtx *const p_ctx) {
|
|||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
testStart("test_input_mode");
|
testStartSymbol("test_input_mode", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -546,12 +546,12 @@ static void test_escape_char_process(const testCtx *const p_ctx) {
|
|||||||
/* 66*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U000F", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\U' escape sequence in input data", 0, "" },
|
/* 66*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U000F", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\U' escape sequence in input data", 0, "" },
|
||||||
/* 67*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U0000F", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\U' escape sequence in input data", 0, "" },
|
/* 67*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U0000F", "", ZINT_ERROR_INVALID_DATA, 0, "Error 209: Incomplete '\\U' escape sequence in input data", 0, "" },
|
||||||
/* 68*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U110000", "", ZINT_ERROR_INVALID_DATA, 0, "Error 246: Invalid value for '\\U' escape sequence in input data", 0, "" },
|
/* 68*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\U110000", "", ZINT_ERROR_INVALID_DATA, 0, "Error 246: Invalid value for '\\U' escape sequence in input data", 0, "" },
|
||||||
/* 69*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, "\\U10FFFF", "", 0, 14, "F1 1A 01 01 EB 80 EB 80 3F C0 9C 0B 4B B8 DA B7 B6 1A", 0, "" },
|
/* 69*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 25, "\\U10FFFF", "", 0, 14, "F1 1A E7 57 C7 81 F7 AC 09 06 28 51 F3 00 E1 8C 2A 1C", 0, "" },
|
||||||
/* 70*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, "\\U10FFFF", "", 0, 14, "F1 1B 01 E7 EC 71 D7 6C 20 D6 B3 63 E2 18 B6 4C 7D 3E", 0, "" },
|
/* 70*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, "\\U10FFFF", "", 0, 14, "F1 1B E7 57 E0 11 D7 6C 4F 45 E2 B3 FF F1 72 AB 54 9F", 0, "" },
|
||||||
/* 71*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, "\\U10FFFF", "", 0, 32, "F1 21 01 EB 05 32 EB 25 3A 81 7E 98 9B 50 AC 1C E0 4E 51 BA 23", 0, "" },
|
/* 71*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 32, "\\U10FFFF", "", 0, 14, "F1 21 EB 64 33 EB 1B 36 1D F7 B1 6D 8C A6 34 64 19 3A", 0, "" },
|
||||||
/* 72*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, "\\U10FFFF", "", 0, 14, "F1 22 01 01 EB 80 EB 80 A3 E5 BE FB 1A 08 94 2E C3 74", 0, "" },
|
/* 72*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 33, "\\U10FFFF", "", 0, 14, "F1 22 E7 57 EB 5D 17 8C C1 B0 B6 B2 53 78 E4 7D 61 CB", 0, "" },
|
||||||
/* 73*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, "\\U10FFFF", "", 0, 16, "F1 23 01 01 01 01 01 01 EB 80 EB 80 F6 F1 5D 2A D1 0A BF BC B8 22 65 0C", 0, "" },
|
/* 73*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 34, "\\U10FFFF", "", 0, 14, "F1 23 01 11 EB 80 EB 80 90 33 51 1B FA AE 78 F7 05 44", 0, "" },
|
||||||
/* 74*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, "\\U10FFFF", "", 0, 16, "F1 24 01 01 01 01 EB 80 EB 80 01 01 7F 58 28 41 7F 63 0E EB A7 D8 D0 1F", 0, "" },
|
/* 74*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, "\\U10FFFF", "", 0, 14, "F1 24 EB 80 EB 80 11 01 17 BA C6 05 9F 4C EA E5 18 31", 0, "" },
|
||||||
/* 75*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[20]10", "[10]A", 0, 99, "(7) 105 102 20 10 100 59 106", 0, "" },
|
/* 75*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[20]10", "[10]A", 0, 99, "(7) 105 102 20 10 100 59 106", 0, "" },
|
||||||
/* 76*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[2\\x30]1\\d048", "[\\x310]\\x41", 0, 99, "(7) 105 102 20 10 100 59 106", 1, "" },
|
/* 76*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[2\\x30]1\\d048", "[\\x310]\\x41", 0, 99, "(7) 105 102 20 10 100 59 106", 1, "" },
|
||||||
/* 77*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid for Code 128 in extra escape mode", 0, "" },
|
/* 77*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid for Code 128 in extra escape mode", 0, "" },
|
||||||
@ -561,7 +561,7 @@ static void test_escape_char_process(const testCtx *const p_ctx) {
|
|||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
struct zint_symbol *symbol;
|
struct zint_symbol *symbol = NULL;
|
||||||
|
|
||||||
char escaped[1024];
|
char escaped[1024];
|
||||||
char escaped_composite[1024];
|
char escaped_composite[1024];
|
||||||
@ -570,7 +570,7 @@ static void test_escape_char_process(const testCtx *const p_ctx) {
|
|||||||
|
|
||||||
char *text;
|
char *text;
|
||||||
|
|
||||||
testStart("test_escape_char_process");
|
testStartSymbol("test_escape_char_process", &symbol);
|
||||||
|
|
||||||
for (i = 0; i < data_size; i++) {
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
@ -647,6 +647,63 @@ static void test_escape_char_process(const testCtx *const p_ctx) {
|
|||||||
testFinish();
|
testFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INTERNAL int escape_char_process_test(struct zint_symbol *symbol, unsigned char *input_string, int *p_length,
|
||||||
|
unsigned char *escaped_string);
|
||||||
|
|
||||||
|
static void test_escape_char_process_test(const testCtx *const p_ctx) {
|
||||||
|
|
||||||
|
struct item {
|
||||||
|
int symbology;
|
||||||
|
int input_mode;
|
||||||
|
char *data;
|
||||||
|
int ret;
|
||||||
|
char *expected;
|
||||||
|
int expected_len;
|
||||||
|
};
|
||||||
|
struct item data[] = {
|
||||||
|
/* 0*/ { 0, 0, "BLANK", 0, "BLANK", 5 },
|
||||||
|
/* 1*/ { 0, 0, "\\0\\E\\a\\b\\t\\n\\v\\f\\r\\e\\G\\R\\x81\\\\\\o201\\d255", 0, "\000\004\a\b\t\n\v\f\r\033\035\036\201\\\201\377", 16 },
|
||||||
|
/* 2*/ { 0, 0, "\\U010283", 0, "\360\220\212\203", 4 },
|
||||||
|
/* 3*/ { 0, 0, "\\u007F\\u0080\\u011E\\u13C9\\U010283", 0, "\177\302\200\304\236\341\217\211\360\220\212\203", 12 },
|
||||||
|
/* 4*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, "\\^A\\^^\\^B", 0, "\\^A\\^^\\^B", 9 },
|
||||||
|
};
|
||||||
|
int data_size = ARRAY_SIZE(data);
|
||||||
|
int i, length, ret;
|
||||||
|
|
||||||
|
|
||||||
|
testStart("test_escape_char_process_test");
|
||||||
|
|
||||||
|
for (i = 0; i < data_size; i++) {
|
||||||
|
|
||||||
|
struct zint_symbol symbol = {0};
|
||||||
|
int escaped_len;
|
||||||
|
char escaped[1024];
|
||||||
|
|
||||||
|
if (testContinue(p_ctx, i)) continue;
|
||||||
|
|
||||||
|
symbol.symbology = data[i].symbology;
|
||||||
|
symbol.input_mode = data[i].input_mode;
|
||||||
|
length = strlen(data[i].data);
|
||||||
|
|
||||||
|
escaped_len = length;
|
||||||
|
ret = escape_char_process_test(&symbol, (unsigned char *) data[i].data, &escaped_len, NULL);
|
||||||
|
assert_equal(ret, data[i].ret, "i:%d escape_char_process_test(NULL) ret %d != %d (%s)\n", i, ret, data[i].ret, symbol.errtxt);
|
||||||
|
assert_equal(escaped_len, data[i].expected_len, "i:%d NULL escaped_len %d != %d\n", i, escaped_len, data[i].expected_len);
|
||||||
|
|
||||||
|
memset(escaped, 0xDD, sizeof(escaped));
|
||||||
|
|
||||||
|
escaped_len = length;
|
||||||
|
ret = escape_char_process_test(&symbol, (unsigned char *) data[i].data, &escaped_len, (unsigned char *) escaped);
|
||||||
|
assert_equal(ret, data[i].ret, "i:%d escape_char_process_test(escaped) ret %d != %d (%s)\n", i, ret, data[i].ret, symbol.errtxt);
|
||||||
|
assert_equal(escaped_len, data[i].expected_len, "i:%d escaped escaped_len %d != %d\n", i, escaped_len, data[i].expected_len);
|
||||||
|
|
||||||
|
assert_zero(memcmp(escaped, data[i].expected, escaped_len), "i:%d memcmp() != 0\n", i);
|
||||||
|
assert_zero(escaped[escaped_len], "i:%d escaped[%d] not NUL-terminated (0x%X)\n", i, escaped_len, escaped[escaped_len]);
|
||||||
|
}
|
||||||
|
|
||||||
|
testFinish();
|
||||||
|
}
|
||||||
|
|
||||||
static void test_cap(const testCtx *const p_ctx) {
|
static void test_cap(const testCtx *const p_ctx) {
|
||||||
|
|
||||||
struct item {
|
struct item {
|
||||||
@ -1593,6 +1650,7 @@ int main(int argc, char *argv[]) {
|
|||||||
{ "test_symbologies", test_symbologies },
|
{ "test_symbologies", test_symbologies },
|
||||||
{ "test_input_mode", test_input_mode },
|
{ "test_input_mode", test_input_mode },
|
||||||
{ "test_escape_char_process", test_escape_char_process },
|
{ "test_escape_char_process", test_escape_char_process },
|
||||||
|
{ "test_escape_char_process_test", test_escape_char_process_test },
|
||||||
{ "test_cap", test_cap },
|
{ "test_cap", test_cap },
|
||||||
{ "test_cap_compliant_height", test_cap_compliant_height },
|
{ "test_cap_compliant_height", test_cap_compliant_height },
|
||||||
{ "test_encode_file_empty", test_encode_file_empty },
|
{ "test_encode_file_empty", test_encode_file_empty },
|
||||||
|
@ -5324,7 +5324,7 @@ static void test_fuzz(const testCtx *const p_ctx) {
|
|||||||
"\101\000\000\000\000\374\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\323\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
"\101\000\000\000\000\374\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\323\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
"\000\000\000\000\000\000\000\000\323\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
"\000\000\000\000\000\000\000\000\323\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
|
||||||
"\000\000\000\000\000\000\000\000",
|
"\000\000\000\000\000\000\000\000",
|
||||||
1048, 0, 0 }, /* #300 Andre Maute */
|
1048, 0, 0 }, /* #300 (#1) Andre Maute */
|
||||||
};
|
};
|
||||||
int data_size = ARRAY_SIZE(data);
|
int data_size = ARRAY_SIZE(data);
|
||||||
int i, length, ret;
|
int i, length, ret;
|
||||||
|
@ -3802,7 +3802,8 @@ int testUtilZXingCPP(int index, struct zint_symbol *symbol, const char *source,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
INTERNAL int escape_char_process_test(struct zint_symbol *symbol, unsigned char *input_string, int *length);
|
INTERNAL int escape_char_process_test(struct zint_symbol *symbol, unsigned char *input_string, int *length,
|
||||||
|
unsigned char *escaped_string);
|
||||||
|
|
||||||
#include "../gs1.h"
|
#include "../gs1.h"
|
||||||
|
|
||||||
@ -3850,13 +3851,15 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_escaped) {
|
if (is_escaped) {
|
||||||
memcpy(escaped, expected, expected_len);
|
|
||||||
if (symbol->input_mode & ESCAPE_MODE) {
|
if (symbol->input_mode & ESCAPE_MODE) {
|
||||||
ret = escape_char_process_test(symbol, (unsigned char *) escaped, &expected_len);
|
ret = escape_char_process_test(symbol, (unsigned char *) expected, &expected_len,
|
||||||
|
(unsigned char *) escaped);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
sprintf(msg, "escape_char_process %d != 0", ret);
|
sprintf(msg, "escape_char_process %d != 0", ret);
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
memcpy(escaped, expected, expected_len);
|
||||||
}
|
}
|
||||||
if (is_extra_escaped) {
|
if (is_extra_escaped) {
|
||||||
/* Remove any Code 128 special escapes */
|
/* Remove any Code 128 special escapes */
|
||||||
|
@ -14,8 +14,10 @@ function run_zxingcpp_test() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_zxingcpp_test "test_2of5" "encode"
|
run_zxingcpp_test "test_2of5" "encode"
|
||||||
|
run_zxingcpp_test "test_aztec" "large"
|
||||||
run_zxingcpp_test "test_aztec" "encode"
|
run_zxingcpp_test "test_aztec" "encode"
|
||||||
run_zxingcpp_test "test_aztec" "encode_segs"
|
run_zxingcpp_test "test_aztec" "encode_segs"
|
||||||
|
run_zxingcpp_test "test_aztec" "fuzz"
|
||||||
run_zxingcpp_test "test_codablock" "input"
|
run_zxingcpp_test "test_codablock" "input"
|
||||||
run_zxingcpp_test "test_codablock" "encode"
|
run_zxingcpp_test "test_codablock" "encode"
|
||||||
run_zxingcpp_test "test_code" "encode"
|
run_zxingcpp_test "test_code" "encode"
|
||||||
|
Loading…
Reference in New Issue
Block a user