Browse Source

* patch from Ido to add error detection to iconvert's flush statement, since
that can also overflow. (mantis 13896)

git-svn-id: trunk@13331 -

marco 16 years ago
parent
commit
b17cfcabc6
1 changed files with 9 additions and 1 deletions
  1. 9 1
      packages/iconvenc/src/iconvert.inc

+ 9 - 1
packages/iconvenc/src/iconvert.inc

@@ -49,7 +49,15 @@ begin
 
     // iconv has a buffer that needs flushing, specially if the last char is not #0
     iconv(H, nil, nil, @Dst, @Outlen);
-
+    lerr:=cerrno;
+    if (iconvres=Cint(-1)) and (lerr=ESysE2BIG) then
+      begin
+        Offset:=Dst-PChar(Res);
+        SetLength(Res, Length(Res)+InLen*2+5); // 5 is minimally one utf-8 char
+        Dst:=PChar(Res)+Offset;
+        OutLen:=Length(Res)-Offset;
+        iconv(H, nil, nil, @Dst, @Outlen);
+      end;
     // trim output buffer
     SetLength(Res, Length(Res) - Outlen);
   finally