Pārlūkot izejas kodu

* 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 gadi atpakaļ
vecāks
revīzija
b17cfcabc6
1 mainītis faili ar 9 papildinājumiem un 1 dzēšanām
  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