diff options
| author | R. Bernstein <rocky@gnu.org> | 2018-05-18 05:34:55 -0400 |
|---|---|---|
| committer | R. Bernstein <rocky@gnu.org> | 2018-05-18 05:34:55 -0400 |
| commit | 75c55514e6c7e621874762e14c6d40d648ecf87c (patch) | |
| tree | e29a15aa155ad73661b8f1fa44634c4837ae9864 | |
| parent | 8c0de2d3f0324ecf3fd135589589dcd783c15556 (diff) | |
| download | libcdio-75c55514e6c7e621874762e14c6d40d648ecf87c.tar.gz | |
Tolerate cdtext UTF-8 failures
From Serge Pouliquen:
my cd text is containing bad characters and convertion to utf8 is failing
I attached cd-toc from cdrdao [see issue #53929 - https://savannah.gnu.org/bugs/?53929]
I propose to check error returned during utf8 convertion.
In case of error, the read value from cd wil be used without any convertion. In my case, only one character was useless instead of the whole line to be absent.
I don't know if it's a good idea to add that fallback mode...
| -rw-r--r-- | lib/driver/cdtext.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/driver/cdtext.c b/lib/driver/cdtext.c index b944d54..8143dc7 100644 --- a/lib/driver/cdtext.c +++ b/lib/driver/cdtext.c @@ -501,11 +501,12 @@ cdtext_set(cdtext_t *p_cdtext, cdtext_field_t key, const uint8_t *value, /* recode to UTF-8 */ if (NULL != charset) { cdio_utf8_t *utf8_str = NULL; - cdio_charset_to_utf8((const char*) value, strlen((const char*)value), - &utf8_str, charset); - p_cdtext->block[p_cdtext->block_i].track[track].field[key] = (char *)utf8_str; - } else - p_cdtext->block[p_cdtext->block_i].track[track].field[key] = strdup((const char *)value); + bool retval; + retval = cdio_charset_to_utf8((const char*) value, strlen((const char*)value), + &utf8_str, charset); + if (retval == 0) return; + } + p_cdtext->block[p_cdtext->block_i].track[track].field[key] = strdup((const char *)value); } #define CDTEXT_COMPARE_CHAR(buf, c, db) ((buf)[0] == c && (! db || (buf)[1] == c) ) |
