summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRainer Schuetze <r.sagitario@gmx.de>2017-11-30 07:54:15 (GMT)
committerRainer Schuetze <r.sagitario@gmx.de>2017-11-30 07:54:15 (GMT)
commitedc8ac2e4ac38f973ebb259a6a75c1ea9db32072 (patch)
tree3d3d64eda410d1438f8f3fcaa70ba17a568b7f68 /src
parentf75b963bf8f8e7b0659f929e75d03a0afc9aeb58 (diff)
downloadcv2pdb-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.cpp1
-rw-r--r--src/cv2pdb.cpp12
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");
}
}