diff options
author | Nicola Pero <nicola.pero@meta-innovation.com> | 2010-11-29 02:17:24 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2010-11-29 02:17:24 +0000 |
commit | 5944a6dcdfd01be22235e194b008e7aab2cd7a67 (patch) | |
tree | 05586947d8babed41bf307a1a30611c3cd1da56a /gcc | |
parent | 991e8468249ed3ab9b875379f2e0df16e83931ec (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/objc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/objc/objc-act.c | 16 |
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] == '_') |