浏览代码

* 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 年之前
父节点
当前提交
b17cfcabc6
共有 1 个文件被更改,包括 9 次插入1 次删除
  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