# HG changeset patch # User Mychaela Falconia # Date 1612670427 0 # Node ID 65a2a96386cdc4556004ff8512f874506def1c0c # Parent 239ebdb8f2af452c4d76764e09ac58bbcb318735 fc-uicc-tool: hex string parsing with min and max length, matching fc-simtool diff -r 239ebdb8f2af -r 65a2a96386cd uicc/hexstr.c --- a/uicc/hexstr.c Sun Feb 07 02:47:51 2021 +0000 +++ b/uicc/hexstr.c Sun Feb 07 04:00:27 2021 +0000 @@ -20,10 +20,10 @@ return(-1); } -decode_hex_data_from_string(arg, databuf, maxlen) +decode_hex_data_from_string(arg, databuf, minlen, maxlen) char *arg; u_char *databuf; - unsigned maxlen; + unsigned minlen, maxlen; { unsigned count; @@ -37,15 +37,15 @@ return(-1); } if (count >= maxlen) { - fprintf(stderr, "error: hex input data is too long\n"); + fprintf(stderr, "error: hex string is too long\n"); return(-1); } databuf[count] = (decode_hex_digit(arg[0]) << 4) | decode_hex_digit(arg[1]); arg += 2; } - if (!count) { - fprintf(stderr, "error: empty hex string argument\n"); + if (count < minlen) { + fprintf(stderr, "error: hex string is too short\n"); return(-1); } return(count); diff -r 239ebdb8f2af -r 65a2a96386cd uicc/select.c --- a/uicc/select.c Sun Feb 07 02:47:51 2021 +0000 +++ b/uicc/select.c Sun Feb 07 04:00:27 2021 +0000 @@ -234,7 +234,7 @@ unsigned aid_len; int rc; - rc = decode_hex_data_from_string(argv[1], aid, 16); + rc = decode_hex_data_from_string(argv[1], aid, 1, 16); if (rc < 0) return(rc); aid_len = rc; diff -r 239ebdb8f2af -r 65a2a96386cd uicc/writecmd.c --- a/uicc/writecmd.c Sun Feb 07 02:47:51 2021 +0000 +++ b/uicc/writecmd.c Sun Feb 07 04:00:27 2021 +0000 @@ -36,7 +36,7 @@ fprintf(stderr, "error: offset argument is out of range\n"); return(-1); } - rc = decode_hex_data_from_string(argv[2], data, 255); + rc = decode_hex_data_from_string(argv[2], data, 1, 255); if (rc < 0) return(rc); len = rc;