add error handling

This commit is contained in:
merlokk 2018-10-27 00:49:43 +03:00
commit 941691eb9d

View file

@ -140,9 +140,10 @@ int CmdHFFidoInfo(const char *cmd) {
return 0; return 0;
} }
json_t *OpenJson(int paramnum, char *fname, void* argtable[]) { json_t *OpenJson(int paramnum, char *fname, void* argtable[], bool *err) {
json_t *root = NULL; json_t *root = NULL;
json_error_t error; json_error_t error;
*err = false;
uint8_t jsonname[250] ={0}; uint8_t jsonname[250] ={0};
char *cjsonname = (char *)jsonname; char *cjsonname = (char *)jsonname;
@ -165,12 +166,14 @@ json_t *OpenJson(int paramnum, char *fname, void* argtable[]) {
root = json_load_file(fname, 0, &error); root = json_load_file(fname, 0, &error);
if (!root) { if (!root) {
PrintAndLog("ERROR: json error on line %d: %s", error.line, error.text); PrintAndLog("ERROR: json error on line %d: %s", error.line, error.text);
*err = true;
return NULL; return NULL;
} }
if (!json_is_object(root)) { if (!json_is_object(root)) {
PrintAndLog("ERROR: Invalid json format. root must be an object."); PrintAndLog("ERROR: Invalid json format. root must be an object.");
json_decref(root); json_decref(root);
*err = true;
return NULL; return NULL;
} }
@ -212,13 +215,14 @@ int CmdHFFidoRegister(const char *cmd) {
bool paramsPlain = arg_get_lit(3); bool paramsPlain = arg_get_lit(3);
char fname[250] = {0}; char fname[250] = {0};
root = OpenJson(4, fname, argtable); bool err;
root = OpenJson(4, fname, argtable, &err);
if(err)
return 1;
if (root) { if (root) {
size_t jlen; size_t jlen;
JsonLoadBufAsHex(root, "$.ChallengeParam", data, 32, &jlen); JsonLoadBufAsHex(root, "$.ChallengeParam", data, 32, &jlen);
JsonLoadBufAsHex(root, "$.ApplicationParam", &data[32], 32, &jlen); JsonLoadBufAsHex(root, "$.ApplicationParam", &data[32], 32, &jlen);
} else {
return 1;
} }
if (paramsPlain) { if (paramsPlain) {
@ -396,9 +400,12 @@ int CmdHFFidoAuthenticate(const char *cmd) {
controlByte = 0x03; controlByte = 0x03;
if (arg_get_lit(6)) if (arg_get_lit(6))
controlByte = 0x07; controlByte = 0x07;
char fname[250] = {0}; char fname[250] = {0};
root = OpenJson(7, fname, argtable); bool err;
root = OpenJson(7, fname, argtable, &err);
if(err)
return 1;
if (root) { if (root) {
size_t jlen; size_t jlen;
JsonLoadBufAsHex(root, "$.ChallengeParam", data, 32, &jlen); JsonLoadBufAsHex(root, "$.ChallengeParam", data, 32, &jlen);
@ -406,9 +413,7 @@ int CmdHFFidoAuthenticate(const char *cmd) {
JsonLoadBufAsHex(root, "$.KeyHandle", &data[65], 512 - 67, &jlen); JsonLoadBufAsHex(root, "$.KeyHandle", &data[65], 512 - 67, &jlen);
keyHandleLen = jlen & 0xff; keyHandleLen = jlen & 0xff;
data[64] = keyHandleLen; data[64] = keyHandleLen;
} else { }
return 1;
}
CLIGetHexWithReturn(8, hdata, &hdatalen); CLIGetHexWithReturn(8, hdata, &hdatalen);
if (hdatalen > 255) { if (hdatalen > 255) {