summaryrefslogtreecommitdiffstats
path: root/src/symutil.cpp
diff options
context:
space:
mode:
authorRainer Schuetze <r.sagitario@gmx.de>2016-08-09 06:30:55 (GMT)
committerRainer Schuetze <r.sagitario@gmx.de>2016-08-09 06:30:55 (GMT)
commit6e3db44adbb111903913c1ee85c46fe2303b4d08 (patch)
treeb381d794f200b7df846a1f044d6cc8aa79a69dad /src/symutil.cpp
parentc3bdd90f5f999fde082ee42eec115322f7e6974d (diff)
downloadcv2pdb-6e3db44adbb111903913c1ee85c46fe2303b4d08.zip
cv2pdb-6e3db44adbb111903913c1ee85c46fe2303b4d08.tar.gz
cv2pdb-6e3db44adbb111903913c1ee85c46fe2303b4d08.tar.bz2
* do not uncompress names in field lists
* copy symbol unmodified if uncompression fails
Diffstat (limited to 'src/symutil.cpp')
-rw-r--r--src/symutil.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/symutil.cpp b/src/symutil.cpp
index f9ffa00..225235d 100644
--- a/src/symutil.cpp
+++ b/src/symutil.cpp
@@ -21,6 +21,7 @@ bool useTypedefEnum = false;
int dsym2c(const BYTE* p, int len, char* cname, int maxclen)
{
+ const BYTE* beg = p;
const BYTE* end = p + len;
int zlen, zpos, cpos = 0;
@@ -74,7 +75,7 @@ int dsym2c(const BYTE* p, int len, char* cname, int maxclen)
for(int z = 0; z < zlen; z++)
cname[cpos + z] = cname[cpos - zpos + z];
cpos += zlen;
- }
+ }
else if (ch > 0x80)
{
zlen = (ch & 0x7) + 1;
@@ -87,7 +88,12 @@ int dsym2c(const BYTE* p, int len, char* cname, int maxclen)
else
cname[cpos++] = ch;
}
-
+ if (p < end)
+ {
+ // decompression failed, assume it's containing UTF8 encoded characters
+ cpos = min(maxclen, len);
+ memcpy(cname, beg, cpos);
+ }
cname[cpos] = 0;
if(demangleSymbols)
if (cname[0] == '_' && cname[1] == 'D' && isdigit(cname[2]))