From 0fcb564b72f58f8d3fa3351fbad33d32b63697ca Mon Sep 17 00:00:00 2001
From: Jakub Jelinek <jakub@redhat.com>
Date: Wed, 27 Feb 2013 08:28:48 +0100
Subject: [PATCH] incpath.c (add_standard_paths): Use reconcat instead of
 concat where appropriate and avoid leaking memory.

	* incpath.c (add_standard_paths): Use reconcat instead of concat
	where appropriate and avoid leaking memory.

From-SVN: r196306
---
 gcc/ChangeLog |  3 +++
 gcc/incpath.c | 31 +++++++++++++++++++++----------
 2 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e7f05869e8d6..86426e734ccf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
 2013-02-27  Jakub Jelinek  <jakub@redhat.com>
 
+	* incpath.c (add_standard_paths): Use reconcat instead of concat
+	where appropriate and avoid leaking memory.
+
 	* opts.h: Include obstack.h.
 	(opts_concat): New prototype.
 	(opts_obstack): New declaration.
diff --git a/gcc/incpath.c b/gcc/incpath.c
index 0e61b8b747af..018da982c14c 100644
--- a/gcc/incpath.c
+++ b/gcc/incpath.c
@@ -149,12 +149,17 @@ add_standard_paths (const char *sysroot, const char *iprefix,
 		{
 		  char *str = concat (iprefix, p->fname + len, NULL);
 		  if (p->multilib == 1 && imultilib)
-		    str = concat (str, dir_separator_str, imultilib, NULL);
+		    str = reconcat (str, str, dir_separator_str,
+				    imultilib, NULL);
 		  else if (p->multilib == 2)
 		    {
 		      if (!imultiarch)
-			continue;
-		      str = concat (str, dir_separator_str, imultiarch, NULL);
+			{
+			  free (str);
+			  continue;
+			}
+		      str = reconcat (str, str, dir_separator_str,
+				      imultiarch, NULL);
 		    }
 		  add_path (str, SYSTEM, p->cxx_aware, false);
 		}
@@ -183,6 +188,7 @@ add_standard_paths (const char *sysroot, const char *iprefix,
 		   && !filename_ncmp (p->fname, cpp_PREFIX, cpp_PREFIX_len))
 	    {
  	      static const char *relocated_prefix;
+	      char *ostr;
 	      /* If this path starts with the configure-time prefix,
 		 but the compiler has been relocated, replace it
 		 with the run-time prefix.  The run-time exec prefix
@@ -198,22 +204,27 @@ add_standard_paths (const char *sysroot, const char *iprefix,
 		    = make_relative_prefix (dummy,
 					    cpp_EXEC_PREFIX,
 					    cpp_PREFIX);
+		  free (dummy);
 		}
-	      str = concat (relocated_prefix,
-			    p->fname + cpp_PREFIX_len,
-			    NULL);
-	      str = update_path (str, p->component);
+	      ostr = concat (relocated_prefix,
+			     p->fname + cpp_PREFIX_len,
+			     NULL);
+	      str = update_path (ostr, p->component);
+	      free (ostr);
 	    }
 	  else
 	    str = update_path (p->fname, p->component);
 
 	  if (p->multilib == 1 && imultilib)
-	    str = concat (str, dir_separator_str, imultilib, NULL);
+	    str = reconcat (str, str, dir_separator_str, imultilib, NULL);
 	  else if (p->multilib == 2)
 	    {
 	      if (!imultiarch)
-		continue;
-	      str = concat (str, dir_separator_str, imultiarch, NULL);
+		{
+		  free (str);
+		  continue;
+		}
+	      str = reconcat (str, str, dir_separator_str, imultiarch, NULL);
 	    }
 
 	  add_path (str, SYSTEM, p->cxx_aware, false);
-- 
GitLab