fixed bug #1939573 - LangDLL Memory leaks

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5766 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2008-11-15 15:48:11 +00:00
parent 412485144b
commit 26517fe8a3

View file

@ -174,19 +174,19 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size,
// fill language struct // fill language struct
for (i = 0; i < langs_num; i++) { for (i = 0; i < langs_num; i++) {
if (popstring(temp)) return; if (popstring(temp)) { visible_langs_num = 0; break; }
langs[visible_langs_num].name = GlobalAlloc(GPTR, lstrlen(temp)+1); langs[visible_langs_num].name = GlobalAlloc(GPTR, lstrlen(temp)+1);
if (!langs[visible_langs_num].name) return; if (!langs[visible_langs_num].name) { visible_langs_num = 0; break; }
lstrcpy(langs[visible_langs_num].name, temp); lstrcpy(langs[visible_langs_num].name, temp);
if (popstring(temp)) return; if (popstring(temp)) { visible_langs_num = 0; break; }
langs[visible_langs_num].id = GlobalAlloc(GPTR, lstrlen(temp)+1); langs[visible_langs_num].id = GlobalAlloc(GPTR, lstrlen(temp)+1);
if (!langs[visible_langs_num].id) return; if (!langs[visible_langs_num].id) { visible_langs_num = 0; break; }
lstrcpy(langs[visible_langs_num].id, temp); lstrcpy(langs[visible_langs_num].id, temp);
if (docp) if (docp)
{ {
if (popstring(temp)) return; if (popstring(temp)) { visible_langs_num = 0; break; }
langs[visible_langs_num].cp = myatoi(temp); langs[visible_langs_num].cp = myatoi(temp);
} }
@ -203,7 +203,9 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size,
// pop the empty string to keep the stack clean // pop the empty string to keep the stack clean
if (pop_empty_string) { if (pop_empty_string) {
if (popstring(temp)) return; if (popstring(temp)) {
visible_langs_num = 0;
}
} }
// start dialog // start dialog
@ -222,8 +224,8 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size,
// free structs // free structs
for (i = 0; i < visible_langs_num; i++) { for (i = 0; i < visible_langs_num; i++) {
GlobalFree(langs[i].name); if (langs[i].name) GlobalFree(langs[i].name);
GlobalFree(langs[i].id); if (langs[i].id) GlobalFree(langs[i].id);
} }
GlobalFree(langs); GlobalFree(langs);
} }