From 48a5ce439de8d6f7f1799b5f76665d819a256595 Mon Sep 17 00:00:00 2001 From: Zdenek Dohnal Date: Wed, 2 Sep 2020 10:27:26 +0200 Subject: [PATCH] driverless.c: free an allocated memory, use MAX_OUTPUT_LEN --- utils/driverless.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/utils/driverless.c b/utils/driverless.c index f030b1b2e..69780621c 100644 --- a/utils/driverless.c +++ b/utils/driverless.c @@ -37,6 +37,8 @@ #include #include +#define MAX_OUTPUT_LEN 8192 + static int debug = 0; static int job_canceled = 0; static void cancel_job(int sig); @@ -554,7 +556,13 @@ list_printers (int mode, int reg_type_no, int isFax) while ((bytes = cupsFileGetLine(fp, buffer, sizeof(buffer))) > 0) { - ippfind_output = (char *)malloc(8192*(sizeof(char))); + ippfind_output = (char *)malloc(MAX_OUTPUT_LEN*(sizeof(char))); + if (ippfind_output == NULL) + { + exit_status = 1; + goto error; + } + ptr = buffer; while (ptr && !isalnum(*ptr & 255)) ptr ++; @@ -565,10 +573,12 @@ list_printers (int mode, int reg_type_no, int isFax) *ptr = '\0'; ptr ++; } else - continue; - snprintf(ippfind_output,8191,"%s",ptr); + continue; + snprintf(ippfind_output, MAX_OUTPUT_LEN, "%s", ptr); cupsArrayAdd(service_uri_list_ipps,ippfind_output); - + + free(ippfind_output); + ippfind_output = NULL; } /* * Copy the rest of the file @@ -585,7 +595,13 @@ list_printers (int mode, int reg_type_no, int isFax) fp = cupsFileStdin(); while ((bytes = cupsFileGetLine(fp, buffer, sizeof(buffer))) > 0) { - ippfind_output = (char *)malloc(8192*(sizeof(char))); + ippfind_output = (char *)malloc(MAX_OUTPUT_LEN*(sizeof(char))); + if (ippfind_output == NULL) + { + exit_status = 1; + goto error; + } + ptr = buffer; while (ptr && !isalnum(*ptr & 255)) ptr ++; @@ -597,8 +613,11 @@ list_printers (int mode, int reg_type_no, int isFax) ptr ++; } else continue; - snprintf(ippfind_output,8191,"%s",ptr); + snprintf(ippfind_output, MAX_OUTPUT_LEN, "%s", ptr); cupsArrayAdd(service_uri_list_ipp,ippfind_output); + + free(ippfind_output); + ippfind_output = NULL; } /* * Copy the rest of the file -- 2.47.2