main.c: do validator() before atoi()s if not already; primary strlen max 90 -> 127

This commit is contained in:
gitlost 2020-06-23 23:35:33 +01:00
parent d0e2c5928a
commit 9768cd004a

View File

@ -111,7 +111,7 @@ static void usage(void) {
" -o, --output=FILE Send output to FILE. Default is out.png\n" " -o, --output=FILE Send output to FILE. Default is out.png\n"
" --primary=STRING Set structured primary message (Maxicode/Composite)\n" " --primary=STRING Set structured primary message (Maxicode/Composite)\n"
" --scale=NUMBER Adjust size of X-dimension\n" " --scale=NUMBER Adjust size of X-dimension\n"
" --secure=NUMBER Set error correction level\n" " --secure=NUMBER Set error correction level (ECC)\n"
" --separator=NUMBER Set height of row separator bars (stacked symbologies)\n" " --separator=NUMBER Set height of row separator bars (stacked symbologies)\n"
" --small Use small text\n" " --small Use small text\n"
" --square Force Data Matrix symbols to be square\n" " --square Force Data Matrix symbols to be square\n"
@ -603,7 +603,7 @@ int main(int argc, char **argv) {
if (!strcmp(long_options[option_index].name, "border")) { if (!strcmp(long_options[option_index].name, "border")) {
error_number = validator(NESET, optarg); error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) { if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 107: Invalid border width\n"); fprintf(stderr, "Error 107: Invalid border width value\n");
exit(1); exit(1);
} }
if ((atoi(optarg) >= 0) && (atoi(optarg) <= 1000)) { if ((atoi(optarg) >= 0) && (atoi(optarg) <= 1000)) {
@ -616,7 +616,7 @@ int main(int argc, char **argv) {
if (!strcmp(long_options[option_index].name, "height")) { if (!strcmp(long_options[option_index].name, "height")) {
error_number = validator(NESET, optarg); error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) { if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 109: Invalid symbol height\n"); fprintf(stderr, "Error 109: Invalid symbol height value\n");
exit(1); exit(1);
} }
if ((atoi(optarg) >= 1) && (atoi(optarg) <= 1000)) { if ((atoi(optarg) >= 1) && (atoi(optarg) <= 1000)) {
@ -628,6 +628,11 @@ int main(int argc, char **argv) {
} }
if (!strcmp(long_options[option_index].name, "cols")) { if (!strcmp(long_options[option_index].name, "cols")) {
error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 131: Invalid columns value\n");
exit(1);
}
if ((atoi(optarg) >= 1) && (atoi(optarg) <= 67)) { if ((atoi(optarg) >= 1) && (atoi(optarg) <= 67)) {
my_symbol->option_2 = atoi(optarg); my_symbol->option_2 = atoi(optarg);
} else { } else {
@ -636,6 +641,11 @@ int main(int argc, char **argv) {
} }
} }
if (!strcmp(long_options[option_index].name, "rows")) { if (!strcmp(long_options[option_index].name, "rows")) {
error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 132: Invalid rows value\n");
exit(1);
}
if ((atoi(optarg) >= 1) && (atoi(optarg) <= 44)) { if ((atoi(optarg) >= 1) && (atoi(optarg) <= 44)) {
my_symbol->option_1 = atoi(optarg); my_symbol->option_1 = atoi(optarg);
} else { } else {
@ -644,14 +654,24 @@ int main(int argc, char **argv) {
} }
} }
if (!strcmp(long_options[option_index].name, "vers")) { if (!strcmp(long_options[option_index].name, "vers")) {
error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 133: Invalid version value\n");
exit(1);
}
if ((atoi(optarg) >= 1) && (atoi(optarg) <= 84)) { if ((atoi(optarg) >= 1) && (atoi(optarg) <= 84)) {
my_symbol->option_2 = atoi(optarg); my_symbol->option_2 = atoi(optarg);
} else { } else {
fprintf(stderr, "Warning 113: Invalid Version\n"); fprintf(stderr, "Warning 113: Invalid version\n");
fflush(stderr); fflush(stderr);
} }
} }
if (!strcmp(long_options[option_index].name, "secure")) { if (!strcmp(long_options[option_index].name, "secure")) {
error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 134: Invalid ECC value\n");
exit(1);
}
if ((atoi(optarg) >= 0) && (atoi(optarg) <= 8)) { if ((atoi(optarg) >= 0) && (atoi(optarg) <= 8)) {
my_symbol->option_1 = atoi(optarg); my_symbol->option_1 = atoi(optarg);
} else { } else {
@ -660,16 +680,21 @@ int main(int argc, char **argv) {
} }
} }
if (!strcmp(long_options[option_index].name, "primary")) { if (!strcmp(long_options[option_index].name, "primary")) {
if (strlen(optarg) <= 90) { if (strlen(optarg) <= 127) {
strcpy(my_symbol->primary, optarg); strcpy(my_symbol->primary, optarg);
} else { } else {
fprintf(stderr, "Error 115: Primary data string too long"); fprintf(stderr, "Error 115: Primary data string too long\n");
fflush(stderr); fflush(stderr);
} }
} }
if (!strcmp(long_options[option_index].name, "mode")) { if (!strcmp(long_options[option_index].name, "mode")) {
if ((optarg[0] >= '0') && (optarg[0] <= '6')) { error_number = validator(NESET, optarg);
my_symbol->option_1 = optarg[0] - '0'; if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 136: Invalid mode value\n");
exit(1);
}
if ((atoi(optarg) >= 0) && (atoi(optarg) <= 6)) {
my_symbol->option_1 = atoi(optarg);
} else { } else {
fprintf(stderr, "Warning 116: Invalid mode\n"); fprintf(stderr, "Warning 116: Invalid mode\n");
fflush(stderr); fflush(stderr);
@ -679,7 +704,7 @@ int main(int argc, char **argv) {
/* Only certain inputs allowed */ /* Only certain inputs allowed */
error_number = validator(NESET, optarg); error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) { if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 117: Invalid rotation parameter\n"); fprintf(stderr, "Error 117: Invalid rotation value\n");
exit(1); exit(1);
} }
switch (atoi(optarg)) { switch (atoi(optarg)) {
@ -689,7 +714,11 @@ int main(int argc, char **argv) {
break; break;
case 270: rotate_angle = 270; case 270: rotate_angle = 270;
break; break;
default: rotate_angle = 0; case 0: rotate_angle = 0;
break;
default:
fprintf(stderr, "Warning 137: Invalid rotation parameter\n");
fflush(stderr);
break; break;
} }
} }
@ -706,6 +735,11 @@ int main(int argc, char **argv) {
strncpy(filetype, optarg, (size_t) 3); strncpy(filetype, optarg, (size_t) 3);
} }
if (!strcmp(long_options[option_index].name, "eci")) { if (!strcmp(long_options[option_index].name, "eci")) {
error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 138: Invalid ECI value\n");
exit(1);
}
if ((atoi(optarg) >= 0) && (atoi(optarg) <= 999999)) { if ((atoi(optarg) >= 0) && (atoi(optarg) <= 999999)) {
my_symbol->eci = atoi(optarg); my_symbol->eci = atoi(optarg);
} else { } else {
@ -722,6 +756,11 @@ int main(int argc, char **argv) {
my_symbol->debug = 1; my_symbol->debug = 1;
} }
if (!strcmp(long_options[option_index].name, "fontsize")) { if (!strcmp(long_options[option_index].name, "fontsize")) {
error_number = validator(NESET, optarg);
if (error_number == ZINT_ERROR_INVALID_DATA) {
fprintf(stderr, "Error 130: Invalid font size value\n");
exit(1);
}
if ((atoi(optarg) >= 0) && (atoi(optarg) <= 100)) { if ((atoi(optarg) >= 0) && (atoi(optarg) <= 100)) {
my_symbol->fontsize = atoi(optarg); my_symbol->fontsize = atoi(optarg);
} else { } else {
@ -761,7 +800,7 @@ int main(int argc, char **argv) {
if ((atoi(optarg) >= 0) && (atoi(optarg) <= 1000)) { if ((atoi(optarg) >= 0) && (atoi(optarg) <= 1000)) {
my_symbol->whitespace_width = atoi(optarg); my_symbol->whitespace_width = atoi(optarg);
} else { } else {
fprintf(stderr, "Warning 121: Whitespace value out of range"); fprintf(stderr, "Warning 121: Whitespace value out of range\n");
fflush(stderr); fflush(stderr);
} }
break; break;
@ -794,7 +833,7 @@ int main(int argc, char **argv) {
} }
} }
} else { } else {
fprintf(stderr, "Warning 122: Can't define data in batch mode"); fprintf(stderr, "Warning 122: Can't define data in batch mode\n");
fflush(stderr); fflush(stderr);
} }
break; break;