+ fixing crash in case of wrong Encoding (detection)

This commit is contained in:
Rainer Kottenhoff 2017-09-05 09:24:55 +02:00
parent d6775f7161
commit a2f250dd4f

View File

@ -1623,22 +1623,32 @@ BOOL EditLoadFile(
Encoding_SciSetCodePage(hwnd,*iEncoding);
lpDataUTF8 = GlobalAlloc(GPTR,(cbData * 3) + 2);
cbData = WideCharToMultiByte(Encoding_SciGetCodePage(hwnd),0,(bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
DWORD convCnt = (DWORD)WideCharToMultiByte(Encoding_SciGetCodePage(hwnd),0,(bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
(bBOM) ? (cbData)/sizeof(WCHAR) : cbData/sizeof(WCHAR) + 1,lpDataUTF8,(int)GlobalSize(lpDataUTF8),NULL,NULL);
if (cbData == 0) {
if (convCnt == 0) {
*pbUnicodeErr = TRUE;
cbData = WideCharToMultiByte(CP_ACP,0,(bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
convCnt = (DWORD)WideCharToMultiByte(CP_ACP,0,(bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
(-1),lpDataUTF8,(int)GlobalSize(lpDataUTF8),NULL,NULL);
}
GlobalFree(lpData);
Encoding_SciSetCodePage(hwnd,*iEncoding);
EditSetNewText(hwnd,"",0);
FileVars_Init(lpDataUTF8,cbData-1,&fvCurFile);
EditSetNewText(hwnd,lpDataUTF8,cbData-1);
*iEOLMode = EditDetectEOLMode(hwnd,lpDataUTF8,cbData-1);
GlobalFree(lpDataUTF8);
if (convCnt != 0) {
GlobalFree(lpData);
Encoding_SciSetCodePage(hwnd,*iEncoding);
EditSetNewText(hwnd,"",0);
FileVars_Init(lpDataUTF8,convCnt - 1,&fvCurFile);
EditSetNewText(hwnd,lpDataUTF8,convCnt - 1);
*iEOLMode = EditDetectEOLMode(hwnd,lpDataUTF8,convCnt - 1);
GlobalFree(lpDataUTF8);
}
else {
GlobalFree(lpDataUTF8);
GlobalFree(lpData);
Encoding_Source(CPI_NONE);
Encoding_SrcWeak(CPI_NONE);
return FALSE;
}
}
else {
@ -1672,11 +1682,6 @@ BOOL EditLoadFile(
}
else {
UINT uCodePage = CP_UTF8;
LPWSTR lpDataWide;
int cbDataWide;
if (iSrcEnc != CPI_NONE)
*iEncoding = iSrcEnc;
else {
@ -1698,23 +1703,39 @@ BOOL EditLoadFile(
if ((mEncoding[*iEncoding].uFlags & NCP_8BIT && mEncoding[*iEncoding].uCodePage != CP_UTF7) ||
(mEncoding[*iEncoding].uCodePage == CP_UTF7 && IsUTF7(lpData,cbData))) {
uCodePage = mEncoding[*iEncoding].uCodePage;
UINT uCodePage = mEncoding[*iEncoding].uCodePage;
lpDataWide = GlobalAlloc(GPTR,cbData * 2 + 16);
cbDataWide = MultiByteToWideChar(uCodePage,0,lpData,cbData,lpDataWide,(int)GlobalSize(lpDataWide)/sizeof(WCHAR));
LPWSTR lpDataWide = GlobalAlloc(GPTR,cbData * 2 + 16);
int cbDataWide = MultiByteToWideChar(uCodePage,0,lpData,cbData,lpDataWide,(int)GlobalSize(lpDataWide)/sizeof(WCHAR));
if (cbDataWide != 0)
{
GlobalFree(lpData);
lpData = GlobalAlloc(GPTR,cbDataWide * 3 + 16);
GlobalFree(lpData);
lpData = GlobalAlloc(GPTR,cbDataWide * 3 + 16);
Encoding_SciSetCodePage(hwnd,*iEncoding);
cbData = WideCharToMultiByte(Encoding_SciGetCodePage(hwnd),0,lpDataWide,cbDataWide,lpData,(int)GlobalSize(lpData),NULL,NULL);
GlobalFree(lpDataWide);
EditSetNewText(hwnd,"",0);
EditSetNewText(hwnd,lpData,cbData);
*iEOLMode = EditDetectEOLMode(hwnd,lpData,cbData);
GlobalFree(lpData);
Encoding_SciSetCodePage(hwnd,*iEncoding);
cbData = WideCharToMultiByte(Encoding_SciGetCodePage(hwnd),0,lpDataWide,cbDataWide,lpData,(int)GlobalSize(lpData),NULL,NULL);
if (cbData != 0) {
GlobalFree(lpDataWide);
EditSetNewText(hwnd,"",0);
EditSetNewText(hwnd,lpData,cbData);
*iEOLMode = EditDetectEOLMode(hwnd,lpData,cbData);
GlobalFree(lpData);
}
else {
GlobalFree(lpDataWide);
GlobalFree(lpData);
Encoding_Source(CPI_NONE);
Encoding_SrcWeak(CPI_NONE);
return FALSE;
}
}
else {
GlobalFree(lpDataWide);
GlobalFree(lpData);
Encoding_Source(CPI_NONE);
Encoding_SrcWeak(CPI_NONE);
return FALSE;
}
}
else {
*iEncoding = Encoding_IsValid(iSrcEnc) ? iSrcEnc : iDefaultEncoding;