Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Aug 2014 17:56:48 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r269885 - stable/10/lib/libproc
Message-ID:  <53ea5560.6840.ea7a307@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Tue Aug 12 17:56:48 2014
New Revision: 269885
URL: http://svnweb.freebsd.org/changeset/base/269885

Log:
  MFC r269750:
  
  In r268463, I misplaced a return in demangle(), causing the function to
  erroneously skip symbols that were not mangled at all.  Fix this by
  moving the return into the preceding if block.
  
  While here, simplify the code by letting __cxa_demangle() allocate the
  needed space for the demangled symbol.  This also fixes a memory leak,
  which would occur whenever __cxa_demangle() failed.
  
  Reported by:	pgj
  PR:		base/191981

Modified:
  stable/10/lib/libproc/proc_sym.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libproc/proc_sym.c
==============================================================================
--- stable/10/lib/libproc/proc_sym.c	Tue Aug 12 17:51:26 2014	(r269884)
+++ stable/10/lib/libproc/proc_sym.c	Tue Aug 12 17:56:48 2014	(r269885)
@@ -57,21 +57,15 @@ demangle(const char *symbol, char *buf, 
 {
 #ifndef NO_CXA_DEMANGLE
 	char *dembuf;
-	size_t demlen;
 
 	if (symbol[0] == '_' && symbol[1] == 'Z' && symbol[2]) {
-		dembuf = malloc(len);
-		if (!dembuf)
-			goto fail;
-		demlen = len;
-		dembuf = __cxa_demangle(symbol, dembuf, &demlen, NULL);
+		dembuf = __cxa_demangle(symbol, NULL, NULL, NULL);
 		if (!dembuf)
 			goto fail;
 		strlcpy(buf, dembuf, len);
 		free(dembuf);
+		return;
 	}
-
-	return;
 fail:
 #endif /* NO_CXA_DEMANGLE */
 	strlcpy(buf, symbol, len);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53ea5560.6840.ea7a307>