Browse Source

--- Merging r23524 into '.':
U rtl/inc/sstrings.inc
A tests/webtbs/tw23744.pp

# revisions: 23524
r23524 | jonas | 2013-01-26 20:27:17 +0100 (Sat, 26 Jan 2013) | 2 lines
Changed paths:
M /trunk/rtl/inc/sstrings.inc
A /trunk/tests/webtbs/tw23744.pp

* fixed inserting something in a shortstring past its maximum length
(mantis #23744)

git-svn-id: branches/fixes_2_6@25929 -

marco 11 years ago
parent
commit
40c4f4ea90
3 changed files with 26 additions and 2 deletions
  1. 1 0
      .gitattributes
  2. 10 2
      rtl/inc/sstrings.inc
  3. 15 0
      tests/webtbs/tw23744.pp

+ 1 - 0
.gitattributes

@@ -12086,6 +12086,7 @@ tests/webtbs/tw2328.pp svneol=native#text/plain
 tests/webtbs/tw2332.pp svneol=native#text/plain
 tests/webtbs/tw2332.pp svneol=native#text/plain
 tests/webtbs/tw2351.pp svneol=native#text/plain
 tests/webtbs/tw2351.pp svneol=native#text/plain
 tests/webtbs/tw2363.pp svneol=native#text/plain
 tests/webtbs/tw2363.pp svneol=native#text/plain
+tests/webtbs/tw23744.pp svneol=native#text/plain
 tests/webtbs/tw2377.pp svneol=native#text/plain
 tests/webtbs/tw2377.pp svneol=native#text/plain
 tests/webtbs/tw2378.pp svneol=native#text/plain
 tests/webtbs/tw2378.pp svneol=native#text/plain
 tests/webtbs/tw2382.pp svneol=native#text/plain
 tests/webtbs/tw2382.pp svneol=native#text/plain

+ 10 - 2
rtl/inc/sstrings.inc

@@ -62,7 +62,11 @@ begin
   if index<1 then
   if index<1 then
    index:=1;
    index:=1;
   if index>length(s) then
   if index>length(s) then
-   index:=length(s)+1;
+   begin
+     index:=length(s)+1;
+     if index>high(s) then
+      exit;
+   end;
   indexlen:=Length(s)-Index+1;
   indexlen:=Length(s)-Index+1;
   srclen:=length(Source);
   srclen:=length(Source);
   if sizeInt(length(source))+sizeint(length(s))>=sizeof(s) then
   if sizeInt(length(source))+sizeint(length(s))>=sizeof(s) then
@@ -89,7 +93,11 @@ begin
   if index<1 then
   if index<1 then
    index:=1;
    index:=1;
   if index>length(s) then
   if index>length(s) then
-   index:=length(s)+1;
+   begin
+     index:=length(s)+1;
+     if index>high(s) then
+      exit;
+   end;
   indexlen:=Length(s)-Index+1;
   indexlen:=Length(s)-Index+1;
   if (sizeint(length(s))+1=sizeof(s)) and (indexlen>0) then
   if (sizeint(length(s))+1=sizeof(s)) and (indexlen>0) then
    dec(indexlen);
    dec(indexlen);

+ 15 - 0
tests/webtbs/tw23744.pp

@@ -0,0 +1,15 @@
+var
+  S:String[16];
+  C:Char = '?';
+  inss: string = 'abc';
+begin
+  S:='DefineTestString';
+  Insert(C,S,20);
+  if (length(s)>16) or
+     (s<>'DefineTestString') then
+    halt(1);
+  insert(inss,s,20);
+  if (length(s)>16) or
+     (s<>'DefineTestString') then
+    halt(2);
+end.