X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/866f8763175ff60e4fa455b92b5eb660a12fe6c7..90dc47c27df1983f6ebc252b0c4b94c8718fe52d:/lib/SecArgParse.c diff --git a/lib/SecArgParse.c b/lib/SecArgParse.c index 3a326ac6..c0b43cf0 100644 --- a/lib/SecArgParse.c +++ b/lib/SecArgParse.c @@ -145,7 +145,7 @@ bool options_parse(int argc, char * const *argv, struct arguments* args) { realargs.arguments[i+1] = args->arguments[i]; } - struct option* long_options = (struct option*) malloc((noptions+1) * sizeof(struct option)); + struct option* long_options = (struct option*) calloc((noptions+1), sizeof(struct option)); size_t short_options_length = 2* noptions * sizeof(char) + 2; // 2: one for -h, one for the null terminator char* short_options = (char*) malloc(short_options_length); @@ -165,7 +165,7 @@ bool options_parse(int argc, char * const *argv, struct arguments* args) { struct option* long_option = &long_options[option_index]; for(size_t i = 0; i < noptions; i++) { - if(realargs.arguments[i].longname && strncmp(long_option->name, realargs.arguments[i].longname, strlen(realargs.arguments[i].longname)) == 0) { + if(realargs.arguments[i].longname && long_option->name && strncmp(long_option->name, realargs.arguments[i].longname, strlen(realargs.arguments[i].longname)) == 0) { trigger(realargs.arguments[i], optarg); } } @@ -185,7 +185,8 @@ bool options_parse(int argc, char * const *argv, struct arguments* args) { } } if(i == noptions) { - return false; + success = false; + goto out; } } }