Skip to content

Commit 424b07a

Browse files
committed
Merge branch 'jc/latin-1' into maint
Some platforms no longer understand "latin-1" that is still seen in the wild in e-mail headers; replace them with "iso-8859-1" that is more widely known when conversion fails from/to it. * jc/latin-1: utf8: accept "latin-1" as ISO-8859-1 utf8: refactor code to decide fallback encoding
2 parents ad36dc8 + df37558 commit 424b07a

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

utf8.c

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,28 @@ char *reencode_string_iconv(const char *in, size_t insz, iconv_t conv, int *outs
489489
return out;
490490
}
491491

492+
static const char *fallback_encoding(const char *name)
493+
{
494+
/*
495+
* Some platforms do not have the variously spelled variants of
496+
* UTF-8, so let's fall back to trying the most official
497+
* spelling. We do so only as a fallback in case the platform
498+
* does understand the user's spelling, but not our official
499+
* one.
500+
*/
501+
if (is_encoding_utf8(name))
502+
return "UTF-8";
503+
504+
/*
505+
* Even though latin-1 is still seen in e-mail
506+
* headers, some platforms only install ISO-8859-1.
507+
*/
508+
if (!strcasecmp(name, "latin-1"))
509+
return "ISO-8859-1";
510+
511+
return name;
512+
}
513+
492514
char *reencode_string_len(const char *in, int insz,
493515
const char *out_encoding, const char *in_encoding,
494516
int *outsz)
@@ -501,17 +523,9 @@ char *reencode_string_len(const char *in, int insz,
501523

502524
conv = iconv_open(out_encoding, in_encoding);
503525
if (conv == (iconv_t) -1) {
504-
/*
505-
* Some platforms do not have the variously spelled variants of
506-
* UTF-8, so let's fall back to trying the most official
507-
* spelling. We do so only as a fallback in case the platform
508-
* does understand the user's spelling, but not our official
509-
* one.
510-
*/
511-
if (is_encoding_utf8(in_encoding))
512-
in_encoding = "UTF-8";
513-
if (is_encoding_utf8(out_encoding))
514-
out_encoding = "UTF-8";
526+
in_encoding = fallback_encoding(in_encoding);
527+
out_encoding = fallback_encoding(out_encoding);
528+
515529
conv = iconv_open(out_encoding, in_encoding);
516530
if (conv == (iconv_t) -1)
517531
return NULL;

0 commit comments

Comments
 (0)