In gcc/objc/: 2010-11-29 Nicola Pero <nicola.pero@meta-innovation.com>

In gcc/objc/:
2010-11-29  Nicola Pero  <nicola.pero@meta-innovation.com>

	* objc-act.c (objc_demangle): Return immediately if the string is
	too short.  Detect names that do not need demangling, and return
	them unchanged.

From-SVN: r167231
This commit is contained in:
Nicola Pero 2010-11-29 02:17:24 +00:00 committed by Nicola Pero
parent 991e846824
commit 5944a6dcdf
2 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2010-11-29 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-act.c (objc_demangle): Return immediately if the string is
too short. Detect names that do not need demangling, and return
them unchanged.
2010-11-27 Nicola Pero <nicola.pero@meta-innovation.com>
Implemented optional properties.

View File

@ -12399,6 +12399,22 @@ objc_demangle (const char *mangled)
{
char *demangled, *cp;
/* First of all, if the name is too short it can't be an Objective-C
mangled method name. */
if (mangled[0] == '\0' || mangled[1] == '\0' || mangled[2] == '\0')
return NULL;
/* If the name looks like an already demangled one, return it
unchanged. This should only happen on Darwin, where method names
are mangled differently into a pretty-print form (such as
'+[NSObject class]', see darwin.h). In that case, demangling is
a no-op, but we need to return the demangled name if it was an
ObjC one, and return NULL if not. We should be safe as no C/C++
function can start with "-[" or "+[". */
if ((mangled[0] == '-' || mangled[0] == '+')
&& (mangled[1] == '['))
return mangled;
if (mangled[0] == '_' &&
(mangled[1] == 'i' || mangled[1] == 'c') &&
mangled[2] == '_')