aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2010-11-29 02:17:24 +0000
committerNicola Pero <nicola@gcc.gnu.org>2010-11-29 02:17:24 +0000
commit5944a6dcdfd01be22235e194b008e7aab2cd7a67 (patch)
tree05586947d8babed41bf307a1a30611c3cd1da56a
parent991e8468249ed3ab9b875379f2e0df16e83931ec (diff)
downloadgcc-5944a6dcdfd01be22235e194b008e7aab2cd7a67.zip
gcc-5944a6dcdfd01be22235e194b008e7aab2cd7a67.tar.gz
gcc-5944a6dcdfd01be22235e194b008e7aab2cd7a67.tar.bz2
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
-rw-r--r--gcc/objc/ChangeLog6
-rw-r--r--gcc/objc/objc-act.c16
2 files changed, 22 insertions, 0 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index 1ebff02..ca2833c 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -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.
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 70056d3..09f4e6f 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -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] == '_')