From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17500 invoked by alias); 9 Aug 2007 22:28:26 -0000 Received: (qmail 17379 invoked by uid 22791); 9 Aug 2007 22:28:25 -0000 X-Spam-Check-By: sourceware.org Received: from a.mail.sonic.net (HELO a.mail.sonic.net) (64.142.16.245) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 09 Aug 2007 22:28:18 +0000 Received: from webmail.sonic.net (b.webmail.sonic.net [64.142.100.148]) by a.mail.sonic.net (8.13.8.Beta0-Sonic/8.13.7) with ESMTP id l79MRrGh001430; Thu, 9 Aug 2007 15:27:54 -0700 Received: from 12.7.175.2 (SquirrelMail authenticated user msnyder) by webmail.sonic.net with HTTP; Thu, 9 Aug 2007 15:27:54 -0700 (PDT) Message-ID: <21518.12.7.175.2.1186698474.squirrel@webmail.sonic.net> Date: Thu, 09 Aug 2007 22:28:00 -0000 Subject: [RFA] libiberty/make-relative-prefix.c, more resource leaks From: msnyder@sonic.net To: gcc-patches@gcc.gnu.org, gdb-patches@sourceware.org, binutils@sourceware.org Cc: ian@airs.com, dj@redhat.com, dberlin@dberlin.org User-Agent: SquirrelMail/1.4.9a MIME-Version: 1.0 Content-Type: multipart/mixed;boundary="----=_20070809152754_29025" Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2007-08/txt/msg00189.txt.bz2 ------=_20070809152754_29025 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Content-length: 189 Sorry, didn't get them all the first time. If this is approved, would the approver please go ahead and check it into gcc for me? I don't think I have permissions there. Thanks, Michael ------=_20070809152754_29025 Content-Type: text/plain; name="302b.txt" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="302b.txt" Content-length: 4743 2007-08-09 Michael Snyder * make-relative-prefix.c (make_relative_prefix_1): Resource leaks. Index: make-relative-prefix.c =================================================================== RCS file: /cvs/src/src/libiberty/make-relative-prefix.c,v retrieving revision 1.10 diff -p -r1.10 make-relative-prefix.c *** make-relative-prefix.c 3 Aug 2007 19:49:44 -0000 1.10 --- make-relative-prefix.c 9 Aug 2007 22:22:56 -0000 *************** free_split_directories (char **dirs) *** 201,210 **** { int i = 0; ! while (dirs[i] != NULL) ! free (dirs[i++]); ! free ((char *) dirs); } /* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets --- 201,213 ---- { int i = 0; ! if (dirs != NULL) ! { ! while (dirs[i] != NULL) ! free (dirs[i++]); ! free ((char *) dirs); ! } } /* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets *************** static char * *** 221,231 **** make_relative_prefix_1 (const char *progname, const char *bin_prefix, const char *prefix, const int resolve_links) { ! char **prog_dirs, **bin_dirs, **prefix_dirs; int prog_num, bin_num, prefix_num; int i, n, common; int needed_len; ! char *ret, *ptr, *full_progname = NULL; if (progname == NULL || bin_prefix == NULL || prefix == NULL) return NULL; --- 224,234 ---- make_relative_prefix_1 (const char *progname, const char *bin_prefix, const char *prefix, const int resolve_links) { ! char **prog_dirs = NULL, **bin_dirs = NULL, **prefix_dirs = NULL; int prog_num, bin_num, prefix_num; int i, n, common; int needed_len; ! char *ret = NULL, *ptr, *full_progname; if (progname == NULL || bin_prefix == NULL || prefix == NULL) return NULL; *************** make_relative_prefix_1 (const char *prog *** 305,314 **** bin_dirs = split_directories (bin_prefix, &bin_num); if (bin_dirs == NULL) ! { ! free_split_directories (prog_dirs); ! return NULL; ! } /* Remove the program name from comparison of directory names. */ prog_num--; --- 308,314 ---- bin_dirs = split_directories (bin_prefix, &bin_num); if (bin_dirs == NULL) ! goto bailout; /* Remove the program name from comparison of directory names. */ prog_num--; *************** make_relative_prefix_1 (const char *prog *** 326,346 **** } if (prog_num <= 0 || i == bin_num) ! { ! free_split_directories (prog_dirs); ! free_split_directories (bin_dirs); ! prog_dirs = bin_dirs = (char **) 0; ! return NULL; ! } } prefix_dirs = split_directories (prefix, &prefix_num); if (prefix_dirs == NULL) ! { ! free_split_directories (prog_dirs); ! free_split_directories (bin_dirs); ! return NULL; ! } /* Find how many directories are in common between bin_prefix & prefix. */ n = (prefix_num < bin_num) ? prefix_num : bin_num; --- 326,337 ---- } if (prog_num <= 0 || i == bin_num) ! goto bailout; } prefix_dirs = split_directories (prefix, &prefix_num); if (prefix_dirs == NULL) ! goto bailout; /* Find how many directories are in common between bin_prefix & prefix. */ n = (prefix_num < bin_num) ? prefix_num : bin_num; *************** make_relative_prefix_1 (const char *prog *** 352,363 **** /* If there are no common directories, there can be no relative prefix. */ if (common == 0) ! { ! free_split_directories (prog_dirs); ! free_split_directories (bin_dirs); ! free_split_directories (prefix_dirs); ! return NULL; ! } /* Two passes: first figure out the size of the result string, and then construct it. */ --- 343,349 ---- /* If there are no common directories, there can be no relative prefix. */ if (common == 0) ! goto bailout; /* Two passes: first figure out the size of the result string, and then construct it. */ *************** make_relative_prefix_1 (const char *prog *** 371,377 **** ret = (char *) malloc (needed_len); if (ret == NULL) ! return NULL; /* Build up the pathnames in argv[0]. */ *ret = '\0'; --- 357,363 ---- ret = (char *) malloc (needed_len); if (ret == NULL) ! goto bailout; /* Build up the pathnames in argv[0]. */ *ret = '\0'; *************** make_relative_prefix_1 (const char *prog *** 392,397 **** --- 378,384 ---- for (i = common; i < prefix_num; i++) strcat (ret, prefix_dirs[i]); + bailout: free_split_directories (prog_dirs); free_split_directories (bin_dirs); free_split_directories (prefix_dirs); ------=_20070809152754_29025--