summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Bernstein <rocky@gnu.org>2018-05-18 05:34:55 -0400
committerR. Bernstein <rocky@gnu.org>2018-05-18 05:34:55 -0400
commit75c55514e6c7e621874762e14c6d40d648ecf87c (patch)
treee29a15aa155ad73661b8f1fa44634c4837ae9864
parent8c0de2d3f0324ecf3fd135589589dcd783c15556 (diff)
downloadlibcdio-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.c11
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) )