Merge pull request #4152 from RaiKoHoff/Dev_Master

Fix crash in SCI_FINDTEXTFULL caused by using wrong data structure
This commit is contained in:
Pairi Daiza 2022-08-31 20:32:31 +02:00 committed by GitHub
commit 759eb3cb59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 12 deletions

View File

@ -5460,17 +5460,17 @@ void EditGetExcerpt(HWND hwnd, LPWSTR lpszExcerpt, DWORD cchExcerpt)
}
WCHAR tch[256] = { L'\0' };
struct Sci_TextRange tr = { { 0, 0 }, NULL };
struct Sci_TextRangeFull tr = { { 0, 0 }, NULL };
/*if (iCurPos != iAnchorPos && !Sci_IsMultiOrRectangleSelection()) {*/
tr.chrg.cpMin = (DocPosCR)SciCall_GetSelectionStart();
tr.chrg.cpMax = min_cr((tr.chrg.cpMin + (DocPosCR)COUNTOF(tch)), (DocPosCR)SciCall_GetSelectionEnd());
tr.chrg.cpMax = min_p((tr.chrg.cpMin + COUNTOF(tch)), SciCall_GetSelectionEnd());
/*}
else {
int iLine = SciCall_LineFromPosition(iCurPos);
tr.chrg.cpMin = SciCall_PositionFromLine(iLine);
tr.chrg.cpMax = min_cr(SciCall_GetLineEndPosition(iLine),(LONG)(tr.chrg.cpMin + COUNTOF(tchBuf2)));
}*/
tr.chrg.cpMax = min_cr(tr.chrg.cpMax, (DocPosCR)Sci_GetDocEndPosition());
tr.chrg.cpMax = min_p(tr.chrg.cpMax, Sci_GetDocEndPosition());
size_t const len = ((size_t)tr.chrg.cpMax - (size_t)tr.chrg.cpMin);
char* const pszText = AllocMem(len+1LL, HEAP_ZERO_MEMORY);
@ -7857,12 +7857,11 @@ bool EditAutoCompleteWord(HWND hwnd, bool autoInsert)
if (Settings.AutoCompleteWords || (autoInsert && !Settings.AutoCLexerKeyWords)) {
// --------------------------------------------------------------------------
struct Sci_TextToFind ft = { { 0, 0 }, 0, { 0, 0 } };
struct Sci_TextToFindFull ft = { { 0, 0 }, NULL, { 0, 0 } };
ft.lpstrText = pRoot;
ft.chrg.cpMax = (DocPosCR)iDocEndPos;
//DocPos iPosFind = SciCall_FindTextFull(SCFIND_WORDSTART, &ft);
DocPos iPosFind = SciCall_FindText(SCFIND_WORDSTART, &ft);
DocPos iPosFind = SciCall_FindTextFull(SCFIND_WORDSTART, &ft);
PWLIST pwlNewWord = NULL;
while ((iPosFind >= 0) && ((iPosFind + iRootLen) < iDocEndPos)) {
@ -7896,8 +7895,8 @@ bool EditAutoCompleteWord(HWND hwnd, bool autoInsert)
}
ft.chrg.cpMin = (DocPosCR)iWordEndPos;
//iPosFind = SciCall_FindTextFull(SCFIND_WORDSTART, &ft);
iPosFind = SciCall_FindText(SCFIND_WORDSTART, &ft);
iPosFind = SciCall_FindTextFull(SCFIND_WORDSTART, &ft);
//iPosFind = SciCall_FindText(SCFIND_WORDSTART, &ft);
}
FreeMem(pwlNewWord);
pwlNewWord = NULL;

View File

@ -330,8 +330,7 @@ DeclareSciCallV0(SelectionDuplicate, SELECTIONDUPLICATE);
DeclareSciCallV0(LineTranspose, LINETRANSPOSE);
DeclareSciCallV0(MoveSelectedLinesUp, MOVESELECTEDLINESUP);
DeclareSciCallV0(MoveSelectedLinesDown, MOVESELECTEDLINESDOWN);
DeclareSciCallR2(FindText, FINDTEXT, DocPos, int, flags, struct Sci_TextToFind*, text);
DeclareSciCallR2(FindTextFull, FINDTEXTFULL, DocPos, int, flags, struct Sci_TextToFind*, text);
DeclareSciCallR2(FindTextFull, FINDTEXTFULL, DocPos, int, flags, struct Sci_TextToFindFull*, text);
// Operations
DeclareSciCallV0(Cut, CUT);
@ -344,7 +343,7 @@ DeclareSciCallV0(Cancel, CANCEL);
DeclareSciCallV0(CopyAllowLine, COPYALLOWLINE);
DeclareSciCallV2(CopyText, COPYTEXT, DocPos, length, const char*, text);
DeclareSciCallR2(GetText, GETTEXT, DocPos, DocPos, length, const char*, text); // NULL: w/o terminating '\0' (SCI v515)
DeclareSciCallR01(GetTextRangeFull, GETTEXTRANGEFULL, DocPos, struct Sci_TextRange*, textrange);
DeclareSciCallR01(GetTextRangeFull, GETTEXTRANGEFULL, DocPos, struct Sci_TextRangeFull*, textrange);
DeclareSciCallV0(UpperCase, UPPERCASE);
DeclareSciCallV0(LowerCase, LOWERCASE);
DeclareSciCallV2(ReplaceRectangular, REPLACERECTANGULAR, DocPos, length, const char *, text);

View File

@ -2064,7 +2064,7 @@ void Style_SetBookmark(HWND hwnd, bool bShowMargin)
//
void Style_SetChangeHistory(HWND hwnd, bool bShowMargin)
{
SciCall_SetMarginWidthN(MARGIN_SCI_CHGHIST, (bShowMargin ? _GetMarkerMarginWidth(hwnd) : 0));
SciCall_SetMarginWidthN(MARGIN_SCI_CHGHIST, (bShowMargin ? _GetMarkerMarginWidth(hwnd) + 4 : 0));
}
@ -2164,11 +2164,16 @@ void Style_SetMargin(HWND hwnd, LPCWSTR lpszStyle) /// iStyle == STYLE_LINENUMBE
// --- Change History ---
SciCall_SetMarginBackN(MARGIN_SCI_CHGHIST, clrMarginBack);
SciCall_SetMarginSensitiveN(MARGIN_SCI_CHGHIST, false);
SciCall_MarkerSetBack(SC_MARKNUM_HISTORY_MODIFIED, clrMarginBack);
//SciCall_MarkerSetBack(SC_MARKNUM_HISTORY_REVERTED_TO_ORIGIN, clrMarginBack);
//SciCall_MarkerSetBack(SC_MARKNUM_HISTORY_SAVED, clrMarginBack);
//SciCall_MarkerSetBack(SC_MARKNUM_HISTORY_REVERTED_TO_MODIFIED, clrMarginBack);
// --- Code folding ---
SciCall_SetMarginBackN(MARGIN_SCI_FOLDING, clrMarginBack);
SciCall_SetMarginSensitiveN(MARGIN_SCI_FOLDING, true);
int fldStyleMrk = SC_CASE_LOWER;
Style_StrGetCase(wchBookMarkStyleStrg, &fldStyleMrk);
if (fldStyleMrk == SC_CASE_UPPER) { // circle style