SetCompressorStats must zero terminate the buffer from EM_GETLINE!
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6560 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
9eb4035b08
commit
9152c24610
3 changed files with 13 additions and 18 deletions
|
@ -344,12 +344,10 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int this_compressor=0;
|
int this_compressor=0, i;
|
||||||
int i;
|
|
||||||
HANDLE hPrev, hThis;
|
HANDLE hPrev, hThis;
|
||||||
DWORD prevSize=0, thisSize=0;
|
DWORD prevSize=0, thisSize=0;
|
||||||
|
|
||||||
|
|
||||||
for(i=(int)COMPRESSOR_SCRIPT+2; i<(int)COMPRESSOR_BEST; i++) {
|
for(i=(int)COMPRESSOR_SCRIPT+2; i<(int)COMPRESSOR_BEST; i++) {
|
||||||
if(!lstrcmpi(g_sdata.compressor_name,compressor_names[i])) {
|
if(!lstrcmpi(g_sdata.compressor_name,compressor_names[i])) {
|
||||||
this_compressor = i;
|
this_compressor = i;
|
||||||
|
@ -359,14 +357,14 @@ INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
|
||||||
|
|
||||||
if(FileExists(temp_file_name)) {
|
if(FileExists(temp_file_name)) {
|
||||||
hPrev = CreateFile(temp_file_name,GENERIC_READ, FILE_SHARE_READ,
|
hPrev = CreateFile(temp_file_name,GENERIC_READ, FILE_SHARE_READ,
|
||||||
NULL, OPEN_EXISTING, (DWORD)NULL, NULL);
|
NULL, OPEN_EXISTING, 0, NULL);
|
||||||
if(hPrev != INVALID_HANDLE_VALUE) {
|
if(hPrev != INVALID_HANDLE_VALUE) {
|
||||||
prevSize = GetFileSize(hPrev, 0);
|
prevSize = GetFileSize(hPrev, 0);
|
||||||
CloseHandle(hPrev);
|
CloseHandle(hPrev);
|
||||||
|
|
||||||
if(prevSize != INVALID_FILE_SIZE) {
|
if(prevSize != INVALID_FILE_SIZE) {
|
||||||
hThis = CreateFile(g_sdata.output_exe,GENERIC_READ, FILE_SHARE_READ,
|
hThis = CreateFile(g_sdata.output_exe,GENERIC_READ, FILE_SHARE_READ,
|
||||||
NULL, OPEN_EXISTING, (DWORD)NULL, NULL);
|
NULL, OPEN_EXISTING, 0, NULL);
|
||||||
if(hThis != INVALID_HANDLE_VALUE) {
|
if(hThis != INVALID_HANDLE_VALUE) {
|
||||||
thisSize = GetFileSize(hThis, 0);
|
thisSize = GetFileSize(hThis, 0);
|
||||||
CloseHandle(hThis);
|
CloseHandle(hThis);
|
||||||
|
@ -763,7 +761,7 @@ DWORD WINAPI MakeNSISProc(LPVOID TreadParam) {
|
||||||
PostMessage(g_sdata.hwnd, WM_MAKENSIS_PROCESSCOMPLETE, 0, 0);
|
PostMessage(g_sdata.hwnd, WM_MAKENSIS_PROCESSCOMPLETE, 0, 0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
CloseHandle(newstdout); // close this handle (duplicated in subprocess) now so we get ERROR_BROKEN_PIPE
|
CloseHandle(newstdout); // Close this handle (duplicated in subprocess) now so we get ERROR_BROKEN_PIPE
|
||||||
|
|
||||||
char iob[(1024 & ~1) + sizeof(WCHAR)];
|
char iob[(1024 & ~1) + sizeof(WCHAR)];
|
||||||
WCHAR *p = (WCHAR*) iob, wcl = 0;
|
WCHAR *p = (WCHAR*) iob, wcl = 0;
|
||||||
|
@ -774,7 +772,7 @@ DWORD WINAPI MakeNSISProc(LPVOID TreadParam) {
|
||||||
cb += cbio, cch = cb / sizeof(WCHAR);
|
cb += cbio, cch = cb / sizeof(WCHAR);
|
||||||
if (!cch)
|
if (!cch)
|
||||||
{
|
{
|
||||||
if (!rok) break; // TODO: if cb is non-zero we should report a incomplete read error?
|
if (!rok) break; // TODO: If cb is non-zero we should report a incomplete read error?
|
||||||
cbofs += cbio; // We only have 1 byte, need to read more to get a complete WCHAR
|
cbofs += cbio; // We only have 1 byte, need to read more to get a complete WCHAR
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -919,11 +917,8 @@ INT_PTR CALLBACK SettingsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPar
|
||||||
switch(msg) {
|
switch(msg) {
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
int i = 0;
|
for(int i = (int)COMPRESSOR_SCRIPT; i <= (int)COMPRESSOR_BEST; i++)
|
||||||
|
|
||||||
for(i = (int)COMPRESSOR_SCRIPT; i <= (int)COMPRESSOR_BEST; i++) {
|
|
||||||
SendDlgItemMessage(hwndDlg, IDC_COMPRESSOR, CB_ADDSTRING, 0, (LPARAM)compressor_display_names[i]);
|
SendDlgItemMessage(hwndDlg, IDC_COMPRESSOR, CB_ADDSTRING, 0, (LPARAM)compressor_display_names[i]);
|
||||||
}
|
|
||||||
SendDlgItemMessage(hwndDlg, IDC_COMPRESSOR, CB_SETCURSEL, (WPARAM)g_sdata.default_compressor, (LPARAM)0);
|
SendDlgItemMessage(hwndDlg, IDC_COMPRESSOR, CB_SETCURSEL, (WPARAM)g_sdata.default_compressor, (LPARAM)0);
|
||||||
|
|
||||||
SetSymbols(hwndDlg, g_sdata.symbols);
|
SetSymbols(hwndDlg, g_sdata.symbols);
|
||||||
|
|
|
@ -186,7 +186,7 @@ void SetDialogFocus(HWND hDlg, HWND hCtl)
|
||||||
SendMessage(hDlg, WM_NEXTDLGCTL, (WPARAM)hCtl, TRUE);
|
SendMessage(hDlg, WM_NEXTDLGCTL, (WPARAM)hCtl, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Items(HWND hwnd, int on)
|
void EnableDisableItems(HWND hwnd, int on)
|
||||||
{
|
{
|
||||||
const HWND hCloseBtn = GetDlgItem(hwnd, IDCANCEL);
|
const HWND hCloseBtn = GetDlgItem(hwnd, IDCANCEL);
|
||||||
const HWND hTestBtn = GetDlgItem(hwnd, IDC_TEST);
|
const HWND hTestBtn = GetDlgItem(hwnd, IDC_TEST);
|
||||||
|
@ -234,12 +234,12 @@ void SetCompressorStats()
|
||||||
|
|
||||||
line_count = SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETLINECOUNT, 0, 0);
|
line_count = SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETLINECOUNT, 0, 0);
|
||||||
for(i=0; i<line_count; i++) {
|
for(i=0; i<line_count; i++) {
|
||||||
*((LPWORD)buf) = sizeof(buf);
|
*((LPWORD)buf) = ARRAYSIZE(buf);
|
||||||
SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETLINE, (WPARAM)i, (LPARAM)buf);
|
LRESULT cchLine = SendDlgItemMessage(g_sdata.hwnd, IDC_LOGWIN, EM_GETLINE, (WPARAM)i, (LPARAM)buf);
|
||||||
|
buf[cchLine] = _T('\0');
|
||||||
if(found) {
|
if(found) {
|
||||||
DWORD len = lstrlen(TOTAL_SIZE_COMPRESSOR_STAT);
|
DWORD len = lstrlen(TOTAL_SIZE_COMPRESSOR_STAT);
|
||||||
lstrcat(g_sdata.compressor_stats,buf);
|
lstrcat(g_sdata.compressor_stats,buf);
|
||||||
|
|
||||||
if(!StrCmpN(buf,TOTAL_SIZE_COMPRESSOR_STAT,len)) {
|
if(!StrCmpN(buf,TOTAL_SIZE_COMPRESSOR_STAT,len)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,9 +51,9 @@ void ClearLog(HWND hwnd);
|
||||||
void LogMessage(HWND hwnd,const TCHAR *str);
|
void LogMessage(HWND hwnd,const TCHAR *str);
|
||||||
void ErrorMessage(HWND hwnd,const TCHAR *str);
|
void ErrorMessage(HWND hwnd,const TCHAR *str);
|
||||||
void SetDialogFocus(HWND hDlg, HWND hCtl); // Use this and not SetFocus()!
|
void SetDialogFocus(HWND hDlg, HWND hCtl); // Use this and not SetFocus()!
|
||||||
#define DisableItems(hwnd) Items(hwnd, 0)
|
#define DisableItems(hwnd) EnableDisableItems(hwnd, 0)
|
||||||
#define EnableItems(hwnd) Items(hwnd, 1)
|
#define EnableItems(hwnd) EnableDisableItems(hwnd, 1)
|
||||||
void Items(HWND hwnd, int on);
|
void EnableDisableItems(HWND hwnd, int on);
|
||||||
bool OpenRegSettingsKey(HKEY &hKey, bool create = false);
|
bool OpenRegSettingsKey(HKEY &hKey, bool create = false);
|
||||||
DWORD ReadRegSettingDW(LPCTSTR name, const DWORD defval);
|
DWORD ReadRegSettingDW(LPCTSTR name, const DWORD defval);
|
||||||
void RestoreWindowPos(HWND hwnd);
|
void RestoreWindowPos(HWND hwnd);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue