From 5ece00a7ee467e747c00a587e8144aee8fc545b1 Mon Sep 17 00:00:00 2001 From: Rainman74 Date: Tue, 17 Feb 2026 19:36:43 +0100 Subject: [PATCH 1/2] Use memspn for safe EOL stepping after block replacements --- SRC/NPPTextFX.cpp | 51 ++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/SRC/NPPTextFX.cpp b/SRC/NPPTextFX.cpp index 705022d..3b51571 100644 --- a/SRC/NPPTextFX.cpp +++ b/SRC/NPPTextFX.cpp @@ -3666,25 +3666,26 @@ EXTERNC unsigned extendblockspaces(char **dest,unsigned *destsz,unsigned *destle #undef lold } -EXTERNC unsigned trimtrailingspace(char *dest,unsigned *destlen) { -#define lnew 0 - unsigned n=0,lold; - char *d,*dp,*end; - if (dest) { - for(d=dest,end=dest+*destlen;d=dp && *d==' '; d--, lold++); - d++; - if (lnew != lold) { - memmovetest(d+lnew,d+lold,*destlen-(d-dest)-lold+1); - *destlen += lnew-lold; - end += lnew-lold; - n++; - } - d=memspn(d,end,"\r\n",2); - } - } +EXTERNC unsigned trimtrailingspace(char *dest,unsigned *destlen) { +#define lnew 0 + unsigned n=0,lold; + char *d,*lineend,*trimstart,*end; + if (dest) { + for(d=dest,end=dest+*destlen;dd && trimstart[-1]==' ') trimstart--; + lold=(unsigned)(lineend-trimstart); + if (lnew != lold) { + memmove(trimstart+lnew,lineend,*destlen-(unsigned)(lineend-dest)); + *destlen += lnew-lold; + end += lnew-lold; + n++; + lineend=trimstart; + } + d=memspn(lineend,end,"\r\n",2); + } + } return(n); #undef lnew } @@ -4954,8 +4955,7 @@ EXTERNC void convertall(char cmd,unsigned flags,const char *s1,const char *s2,co SENDMSGTOCED(currentEdit, SCI_REPLACETARGET, chn, d); } d += chn; - if ((d[0]=='\r' && d[1]=='\n') || (d[0]=='\n' && d[1]=='\r')) d+=2; - else if (d[0]=='\r' || d[0]=='\n') d++; + d = memspn(d,end,"\r\n",2); } /*curpos = lpe[blocklines-1]+SENDMSGTOCED(currentEdit, SCI_POSITIONFROMLINE, p1line+blocklines-1, 0); if (curpos=sellen) p2 += sln-sellen; + else p2 -= sellen-sln; if (rv) { if (flags&CAFLAG_GETALLWHENNOSELECTION) { SENDMSGTOCED(currentEdit, SCI_SETTEXT, 0, ""); @@ -5862,7 +5863,11 @@ EXTERNC void detectprplist(void) { EXTERNC void adjustprplist(INT_CURRENTEDIT,unsigned curpos) { unsigned t1=SENDMSGTOCED(currentEdit, SCI_GETLENGTH,0,0); if (g_PopLists[g_uPopListNo].poptextlen) { - unsigned i; for(i=0; icurpos) g_PopLists[g_uPopListNo].poplist[i]+=t1-g_PopLists[g_uPopListNo].poptextlen; + unsigned i; for(i=0; icurpos) { + if (t1>=g_PopLists[g_uPopListNo].poptextlen) g_PopLists[g_uPopListNo].poplist[i]+=t1-g_PopLists[g_uPopListNo].poptextlen; + else if (g_PopLists[g_uPopListNo].poplist[i]>=g_PopLists[g_uPopListNo].poptextlen-t1) g_PopLists[g_uPopListNo].poplist[i]-=g_PopLists[g_uPopListNo].poptextlen-t1; + else g_PopLists[g_uPopListNo].poplist[i]=0; + } } g_PopLists[g_uPopListNo].poptextlen=t1; } From 33942379f1a4ddd760a8ec5d7c8ada00c490df65 Mon Sep 17 00:00:00 2001 From: Rainman74 Date: Tue, 17 Feb 2026 19:38:45 +0100 Subject: [PATCH 2/2] Update CI_build.yml --- .github/workflows/CI_build.yml | 46 ---------------------------------- 1 file changed, 46 deletions(-) diff --git a/.github/workflows/CI_build.yml b/.github/workflows/CI_build.yml index 17e26be..8b13789 100644 --- a/.github/workflows/CI_build.yml +++ b/.github/workflows/CI_build.yml @@ -1,47 +1 @@ -name: CI build -on: - pull_request: - push: - branches: [main] - -jobs: - build: - runs-on: windows-latest - - strategy: - fail-fast: false - matrix: - config: [Debug Unicode, Release Unicode] - platform: [Win32, x64] - - name: ${{ matrix.config }} / ${{ matrix.platform }} - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup MSBuild - uses: microsoft/setup-msbuild@v2 - - - name: Setup NuGet - uses: NuGet/setup-nuget@v2 - - - name: Restore - run: nuget restore - - - name: Build - run: | - msbuild NppTextFX2.sln ^ - /p:Configuration="${{ matrix.config }}" ^ - /p:Platform="${{ matrix.platform }}" ^ - /m - - # 🔵 Artefakte für Release builds (Win32 + x64) - - name: Upload Release artifact - if: matrix.config == 'Release Unicode' - uses: actions/upload-artifact@v4 - with: - name: NppTextFX2_${{ matrix.platform }} - path: | - **/${{ matrix.platform }}/Release*/NppTextFX*.dll