From cce0c2dce4784af8d32db7ba013f90ec55e807f6 Mon Sep 17 00:00:00 2001 From: Manu Garg Date: Tue, 23 May 2023 23:14:54 -0700 Subject: [PATCH 1/3] Try fixing a couple of more static-analysis issues --- src/pactester.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pactester.c b/src/pactester.c index 20c9d1f6..feb44bb1 100644 --- a/src/pactester.c +++ b/src/pactester.c @@ -32,7 +32,7 @@ #define LINEMAX 4096 // Max length of any line read from text files (4 KiB) #define PACMAX (1024 * 1024) // Max size of the PAC script (1 MiB) -void usage(const char *progname) +__attribute__((noreturn)) void usage(const char *progname) { fprintf(stderr, "\nUsage: %s <-p pacfile> <-u url> [-h host] " "[-c client_ip] [-e]", progname); @@ -66,14 +66,15 @@ char *get_host_from_url(const char *url) if (p[0] == '\0'|| // We reached end without hitting : p[1] != '/' || p[2] != '/' // Next two characters are not // ) { - fprintf(stderr, "pactester.c: Not a proper URL\n"); free(q); + fprintf(stderr, "pactester.c: Not a proper URL\n"); return NULL; } p = p + 3; // Get past '://' // Host part starts from here. char *host = p; if (*p == '\0' || *p == '/' || *p == ':') { // If host part is null. + free(q); fprintf(stderr, "pactester.c: Not a proper URL\n"); return NULL; } @@ -253,8 +254,8 @@ int main(int argc, char* argv[]) if (proxy == NULL) { fprintf(stderr, "pactester.c: %s %s.\n", "Problem in finding proxy for", url); + fclose(stderr); pacparser_cleanup(); - free(proxy); return 1; } if (proxy) From 4fede51a435c4c6dd405f9804d8632799c5592f0 Mon Sep 17 00:00:00 2001 From: Manu Garg Date: Tue, 23 May 2023 23:37:44 -0700 Subject: [PATCH 2/3] Exit right away on error. This makes compiler happy --- src/pactester.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/pactester.c b/src/pactester.c index feb44bb1..ff1bdd24 100644 --- a/src/pactester.c +++ b/src/pactester.c @@ -162,7 +162,7 @@ int main(int argc, char* argv[]) fprintf(stderr, "Input file is too big. Maximum allowed size is: %d", PACMAX); free(script); - return 1; + exit(1); } script = realloc(script, script_size); if (script == NULL) { @@ -184,7 +184,7 @@ int main(int argc, char* argv[]) script); free(script); pacparser_cleanup(); - return 1; + exit(1); } free(script); } @@ -193,7 +193,7 @@ int main(int argc, char* argv[]) fprintf(stderr, "pactester.c: Could not parse the pac file: %s\n", pacfile); pacparser_cleanup(); - return 1; + exit(1); } } @@ -201,7 +201,7 @@ int main(int argc, char* argv[]) if (!pacparser_setmyip(client_ip)) { fprintf(stderr, "pactester.c: Error setting client IP\n"); pacparser_cleanup(); - return 1; + exit(1); } char *proxy; @@ -219,7 +219,7 @@ int main(int argc, char* argv[]) fprintf(stderr, "pactester.c: %s %s.\n", "Problem in finding proxy for", url); pacparser_cleanup(); - return 1; + exit(1); } printf("%s\n", proxy); } @@ -230,7 +230,7 @@ int main(int argc, char* argv[]) if (!(fp = fopen(urlslist, "r"))) { fprintf(stderr, "pactester.c: Could not open urlslist: %s", urlslist); pacparser_cleanup(); - return 1; + exit(1); } while (fgets(line, sizeof(line), fp)) { char *url = line; @@ -254,9 +254,8 @@ int main(int argc, char* argv[]) if (proxy == NULL) { fprintf(stderr, "pactester.c: %s %s.\n", "Problem in finding proxy for", url); - fclose(stderr); pacparser_cleanup(); - return 1; + exit(1); } if (proxy) printf("%s : %s\n", url, proxy); From 01d6e4c811a10e1f1fb79fde3569a05b845986d6 Mon Sep 17 00:00:00 2001 From: Manu Garg Date: Tue, 23 May 2023 23:48:54 -0700 Subject: [PATCH 3/3] Make static analysis happier --- src/pactester.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/pactester.c b/src/pactester.c index ff1bdd24..ebc9afdc 100644 --- a/src/pactester.c +++ b/src/pactester.c @@ -156,19 +156,16 @@ int main(int argc, char* argv[]) while (fgets(buffer, LINEMAX, stdin)) { if (strlen(buffer) == 0) break; - char *old = script; script_size += strlen(buffer); if (script_size > PACMAX) { fprintf(stderr, "Input file is too big. Maximum allowed size is: %d", PACMAX); - free(script); exit(1); } script = realloc(script, script_size); if (script == NULL) { perror("pactester.c: Failed to allocate the memory for the script"); - free(old); - return 1; + exit(1); } strcat(script, buffer); } @@ -182,7 +179,6 @@ int main(int argc, char* argv[]) if (!pacparser_parse_pac_string(script)) { fprintf(stderr, "pactester.c: Could not parse the pac script: %s\n", script); - free(script); pacparser_cleanup(); exit(1); } @@ -197,12 +193,11 @@ int main(int argc, char* argv[]) } } - if (client_ip) - if (!pacparser_setmyip(client_ip)) { - fprintf(stderr, "pactester.c: Error setting client IP\n"); - pacparser_cleanup(); - exit(1); - } + if (client_ip && !pacparser_setmyip(client_ip)) { + fprintf(stderr, "pactester.c: Error setting client IP\n"); + pacparser_cleanup(); + exit(1); + } char *proxy; @@ -212,7 +207,7 @@ int main(int argc, char* argv[]) // function will print a proper error message in that case). host = host ? host: get_host_from_url(url); if (!host) { - return 1; + exit(1); } proxy = pacparser_find_proxy(url, host); if (proxy == NULL) { @@ -222,9 +217,10 @@ int main(int argc, char* argv[]) exit(1); } printf("%s\n", proxy); + exit(0); } - else if (urlslist) { + if (urlslist) { char line[LINEMAX]; FILE *fp; if (!(fp = fopen(urlslist, "r"))) { @@ -261,6 +257,7 @@ int main(int argc, char* argv[]) printf("%s : %s\n", url, proxy); } fclose(fp); + exit(0); } pacparser_cleanup();