Skip to content

Commit 40a52cd

Browse files
committed
Use bounded memmove for trimtrailingspace selections
1 parent ef6c8dd commit 40a52cd

1 file changed

Lines changed: 20 additions & 19 deletions

File tree

SRC/NPPTextFX.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3666,25 +3666,26 @@ EXTERNC unsigned extendblockspaces(char **dest,unsigned *destsz,unsigned *destle
36663666
#undef lold
36673667
}
36683668

3669-
EXTERNC unsigned trimtrailingspace(char *dest,unsigned *destlen) {
3670-
#define lnew 0
3671-
unsigned n=0,lold;
3672-
char *d,*dp,*end;
3673-
if (dest) {
3674-
for(d=dest,end=dest+*destlen;d<end; ) {
3675-
dp=d;
3676-
d=memcspn(d,end,"\r\n",2);
3677-
for(d--,lold=0; d>=dp && *d==' '; d--, lold++);
3678-
d++;
3679-
if (lnew != lold) {
3680-
memmovetest(d+lnew,d+lold,*destlen-(d-dest)-lold+1);
3681-
*destlen += lnew-lold;
3682-
end += lnew-lold;
3683-
n++;
3684-
}
3685-
d=memspn(d,end,"\r\n",2);
3686-
}
3687-
}
3669+
EXTERNC unsigned trimtrailingspace(char *dest,unsigned *destlen) {
3670+
#define lnew 0
3671+
unsigned n=0,lold;
3672+
char *d,*lineend,*trimstart,*end;
3673+
if (dest) {
3674+
for(d=dest,end=dest+*destlen;d<end; ) {
3675+
lineend=memcspn(d,end,"\r\n",2);
3676+
trimstart=lineend;
3677+
while(trimstart>d && trimstart[-1]==' ') trimstart--;
3678+
lold=(unsigned)(lineend-trimstart);
3679+
if (lnew != lold) {
3680+
memmove(trimstart+lnew,lineend,*destlen-(unsigned)(lineend-dest));
3681+
*destlen += lnew-lold;
3682+
end += lnew-lold;
3683+
n++;
3684+
lineend=trimstart;
3685+
}
3686+
d=memspn(lineend,end,"\r\n",2);
3687+
}
3688+
}
36883689
return(n);
36893690
#undef lnew
36903691
}

0 commit comments

Comments
 (0)