More memory clean-ups

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@2901 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2003-09-12 11:16:33 +00:00
parent 8380534b1d
commit 41808c26be
7 changed files with 48 additions and 9 deletions

View file

@ -210,7 +210,7 @@ CDialogTemplate::~CDialogTemplate() {
if (m_szTitle) if (m_szTitle)
delete [] m_szTitle; delete [] m_szTitle;
if (m_szFont) if (m_szFont)
delete [] m_szTitle; delete [] m_szFont;
for (unsigned int i = 0; i < m_vItems.size(); i++) { for (unsigned int i = 0; i < m_vItems.size(); i++) {
if (m_vItems[i]->szClass && !IS_INTRESOURCE(m_vItems[i]->szClass)) if (m_vItems[i]->szClass && !IS_INTRESOURCE(m_vItems[i]->szClass))

View file

@ -24,6 +24,17 @@ struct version_string_list {
class CVersionStrigList : public SortedStringListND<struct version_string_list> class CVersionStrigList : public SortedStringListND<struct version_string_list>
{ {
public: public:
~CVersionStrigList()
{
struct version_string_list *itr = (struct version_string_list *) gr.get();
int i = gr.getlen() / sizeof(struct version_string_list);
while (i--)
{
delete itr[i].pChildStrings;
}
}
int add(LANGID langid, int codepage) int add(LANGID langid, int codepage)
{ {
char Buff[10]; char Buff[10];

View file

@ -412,7 +412,7 @@ int CEXEBuild::getcurdbsize() { return cur_datablock->getlen(); }
int CEXEBuild::add_string(const char *string, int process/*=1*/) // returns offset in stringblock int CEXEBuild::add_string(const char *string, int process/*=1*/) // returns offset in stringblock
{ {
if (!*string) return 0; if (!string || !*string) return 0;
if (*string == '$' && *(string+1) == '(') { if (*string == '$' && *(string+1) == '(') {
int idx = 0; int idx = 0;

View file

@ -842,10 +842,13 @@ LanguageTable * CEXEBuild::LoadLangFile(char *filename) {
} }
void CEXEBuild::DeleteLangTable(LanguageTable *table) { void CEXEBuild::DeleteLangTable(LanguageTable *table) {
free(table->nlf.m_szName); if (table->nlf.m_szName)
free(table->nlf.m_szFont); free(table->nlf.m_szName);
free(table->lang_strings); if (table->nlf.m_szFont)
free(table->nlf.m_szFont);
delete table->lang_strings;
for (int i = 0; i < NLF_STRINGS; i++) { for (int i = 0; i < NLF_STRINGS; i++) {
free(table->nlf.m_szStrings[i]); if (table->nlf.m_szStrings[i])
free(table->nlf.m_szStrings[i]);
} }
} }

View file

@ -1205,6 +1205,11 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
} }
rewind(fp); rewind(fp);
char *data=(char*)malloc(datalen+2); char *data=(char*)malloc(datalen+2);
if (!data)
{
ERROR_MSG("Internal compiler error #12345: LicenseData malloc(%d) failed.\n", datalen+2);
return PS_ERROR;
}
char *ldata=data+1; char *ldata=data+1;
if (fread(ldata,1,datalen,fp) != datalen) if (fread(ldata,1,datalen,fp) != datalen)
{ {
@ -1220,6 +1225,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
*data = SF_TEXT; *data = SF_TEXT;
int ret = SetLangString(name, lang, data); int ret = SetLangString(name, lang, data);
free(data);
if (ret == PS_WARNING) if (ret == PS_WARNING)
warning_fl("LicenseLangString \"%s\" set multiple times for %d, wasting space", name, lang); warning_fl("LicenseLangString \"%s\" set multiple times for %d, wasting space", name, lang);
else if (ret == PS_ERROR) else if (ret == PS_ERROR)
@ -1483,10 +1489,16 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
} }
rewind(fp); rewind(fp);
data=(char*)malloc(datalen+2); data=(char*)malloc(datalen+2);
if (!data)
{
ERROR_MSG("Internal compiler error #12345: LicenseData malloc(%d) failed.\n", datalen+2);
return PS_ERROR;
}
char *ldata=data+1; char *ldata=data+1;
if (fread(ldata,1,datalen,fp) != datalen) { if (fread(ldata,1,datalen,fp) != datalen) {
ERROR_MSG("LicenseData: can't read file.\n"); ERROR_MSG("LicenseData: can't read file.\n");
fclose(fp); fclose(fp);
free(data);
return PS_ERROR; return PS_ERROR;
} }
fclose(fp); fclose(fp);
@ -1509,6 +1521,10 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
cur_page->parms[1] = add_string(data, 0); cur_page->parms[1] = add_string(data, 0);
} }
if (!idx)
free(data);
SCRIPT_MSG("LicenseData: \"%s\"\n",file); SCRIPT_MSG("LicenseData: \"%s\"\n",file);
} }
return make_sure_not_in_secorfunc(line.gettoken_str(0), 1); return make_sure_not_in_secorfunc(line.gettoken_str(0), 1);

View file

@ -181,7 +181,8 @@ class SortedStringList
int num=gr.getlen()/sizeof(T); int num=gr.getlen()/sizeof(T);
for (int i=0; i<num; i++) { for (int i=0; i<num; i++) {
free(s[i].name); if (s[i].name)
free(s[i].name);
} }
} }

View file

@ -84,6 +84,8 @@ int update_bitmap(CResourceEditor* re, WORD id, char* filename, int width/*=0*/,
re->UpdateResource(RT_BITMAP, MAKEINTRESOURCE(id), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), bitmap, dwSize); re->UpdateResource(RT_BITMAP, MAKEINTRESOURCE(id), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), bitmap, dwSize);
free(bitmap);
return 0; return 0;
} }
@ -158,9 +160,15 @@ int replace_icon(CResourceEditor* re, WORD wIconId, char* filename)
fpos_t pos; fpos_t pos;
fgetpos(f, &pos); fgetpos(f, &pos);
if (fseek(f, dwOffset, SEEK_SET)) return -1; if (fseek(f, dwOffset, SEEK_SET)) {
free(rsrcIconGroup);
return -1;
}
BYTE* iconData = (BYTE*)malloc(ige->dwRawSize); BYTE* iconData = (BYTE*)malloc(ige->dwRawSize);
if (!iconData) throw bad_alloc(); if (!iconData) {
free(rsrcIconGroup);
throw bad_alloc();
}
fread(iconData, sizeof(BYTE), ige->dwRawSize, f); fread(iconData, sizeof(BYTE), ige->dwRawSize, f);
re->UpdateResource(RT_ICON, MAKEINTRESOURCE(i+1), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), iconData, ige->dwRawSize); re->UpdateResource(RT_ICON, MAKEINTRESOURCE(i+1), MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), iconData, ige->dwRawSize);
free(iconData); free(iconData);