From d6cb4db77da6cb9be13f23939b5208af1a63a937 Mon Sep 17 00:00:00 2001 From: Morris Jette <jette@schedmd.com> Date: Thu, 29 Dec 2016 19:51:51 -0700 Subject: [PATCH] Fix some memory leaks reported by Coverity --- src/sinfo/sort.c | 87 ++++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/src/sinfo/sort.c b/src/sinfo/sort.c index e72e5d7173d..d77efaa9da5 100644 --- a/src/sinfo/sort.c +++ b/src/sinfo/sort.c @@ -425,6 +425,7 @@ static int _sort_by_node_addr(void *void1, void *void2) sinfo_data_t *sinfo1; sinfo_data_t *sinfo2; char *val1, *val2; + char *ptr1, *ptr2; #if PURE_ALPHA_SORT == 0 int inx; #endif @@ -435,39 +436,41 @@ static int _sort_by_node_addr(void *void1, void *void2) if (val1) { hostlist_push_host(sinfo1->node_addr, val1); hostlist_sort(sinfo1->node_addr); + ptr1 = val1; } else - val1 = ""; + ptr1 = ""; val2 = hostlist_shift(sinfo2->node_addr); if (val2) { hostlist_push_host(sinfo2->node_addr, val2); hostlist_sort(sinfo2->node_addr); + ptr2 = val2; } else - val2 = ""; + ptr2 = ""; #if PURE_ALPHA_SORT - diff = xstrcmp(val1, val2); + diff = xstrcmp(ptr1, ptr2); #else - for (inx=0; ; inx++) { - if (val1[inx] == val2[inx]) { - if (val1[inx] == '\0') + for (inx = 0; ; inx++) { + if (ptr1[inx] == ptr2[inx]) { + if (ptr1[inx] == '\0') break; continue; } - if ((isdigit((int)val1[inx])) && - (isdigit((int)val2[inx]))) { + if ((isdigit((int)ptr1[inx])) && + (isdigit((int)ptr2[inx]))) { int num1, num2; - num1 = atoi(val1+inx); - num2 = atoi(val2+inx); + num1 = atoi(ptr1 + inx); + num2 = atoi(ptr2 + inx); diff = num1 - num2; } else - diff = xstrcmp(val1, val2); + diff = xstrcmp(ptr1, ptr2); break; } #endif - if (strlen(val1)) + if (val1) free(val1); - if (strlen(val2)) + if (val2) free(val2); if (reverse_order) @@ -482,6 +485,7 @@ static int _sort_by_hostnames(void *void1, void *void2) sinfo_data_t *sinfo1; sinfo_data_t *sinfo2; char *val1, *val2; + char *ptr1, *ptr2; #if PURE_ALPHA_SORT == 0 int inx; #endif @@ -492,39 +496,41 @@ static int _sort_by_hostnames(void *void1, void *void2) if (val1) { hostlist_push_host(sinfo1->hostnames, val1); hostlist_sort(sinfo1->hostnames); + ptr1 = val1; } else - val1 = ""; + ptr1 = ""; val2 = hostlist_shift(sinfo2->hostnames); if (val2) { hostlist_push_host(sinfo2->hostnames, val2); hostlist_sort(sinfo2->hostnames); + ptr2 = val2; } else - val2 = ""; + ptr2 = ""; #if PURE_ALPHA_SORT - diff = xstrcmp(val1, val2); + diff = xstrcmp(ptr1, ptr2); #else - for (inx=0; ; inx++) { - if (val1[inx] == val2[inx]) { - if (val1[inx] == '\0') + for (inx = 0; ; inx++) { + if (ptr1[inx] == ptr2[inx]) { + if (ptr1[inx] == '\0') break; continue; } - if ((isdigit((int)val1[inx])) && - (isdigit((int)val2[inx]))) { + if ((isdigit((int)ptr1[inx])) && + (isdigit((int)ptr2[inx]))) { int num1, num2; - num1 = atoi(val1+inx); - num2 = atoi(val2+inx); + num1 = atoi(ptr1 + inx); + num2 = atoi(ptr2 + inx); diff = num1 - num2; } else - diff = xstrcmp(val1, val2); + diff = xstrcmp(ptr1, ptr2); break; } #endif - if (strlen(val1)) + if (val1) free(val1); - if (strlen(val2)) + if (val2) free(val2); if (reverse_order) @@ -600,6 +606,7 @@ static int _sort_by_node_list(void *void1, void *void2) sinfo_data_t *sinfo1; sinfo_data_t *sinfo2; char *val1, *val2; + char *ptr1, *ptr2; #if PURE_ALPHA_SORT == 0 int inx; #endif @@ -610,39 +617,41 @@ static int _sort_by_node_list(void *void1, void *void2) if (val1) { hostlist_push_host(sinfo1->nodes, val1); hostlist_sort(sinfo1->nodes); + ptr1 = val1; } else - val1 = ""; + ptr1 = ""; val2 = hostlist_shift(sinfo2->nodes); if (val2) { hostlist_push_host(sinfo2->nodes, val2); hostlist_sort(sinfo2->nodes); + ptr2 = val2; } else - val2 = ""; + ptr2 = ""; #if PURE_ALPHA_SORT - diff = xstrcmp(val1, val2); + diff = xstrcmp(ptr1, ptr2); #else - for (inx=0; ; inx++) { - if (val1[inx] == val2[inx]) { - if (val1[inx] == '\0') + for (inx = 0; ; inx++) { + if (ptr1[inx] == ptr2[inx]) { + if (ptr1[inx] == '\0') break; continue; } - if ((isdigit((int)val1[inx])) && - (isdigit((int)val2[inx]))) { + if ((isdigit((int)ptr1[inx])) && + (isdigit((int)ptr2[inx]))) { int num1, num2; - num1 = atoi(val1+inx); - num2 = atoi(val2+inx); + num1 = atoi(ptr1 + inx); + num2 = atoi(ptr2 + inx); diff = num1 - num2; } else - diff = xstrcmp(val1, val2); + diff = xstrcmp(ptr1, ptr2); break; } #endif - if (strlen(val1)) + if (val1) free(val1); - if (strlen(val2)) + if (val2) free(val2); if (reverse_order) -- GitLab