diff options
author | Rainer Schuetze <r.sagitario@gmx.de> | 2017-11-30 07:54:15 (GMT) |
---|---|---|
committer | Rainer Schuetze <r.sagitario@gmx.de> | 2017-11-30 07:54:15 (GMT) |
commit | edc8ac2e4ac38f973ebb259a6a75c1ea9db32072 (patch) | |
tree | 3d3d64eda410d1438f8f3fcaa70ba17a568b7f68 /src | |
parent | f75b963bf8f8e7b0659f929e75d03a0afc9aeb58 (diff) | |
download | cv2pdb-edc8ac2e4ac38f973ebb259a6a75c1ea9db32072.zip cv2pdb-edc8ac2e4ac38f973ebb259a6a75c1ea9db32072.tar.gz cv2pdb-edc8ac2e4ac38f973ebb259a6a75c1ea9db32072.tar.bz2 |
* DWARF: fix crash with AUX data in symbol table
* improve reallocation strategy
Diffstat (limited to 'src')
-rw-r--r-- | src/PEImage.cpp | 1 | ||||
-rw-r--r-- | src/cv2pdb.cpp | 12 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/PEImage.cpp b/src/PEImage.cpp index 2416ce4..a8fd11f 100644 --- a/src/PEImage.cpp +++ b/src/PEImage.cpp @@ -706,6 +706,7 @@ int PEImage::findSymbol(const char* name, unsigned long& off) const off = sym->Value;
return bigobj ? ((IMAGE_SYMBOL_EX*)sym)->SectionNumber : sym->SectionNumber;
}
+ i += sym->NumberOfAuxSymbols;
}
return -1;
}
diff --git a/src/cv2pdb.cpp b/src/cv2pdb.cpp index 34421b3..1ac48bd 100644 --- a/src/cv2pdb.cpp +++ b/src/cv2pdb.cpp @@ -859,8 +859,10 @@ void CV2PDB::checkUserTypeAlloc(int size, int add) {
if (cbUserTypes + size >= allocUserTypes)
{
- allocUserTypes += size + add;
+ allocUserTypes = allocUserTypes * 4 / 3 + size + add;
userTypes = (BYTE*) realloc(userTypes, allocUserTypes);
+ if(!userTypes)
+ setError("out of memory");
}
}
@@ -878,8 +880,10 @@ void CV2PDB::checkGlobalTypeAlloc(int size, int add) {
if (cbGlobalTypes + size > allocGlobalTypes)
{
- allocGlobalTypes += size + add;
+ allocGlobalTypes = allocGlobalTypes * 4 / 3 + size + add;
globalTypes = (unsigned char*) realloc(globalTypes, allocGlobalTypes);
+ if(!globalTypes)
+ setError("out of memory");
}
}
@@ -3310,8 +3314,10 @@ void CV2PDB::checkUdtSymbolAlloc(int size, int add) {
if (cbUdtSymbols + size > allocUdtSymbols)
{
- allocUdtSymbols += size + add;
+ allocUdtSymbols = allocUdtSymbols * 4 / 3 + size + add;
udtSymbols = (BYTE*) realloc(udtSymbols, allocUdtSymbols);
+ if (!udtSymbols)
+ setError("out of memory");
}
}
|