diff --git a/Versions/build.txt b/Versions/build.txt
index aa886adb3..40c4a2ca3 100644
--- a/Versions/build.txt
+++ b/Versions/build.txt
@@ -1 +1 @@
-2244
+2247
diff --git a/crypto/crypto.c b/crypto/crypto.c
index 5a3883ce9..0097b262a 100644
--- a/crypto/crypto.c
+++ b/crypto/crypto.c
@@ -407,8 +407,8 @@ int ReadAndDecryptFile(HWND hwnd, HANDLE hFile, DWORD size, void** result, DWORD
AES_bin_setup(&fileDecode, AES_DIR_DECRYPT, KEY_BYTES * 8, binFileKey);
AES_bin_cipherInit(&fileCypher, AES_MODE_CBC, &rawdata[PREAMBLE_SIZE]); // IV is next
{ // finally, decrypt the actual data
- int nbb = BAD_CIPHER_STATE;
- int nbp = BAD_CIPHER_STATE;
+ long nbb = BAD_CIPHER_STATE;
+ long nbp = BAD_CIPHER_STATE;
if ((readsize - code_offset) >= PAD_SLOP) {
nbb = AES_blockDecrypt(&fileCypher, &fileDecode, &rawdata[code_offset], readsize - code_offset - PAD_SLOP, rawdata);
}
@@ -416,9 +416,9 @@ int ReadAndDecryptFile(HWND hwnd, HANDLE hFile, DWORD size, void** result, DWORD
nbp = AES_padDecrypt(&fileCypher, &fileDecode, &rawdata[code_offset + nbb], readsize - code_offset - nbb, rawdata + nbb);
}
if (nbp >= 0) {
- int nb = nbb + nbp;
- rawdata[nb] = (char)0;
- rawdata[nb + 1] = (char)0; // two zeros in case it's multi-byte
+ unsigned long const nb = nbb + nbp;
+ rawdata[nb] = '\0';
+ rawdata[nb + 1] = '\0'; // two zeros in case it's multi-byte
*resultlen = (DWORD)nb;
}
else {
diff --git a/crypto/rijndael-api-fst.c b/crypto/rijndael-api-fst.c
index 96be327e1..24e597d06 100644
--- a/crypto/rijndael-api-fst.c
+++ b/crypto/rijndael-api-fst.c
@@ -568,7 +568,7 @@ int AES_padDecrypt
return BAD_CIPHER_STATE;
}
- return 16 * numBlocks - padLen;
+ return (16 * numBlocks) - padLen;
}
#ifdef INTERMEDIATE_VALUE_KAT
diff --git a/language/np3_it_it/menu_it_it.rc b/language/np3_it_it/menu_it_it.rc
index 3cb107902..ab1d5f0ac 100644
--- a/language/np3_it_it/menu_it_it.rc
+++ b/language/np3_it_it/menu_it_it.rc
@@ -90,8 +90,8 @@ BEGIN
MENUITEM "UTF-8 with &Signature", IDM_ENCODING_UTF8SIGN
MENUITEM "&Altri...\tF9", IDM_ENCODING_SELECT
MENUITEM SEPARATOR
- MENUITEM "Ricodifica con Encoding di &Default\tCtrl-Alt-F", CMD_RECODEDEFAULT
- MENUITEM "Ricodifica come &ANSI\tCtrl-Shift+A", CMD_RECODEANSI
+ MENUITEM "Ricodifica con Encoding di &Default\tCtrl+Alt+F", CMD_RECODEDEFAULT
+ MENUITEM "Ricodifica come &ANSI\tCtrl+Shift+A", CMD_RECODEANSI
MENUITEM "Ricodifica come &OEM\tCtrl+Shift+O", CMD_RECODEOEM
MENUITEM "Ricodifica come &GB18030\tCtrl+Shift+F10", CMD_RECODEGB18030
MENUITEM "Ricodifica a UCHARDET Analysis", CMD_RELOADFORCEDETECTION
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index 86270fbf1..45c96071c 100644
--- a/res/Notepad3.exe.manifest.conf
+++ b/res/Notepad3.exe.manifest.conf
@@ -3,7 +3,7 @@
Notepad3 RC2
diff --git a/src/Edit.c b/src/Edit.c
index 896806798..ea4979867 100644
--- a/src/Edit.c
+++ b/src/Edit.c
@@ -337,7 +337,7 @@ bool EditConvertText(HWND hwnd, cpi_enc_t encSource, cpi_enc_t encDest, bool bSe
DocPos const length = SciCall_GetTextLength();
- if (length == 0)
+ if (length <= 0)
{
EditSetNewText(hwnd, "", 0, bSetSavePoint);
}
@@ -708,7 +708,7 @@ bool EditCopyAppend(HWND hwnd, bool bAppend)
length = SciCall_GetTextLength();
pszText = SciCall_GetRangePointer(0, length);
}
- if (length == 0) {
+ if (length <= 0) {
res = true; // nothing to copy or append
return res;
}
@@ -986,7 +986,7 @@ bool EditLoadFile(
}
DWORD cbData = 0L;
- int const readFlag = ReadAndDecryptFile(hwnd, hFile, dwBufSize - 2, (void**)& lpData, &cbData);
+ int const readFlag = ReadAndDecryptFile(hwnd, hFile, dwBufSize, (void**)&lpData, &cbData);
Globals.dwLastError = GetLastError();
CloseHandle(hFile);
@@ -1113,16 +1113,19 @@ bool EditLoadFile(
SciCall_SetEOLMode(Settings.DefaultEOLMode);
FreeMem(lpData);
}
-
- // === UNICODE ===
else if (bIsUnicodeForced || (!bIsForced && bIsUnicodeAnalyzed && bIsUnicodeValid))
{
- if (iForcedEncoding == CPI_UNICODE) {
- bBOM = Has_UTF16_LE_BOM(lpData, clampi((int)cbData, 0, 8));
+ // === UNICODE ===
+
+ bool const bBOM_LE = Has_UTF16_LE_BOM(lpData, cbData);
+ bool const bBOM_BE = Has_UTF16_BE_BOM(lpData, cbData);
+
+ if ((iForcedEncoding == CPI_UNICODE) || bBOM_LE) {
+ bBOM = bBOM_LE;
bReverse = false;
}
- else if (iForcedEncoding == CPI_UNICODEBE) {
- bBOM = Has_UTF16_BE_BOM(lpData, clampi((int)cbData, 0, 8));
+ else if ((iForcedEncoding == CPI_UNICODEBE) || bBOM_BE) {
+ bBOM = bBOM_BE;
bReverse = true;
}
@@ -1138,7 +1141,7 @@ bool EditLoadFile(
char* lpDataUTF8 = AllocMem((cbData * 3) + 2, HEAP_ZERO_MEMORY);
DWORD convCnt = (DWORD)WideCharToMultiByte(Encoding_SciCP, 0, (bBOM) ? (LPWSTR)lpData + 1 : (LPWSTR)lpData,
- (bBOM) ? (cbData) / sizeof(WCHAR) : cbData / sizeof(WCHAR) + 1, lpDataUTF8, (MBWC_DocPos_Cast)SizeOfMem(lpDataUTF8), NULL, NULL);
+ (bBOM) ? (cbData / sizeof(WCHAR)) : (cbData / sizeof(WCHAR) + 1), lpDataUTF8, (MBWC_DocPos_Cast)SizeOfMem(lpDataUTF8), NULL, NULL);
if (convCnt == 0) {
status->bUnicodeErr = true;
@@ -1269,7 +1272,6 @@ bool EditSaveFile(
bool bWriteSuccess;
char* lpData;
- DWORD cbData;
DWORD dwBytesWritten;
status->bCancelDataLoss = false;
@@ -1315,20 +1317,20 @@ bool EditSaveFile(
}
// get text
- cbData = (DWORD)SciCall_GetTextLength();
+ DocPos cbData = SciCall_GetTextLength();
- if (cbData == 0) {
+ if (cbData <= 0) {
bWriteSuccess = SetEndOfFile(hFile);
Globals.dwLastError = GetLastError();
}
else {
- lpData = AllocMem(cbData + 4 + PAD_SLOP, HEAP_ZERO_MEMORY); //fix: +bom
- SciCall_GetText((DocPos)cbData+1, lpData);
+ lpData = AllocMem(cbData + 4, HEAP_ZERO_MEMORY); //fix: +bom
+ cbData = SciCall_GetText((cbData+1), lpData);
// FIXME: move checks in front of disk file access
- // Msg if file tag encoding does not correspond to BOM
- /*if ((g_Encodings[iEncoding].uFlags & NCP_UNICODE) == 0 && (g_Encodings[iEncoding].uFlags & NCP_UTF8_SIGN) == 0) {
+ // Msg if file tag encoding does not correspond to BOM
+ /*if ((g_Encodings[iEncoding].uFlags & NCP_UNICODE) == 0 && (g_Encodings[iEncoding].uFlags & NCP_UTF8_SIGN) == 0) {
bool bEncodingMismatch = true;
FILEVARS fv;
FileVars_Init(lpData,cbData,&fv);
@@ -1353,7 +1355,7 @@ bool EditSaveFile(
{
SetEndOfFile(hFile);
- LPWSTR lpDataWide = AllocMem(cbData * 2 + PAD_SLOP, HEAP_ZERO_MEMORY);
+ LPWSTR lpDataWide = AllocMem((cbData+1) * 2 + 2, HEAP_ZERO_MEMORY);
int bomoffset = 0;
if (Encoding_IsUNICODE_BOM(status->iEncoding)) {
const char* bom = "\xFF\xFE";
@@ -1361,7 +1363,7 @@ bool EditSaveFile(
bomoffset = 1;
}
int const cbDataWide = bomoffset +
- MultiByteToWideChar(Encoding_SciCP, 0, lpData, cbData, &lpDataWide[bomoffset],
+ MultiByteToWideChar(Encoding_SciCP, 0, lpData, (MBWC_DocPos_Cast)cbData, &lpDataWide[bomoffset],
(MBWC_DocPos_Cast)((SizeOfMem(lpDataWide) / sizeof(WCHAR)) - bomoffset));
if (Encoding_IsUNICODE_REVERSE(status->iEncoding)) {
_swab((char*)lpDataWide, (char*)lpDataWide, cbDataWide * sizeof(WCHAR));
@@ -1377,15 +1379,15 @@ bool EditSaveFile(
{
SetEndOfFile(hFile);
+ DocPos bomoffset = 0;
if (Encoding_IsUTF8_SIGN(status->iEncoding)) {
const char* bom = "\xEF\xBB\xBF";
- DWORD const bomoffset = 3;
+ bomoffset = 3;
MoveMemory(&lpData[bomoffset], lpData, cbData);
CopyMemory(lpData, bom, bomoffset);
- cbData += bomoffset;
- }
+ }
//bWriteSuccess = WriteFile(hFile,lpData,cbData,&dwBytesWritten,NULL);
- bWriteSuccess = EncryptAndWriteFile(hwnd, hFile, (BYTE*)lpData, cbData, &dwBytesWritten);
+ bWriteSuccess = EncryptAndWriteFile(hwnd, hFile, (BYTE*)lpData, (DWORD)(cbData + bomoffset), &dwBytesWritten);
Globals.dwLastError = GetLastError();
FreeMem(lpData);
@@ -1396,23 +1398,24 @@ bool EditSaveFile(
BOOL bCancelDataLoss = FALSE;
UINT uCodePage = Encoding_GetCodePage(status->iEncoding);
- LPWSTR lpDataWide = AllocMem(cbData * 2 + PAD_SLOP, HEAP_ZERO_MEMORY);
- int cbDataWide = MultiByteToWideChar(Encoding_SciCP,0,lpData,cbData,
- lpDataWide,(MBWC_DocPos_Cast)(SizeOfMem(lpDataWide)/sizeof(WCHAR)));
+ LPWSTR lpDataWide = AllocMem((cbData+1) * 2, HEAP_ZERO_MEMORY);
+ int const cbDataWide = MultiByteToWideChar(Encoding_SciCP,0,lpData, (MBWC_DocPos_Cast)cbData,
+ lpDataWide, (MBWC_DocPos_Cast)(SizeOfMem(lpDataWide)/sizeof(WCHAR)));
+ int cbDataNew = 0;
if (Encoding_IsMBCS(status->iEncoding)) {
FreeMem(lpData);
lpData = AllocMem(SizeOfMem(lpDataWide) * 2, HEAP_ZERO_MEMORY); // need more space
- cbData = WideCharToMultiByte(uCodePage, 0, lpDataWide, cbDataWide,
+ cbDataNew = WideCharToMultiByte(uCodePage, 0, lpDataWide, cbDataWide,
lpData, (MBWC_DocPos_Cast)SizeOfMem(lpData), NULL, NULL);
}
else {
ZeroMemory(lpData, SizeOfMem(lpData));
- cbData = WideCharToMultiByte(uCodePage,WC_NO_BEST_FIT_CHARS,lpDataWide,cbDataWide,
+ cbDataNew = WideCharToMultiByte(uCodePage,WC_NO_BEST_FIT_CHARS,lpDataWide,cbDataWide,
lpData,(MBWC_DocPos_Cast)SizeOfMem(lpData),NULL,&bCancelDataLoss);
if (!bCancelDataLoss) {
- cbData = WideCharToMultiByte(uCodePage,0,lpDataWide,cbDataWide,
- lpData,(MBWC_DocPos_Cast)SizeOfMem(lpData),NULL,NULL);
+ cbDataNew = WideCharToMultiByte(uCodePage,0,lpDataWide,cbDataWide,
+ lpData,(MBWC_DocPos_Cast)SizeOfMem(lpData),NULL,NULL);
bCancelDataLoss = FALSE;
}
}
@@ -1420,7 +1423,7 @@ bool EditSaveFile(
if (!bCancelDataLoss || InfoBoxLng(MB_OKCANCEL,L"MsgConv3",IDS_MUI_ERR_UNICODE2) == IDOK) {
SetEndOfFile(hFile);
- bWriteSuccess = EncryptAndWriteFile(hwnd, hFile, (BYTE*)lpData, cbData, &dwBytesWritten);
+ bWriteSuccess = EncryptAndWriteFile(hwnd, hFile, (BYTE*)lpData, cbDataNew, &dwBytesWritten);
Globals.dwLastError = GetLastError();
}
else {
@@ -1432,7 +1435,7 @@ bool EditSaveFile(
else {
SetEndOfFile(hFile);
- bWriteSuccess = EncryptAndWriteFile(hwnd, hFile, (BYTE*)lpData, cbData, &dwBytesWritten);
+ bWriteSuccess = EncryptAndWriteFile(hwnd, hFile, (BYTE*)lpData, (DWORD)cbData, &dwBytesWritten);
Globals.dwLastError = GetLastError();
FreeMem(lpData);
}
@@ -3684,7 +3687,7 @@ void EditRemoveBlankLines(HWND hwnd, bool bMerge, bool bRemoveWhiteSpace)
}
const DocPos iSelStart = (SciCall_IsSelectionEmpty() ? 0 : SciCall_GetSelectionStart());
- const DocPos iSelEnd = (SciCall_IsSelectionEmpty() ? (Sci_GetDocEndPosition()-1) : SciCall_GetSelectionEnd());
+ const DocPos iSelEnd = (SciCall_IsSelectionEmpty() ? Sci_GetDocEndPosition() : SciCall_GetSelectionEnd());
DocLn iBegLine = SciCall_LineFromPosition(iSelStart);
DocLn iEndLine = SciCall_LineFromPosition(iSelEnd);
@@ -6054,13 +6057,13 @@ bool EditFindPrev(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bExtendSelection, bo
if (slen <= 0)
return false;
- DocPos const iTextLength = Sci_GetDocEndPosition() + 1;
+ DocPos const iDocEndPos = Sci_GetDocEndPosition();
DocPos start = SciCall_GetCurrentPos();
DocPos end = 0;
if (start <= end) {
if (IDOK == InfoBoxLng(MB_OKCANCEL, L"MsgFindWrap1", IDS_MUI_FIND_WRAPFW)) {
- end = start; start = iTextLength;
+ end = start; start = iDocEndPos;
}
else
bSuppressNotFound = true;
@@ -6075,13 +6078,13 @@ bool EditFindPrev(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bExtendSelection, bo
InfoBoxLng(MB_ICONWARNING, L"MsgInvalidRegex", IDS_MUI_REGEX_INVALID);
bSuppressNotFound = true;
}
- else if ((iPos < 0) && (start <= iTextLength) && !bExtendSelection)
+ else if ((iPos < 0) && (start <= iDocEndPos) && !bExtendSelection)
{
UpdateStatusbar(false);
if (!lpefr->bNoFindWrap && !bSuppressNotFound)
{
if (IDOK == InfoBoxLng(MB_OKCANCEL, L"MsgFindWrap2", IDS_MUI_FIND_WRAPRE)) {
- end = start; start = iTextLength;
+ end = start; start = iDocEndPos;
iPos = _FindInTarget(hwnd, szFind, slen, (int)(lpefr->fuFlags), &start, &end, false, FRMOD_WRAPED);
diff --git a/src/Encoding.c b/src/Encoding.c
index 5d8498e59..bd22d83d1 100644
--- a/src/Encoding.c
+++ b/src/Encoding.c
@@ -648,16 +648,18 @@ int Encoding_GetNameW(const cpi_enc_t iEncoding, LPWSTR buffer, size_t cwch)
bool Has_UTF16_LE_BOM(const char* pBuf, size_t cnt)
{
int iTest = IS_TEXT_UNICODE_SIGNATURE;
- bool const ok = IsTextUnicode(pBuf, (int)cnt, &iTest);
- return (ok && ((iTest & IS_TEXT_UNICODE_SIGNATURE) != 0));
+ /*bool const ok =*/ (void)IsTextUnicode(pBuf, clampi((int)cnt, 0, 4), &iTest);
+ //~return (ok && ((iTest & IS_TEXT_UNICODE_SIGNATURE) != 0));
+ return ((iTest & IS_TEXT_UNICODE_SIGNATURE) != 0); // don't rely on result ok
}
// ----------------------------------------------------------------------------
bool Has_UTF16_BE_BOM(const char* pBuf, size_t cnt)
{
int iTest = IS_TEXT_UNICODE_REVERSE_SIGNATURE;
- bool const ok = IsTextUnicode(pBuf, (int)cnt, &iTest);
- return (ok && ((iTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE) != 0));
+ /*bool const ok =*/ (void)IsTextUnicode(pBuf, clampi((int)cnt, 0, 4), &iTest);
+ //~return (ok && ((iTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE) != 0));
+ return ((iTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE) != 0); // don't rely on result ok
}
// ============================================================================
@@ -677,7 +679,7 @@ bool IsValidUnicode(const char* pBuffer, const size_t len, bool* lpbBOM, bool* l
int const iAllTests = IS_TEXT_UNICODE_UNICODE_MASK | IS_TEXT_UNICODE_REVERSE_MASK | IS_TEXT_UNICODE_NOT_UNICODE_MASK | IS_TEXT_UNICODE_NOT_ASCII_MASK;
int iTest = iAllTests;
- (void) IsTextUnicode(pBuffer, (int)cb, &iTest);
+ /*bool const ok =*/ (void)IsTextUnicode(pBuffer, (int)cb, &iTest); // don't rely on result ok
if (iTest == iAllTests) {
iTest = 0; // iTest doesn't seem to have been modified ...
diff --git a/src/MuiLanguage.c b/src/MuiLanguage.c
index dffb6d778..6f42225cf 100644
--- a/src/MuiLanguage.c
+++ b/src/MuiLanguage.c
@@ -98,7 +98,7 @@ static bool _LngStrToMultiLngStr(WCHAR* pLngStr, WCHAR* pLngMultiStr, size_t ln
if ((strLen > 0) && pLngMultiStr && (lngMultiStrSize > 0)) {
WCHAR* lngMultiStrPtr = pLngMultiStr;
- WCHAR* last = pLngStr + (Has_UTF16_LE_BOM((char*)pLngStr, clampi((int)strLen, 0, 8)) ? 1 : 0);
+ WCHAR* last = pLngStr + (Has_UTF16_LE_BOM((char*)pLngStr, (strLen * sizeof(WCHAR))) ? 1 : 0);
while (last && rtnVal) {
// make sure you validate the user input
WCHAR* next = StrNextTok(last, L",; :");
diff --git a/src/Notepad3.c b/src/Notepad3.c
index 740abe9eb..a4033ca9c 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -436,21 +436,23 @@ inline bool IsSaveNeeded(const SAVE_NEEDED_QUERY query)
static void _SetSaveNeededFlag(const bool setSaveNeeded)
{
- bool const isDocModified = setSaveNeeded || SciCall_GetModify(); // consistency
+ bool const bGetModify = SciCall_GetModify();
+ bool const isDocModified = setSaveNeeded || bGetModify; // consistency
// update on change
if (IsSaveNeeded(ISN_GET) != isDocModified)
{
IsSaveNeeded(isDocModified ? ISN_SET : ISN_CLEAR);
UpdateToolbar();
- UpdateStatusbar(false);
+ UpdateStatusbar(true);
}
if (setSaveNeeded) {
// Force trigger modified (e.g. RelaunchElevated)
- if (!SciCall_GetModify()) {
- SciCall_AppendText(1, " "); // trigger dirty flag
- SciCall_DeleteRange(Sci_GetDocEndPosition(), 1);
+ if (!bGetModify) {
+ DocPos const posDocEnd = Sci_GetDocEndPosition();
+ SciCall_AppendText(1, "\v"); // trigger dirty flag
+ SciCall_DeleteRange(posDocEnd, 1);
}
// notify Search/Replace dialog
if (IsWindow(Globals.hwndDlgFindReplace)) {
@@ -2895,7 +2897,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
EnableCmd(hmenu,IDM_EDIT_REDO,SciCall_CanRedo() && !ro);
bool const s = SciCall_IsSelectionEmpty();
- bool const e = (SciCall_GetTextLength() == 0);
+ bool const e = (SciCall_GetTextLength() <= 0);
bool const p = SciCall_CanPaste();
bool const mls = Sci_IsMultiLineSelection();
@@ -3564,7 +3566,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
_IGNORE_NOTIFY_CHANGE_;
if (EditSetNewEncoding(Globals.hwndEdit, iNewEncoding, (s_flagSetEncoding != CPI_NONE))) {
- if (SciCall_GetTextLength() == 0) {
+ if (SciCall_GetTextLength() <= 0) {
Encoding_Current(iNewEncoding);
Encoding_HasChanged(iNewEncoding);
}
@@ -4681,7 +4683,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SELTONEXT:
case IDM_EDIT_SELTOPREV:
- if (SciCall_GetTextLength() == 0) { break; }
+ if (SciCall_GetTextLength() <= 0) { break; }
if (IsFindPatternEmpty() && !StringCchLenA(Settings.EFR_Data.szFind, COUNTOF(Settings.EFR_Data.szFind)))
{
@@ -10155,7 +10157,7 @@ bool FileSave(bool bSaveAlways, bool bAsk, bool bSaveAs, bool bSaveCopy)
bool bIsEmptyNewFile = false;
if (StringCchLenW(Globals.CurrentFile, COUNTOF(Globals.CurrentFile)) == 0) {
DocPos const cchText = SciCall_GetTextLength();
- if (cchText == 0) {
+ if (cchText <= 0) {
bIsEmptyNewFile = true;
}
else if (cchText < 2048) {
diff --git a/src/SciCall.h b/src/SciCall.h
index a8508a8ca..87b6245d7 100644
--- a/src/SciCall.h
+++ b/src/SciCall.h
@@ -540,7 +540,7 @@ DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool)
#define Sci_GetNetLineLength(line) (SciCall_GetLineEndPosition(line) - SciCall_PositionFromLine(line))
//~#define Sci_GetDocEndPosition() (SciCall_GetTextLength() - 1)
-#define Sci_GetDocEndPosition() SciCall_GetLineEndPosition(SciCall_GetLineCount() - 1)
+#define Sci_GetDocEndPosition() SciCall_GetLineEndPosition(SciCall_GetLineCount())
// max. line length in range (incl. line-breaks)
inline DocPos Sci_GetRangeMaxLineLength(DocLn iBeginLine, DocLn iEndLine) {
diff --git a/src/VersionEx.h b/src/VersionEx.h
index 0f22b0367..21b84978a 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -7,8 +7,8 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 19
-#define VERSION_REV 605
-#define VERSION_BUILD 2244
+#define VERSION_REV 608
+#define VERSION_BUILD 2247
#define SCINTILLA_VER 415+
#define ONIGMO_REGEX_VER 6.2.0
#define VERSION_PATCH RC2