[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
striconveha module: bug fixes
From: |
Bruno Haible |
Subject: |
striconveha module: bug fixes |
Date: |
Wed, 24 Jan 2007 01:45:07 +0100 (MET) |
User-agent: |
KMail/1.5.4 |
This fixes two bugs in the new striconveha module.
2007-01-23 Bruno Haible <address@hidden>
* lib/striconveha.c (mem_iconveha): Fix endless recursion. Try all
encodings without forgiving before trying any encoding with handler.
(str_iconveha): Try all encodings without forgiving before trying any
encoding with handler.
*** lib/striconveha.c 23 Jan 2007 01:09:41 -0000 1.2
--- lib/striconveha.c 24 Jan 2007 00:43:54 -0000
***************
*** 163,175 ****
for (alias = autodetect_list; alias != NULL; alias = alias->next)
if (strcmp (from_codeset, alias->name) == 0)
{
! const char * const *encodings = alias->encodings_to_try;
do
{
retval = mem_iconveha (src, srclen,
! from_codeset, to_codeset, handler,
! offsets, resultp, lengthp);
if (!(retval < 0 && errno == EILSEQ))
return retval;
encodings++;
--- 163,194 ----
for (alias = autodetect_list; alias != NULL; alias = alias->next)
if (strcmp (from_codeset, alias->name) == 0)
{
! const char * const *encodings;
+ if (handler != iconveh_error)
+ {
+ /* First try all encodings without any forgiving. */
+ encodings = alias->encodings_to_try;
+ do
+ {
+ retval = mem_iconveha (src, srclen,
+ *encodings, to_codeset,
+ iconveh_error, offsets,
+ resultp, lengthp);
+ if (!(retval < 0 && errno == EILSEQ))
+ return retval;
+ encodings++;
+ }
+ while (*encodings != NULL);
+ }
+
+ encodings = alias->encodings_to_try;
do
{
retval = mem_iconveha (src, srclen,
! *encodings, to_codeset,
! handler, offsets,
! resultp, lengthp);
if (!(retval < 0 && errno == EILSEQ))
return retval;
encodings++;
***************
*** 204,214 ****
for (alias = autodetect_list; alias != NULL; alias = alias->next)
if (strcmp (from_codeset, alias->name) == 0)
{
! const char * const *encodings = alias->encodings_to_try;
do
{
! result = str_iconveha (src, *encodings, to_codeset, handler);
if (!(result == NULL && errno == EILSEQ))
return result;
encodings++;
--- 223,252 ----
for (alias = autodetect_list; alias != NULL; alias = alias->next)
if (strcmp (from_codeset, alias->name) == 0)
{
! const char * const *encodings;
!
! if (handler != iconveh_error)
! {
! /* First try all encodings without any forgiving. */
! encodings = alias->encodings_to_try;
! do
! {
! result = str_iconveha (src,
! *encodings, to_codeset,
! iconveh_error);
! if (!(result == NULL && errno == EILSEQ))
! return result;
! encodings++;
! }
! while (*encodings != NULL);
! }
+ encodings = alias->encodings_to_try;
do
{
! result = str_iconveha (src,
! *encodings, to_codeset,
! handler);
if (!(result == NULL && errno == EILSEQ))
return result;
encodings++;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- striconveha module: bug fixes,
Bruno Haible <=