fixed some mismatched new and delete operators

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3465 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2004-02-05 12:19:02 +00:00
parent d08b963619
commit d07ec8774f
5 changed files with 35 additions and 17 deletions

View file

@ -207,19 +207,30 @@ BYTE* CResourceEditor::GetResource(char* szType, char* szName, LANGID wLanguage)
return 0;
}
void CResourceEditor::FreeResource(BYTE* pbResource)
{
if (pbResource)
delete [] pbResource;
}
// Saves the edited PE into a buffer and returns it.
BYTE* CResourceEditor::Save(DWORD &dwSize) {
DWORD CResourceEditor::Save(BYTE* pbBuf, DWORD &dwSize) {
unsigned int i;
DWORD dwReqSize;
DWORD dwRsrcSize = m_cResDir->GetSize(); // Size of new resource section
DWORD dwRsrcSizeAligned = RALIGN(dwRsrcSize, m_ntHeaders->OptionalHeader.FileAlignment); // Align it to FileAlignment
// Calculate the total new PE size
dwSize = m_iSize - IMAGE_FIRST_SECTION(m_ntHeaders)[m_dwResourceSectionIndex].SizeOfRawData + dwRsrcSizeAligned;
dwReqSize = m_iSize - IMAGE_FIRST_SECTION(m_ntHeaders)[m_dwResourceSectionIndex].SizeOfRawData + dwRsrcSizeAligned;
// Allocate memory for the new PE
BYTE* pbNewPE = new BYTE[dwSize];
// Fill it with zeros
if (!pbBuf || dwSize < dwReqSize)
return dwReqSize;
// Use buffer
BYTE* pbNewPE = pbBuf;
dwSize = dwReqSize;
// Fill buffer with zeros
ZeroMemory(pbNewPE, dwSize);
BYTE* seeker = pbNewPE;
@ -319,7 +330,7 @@ BYTE* CResourceEditor::Save(DWORD &dwSize) {
// m_dwResourceSectionIndex and m_dwResourceSectionVA have also been left unchanged as
// we didn't move the resources section
return pbNewPE;
return 0;
}
// This function scans exe sections and after find a match with given name

View file

@ -60,9 +60,10 @@ public:
bool UpdateResource(char* szType, WORD szName, LANGID wLanguage, BYTE* lpData, DWORD dwSize);
bool UpdateResource(WORD szType, WORD szName, LANGID wLanguage, BYTE* lpData, DWORD dwSize);
BYTE* GetResource(char* szType, char* szName, LANGID wLanguage);
void FreeResource(BYTE* pbResource);
bool AddExtraVirtualSize2PESection(const char* pszSectionName, int addsize);
BYTE* Save(DWORD &dwSize);
DWORD Save(BYTE* pbBuf, DWORD &dwSize);
private:
BYTE* m_pbPE;

View file

@ -1998,7 +1998,7 @@ again:
dlg = dt.Save(dwSize); \
res_editor->UpdateResource(RT_DIALOG, MAKEINTRESOURCE(id), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, dwSize); \
} \
free(dlg); \
res_editor->FreeResource(dlg); \
} \
}
@ -3177,17 +3177,23 @@ again:
void CEXEBuild::init_res_editor()
{
build_compressor_set=true;
build_compressor_set = true;
if (!res_editor)
res_editor=new CResourceEditor(header_data_new, exeheader_size_new);
res_editor = new CResourceEditor(header_data_new, exeheader_size_new);
}
void CEXEBuild::close_res_editor()
{
if (!res_editor) return;
unsigned char *header_data_new_edited = res_editor->Save((DWORD&)exeheader_size_new);
DWORD newsize;
// query size
newsize = res_editor->Save(NULL, newsize);
unsigned char *new_header = (unsigned char *) malloc(newsize);
// save
res_editor->Save(new_header, newsize);
free(header_data_new);
header_data_new = header_data_new_edited;
header_data_new = new_header;
exeheader_size_new = (int) newsize;
delete res_editor;
res_editor=0;
}

View file

@ -321,7 +321,7 @@ int CEXEBuild::GenerateLangTables() {
DWORD dwSize; \
dlg = td.Save(dwSize); \
res_editor->UpdateResource(RT_DIALOG, MAKEINTRESOURCE(id), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, dwSize); \
free(dlg); \
res_editor->FreeResource(dlg); \
} \
}
@ -377,7 +377,7 @@ int CEXEBuild::GenerateLangTables() {
DWORD dwSize; \
dlg = td.Save(dwSize); \
res_editor->UpdateResource(RT_DIALOG, MAKEINTRESOURCE(id+cur_offset), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, dwSize); \
free(dlg); \
res_editor->FreeResource(dlg); \
} \
}

View file

@ -1907,7 +1907,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
DWORD dwSize;
dlg = dt.Save(dwSize);
res_editor->UpdateResource(RT_DIALOG, MAKEINTRESOURCE(IDD_INSTFILES), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, dwSize);
free(dlg);
res_editor->FreeResource(dlg);
}
catch (exception& err) {
ERROR_MSG("Error setting smooth progress bar: %s\n", err.what());
@ -2276,7 +2276,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
res_editor->UpdateResource(RT_DIALOG, IDD_INST, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, dwDlgSize);
delete [] dlg;
res_editor->FreeResource(dlg);
dt.DlgUnitsToPixels(brandingCtl.sWidth, brandingCtl.sHeight);
SCRIPT_MSG("AddBrandingImage: %s %ux%u\n", line.gettoken_str(1), brandingCtl.sWidth, brandingCtl.sHeight);
@ -3020,7 +3020,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
DWORD dwSize;
dlg = td.Save(dwSize);
res_editor->UpdateResource(RT_DIALOG, MAKEINTRESOURCE(IDD_INST), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, dwSize);
free(dlg);
res_editor->FreeResource(dlg);
}
catch (exception& err) {
ERROR_MSG("Error while triming branding text control: %s\n", err.what());