Просмотр исходного кода

replace unknown multibytes with ? in UTF8ToCharset (Closes: #545208)
instead of ignoring the returncode and truncating the string on error

David Kalnischkies лет назад: 17
Родитель
Сommit
1f99b6d338
2 измененных файлов с 15 добавлено и 2 удалено
  1. 13 2
      apt-pkg/contrib/strutl.cc
  2. 2 0
      debian/changelog

+ 13 - 2
apt-pkg/contrib/strutl.cc

@@ -67,9 +67,20 @@ bool UTF8ToCodeset(const char *codeset, const string &orig, string *dest)
   outbuf = new char[insize+1];
   outptr = outbuf;
 
-  iconv(cd, &inptr, &insize, &outptr, &outsize);
-  *outptr = '\0';
+  while (insize != 0)
+  {
+     size_t const err = iconv(cd, &inptr, &insize, &outptr, &outsize);
+     if (err == (size_t)(-1))
+     {
+	insize--;
+	outsize++;
+	inptr++;
+	*outptr = '?';
+	outptr++;
+     }
+  }
 
+  *outptr = '\0';
   *dest = outbuf;
   delete[] outbuf;
   

+ 2 - 0
debian/changelog

@@ -20,6 +20,8 @@ apt (0.7.24) UNRELEASED; urgency=low
     - simplify the makefiles needed for po4a manpages
   * apt-pkg/contrib/configuration.cc:
     - add a helper to easily get a vector of strings from the config
+  * apt-pkg/contrib/strutl.cc:
+    - replace unknown multibytes with ? in UTF8ToCharset (Closes: #545208)
 
  -- David Kalnischkies <kalnischkies@gmail.com>  Fri, 28 Aug 2009 09:40:08 +0200