From ac8345a525674204550c7a9f5cbb3deec7467d6d Mon Sep 17 00:00:00 2001
From: Andrew Burgess <aburgess@broadcom.com>
Date: Wed, 11 Jun 2014 10:57:27 +0000
Subject: [PATCH] Delete temporary string within demangler even in failure
 cases.

A call to demangle_template might allocate storage within a temporary
string even if the call to demangle_template eventually returns
failure.

This will never cause the demangler to crash, but does leak memory, as
a result I've not added any tests for this.

Calling string_delete is safe, even if nothing is allocated into the
string, the string is initialised with string_init, so we know the
internal pointers are NULL.

libiberty/ChangeLog

	* cplus-dem.c (do_type): Call string_delete even if the call to
	demangle_template fails.

From-SVN: r211449
---
 libiberty/ChangeLog   | 5 +++++
 libiberty/cplus-dem.c | 5 ++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 8390e4c78415..ddd96cce82a2 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,8 @@
+2014-06-11  Andrew Burgess  <aburgess@broadcom.com>
+
+	* cplus-dem.c (do_type): Call string_delete even if the call to
+	demangle_template fails.
+
 2014-06-01  Ray Donnelly  <mingw.android@gmail.com>
 
 	* pex-win32.c (argv_to_cmdline): Don't quote
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index 2dd0a8a5c845..52767cc8fde1 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -3663,7 +3663,10 @@ do_type (struct work_stuff *work, const char **mangled, string *result)
 		    string_delete (&temp);
 		  }
 		else
-		  break;
+		  {
+		    string_delete (&temp);
+		    break;
+		  }
 	      }
 	    else if (**mangled == 'Q')
 	      {
-- 
GitLab