diff options
author | Marton Balint <cus@passwd.hu> | 2019-02-10 00:33:04 +0100 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2019-02-13 22:01:39 +0100 |
commit | b35843e3913df57da3a6bb0ce80a4f2b75d374b4 (patch) | |
tree | 094eb3cee52ba426f5bf10f0058b0bc4dcc08998 /libavformat/mpegts.c | |
parent | dd6dd49f1d5e5092d7f2da8b2af0fa89b2be99c1 (diff) | |
download | ffmpeg-b35843e3913df57da3a6bb0ce80a4f2b75d374b4.tar.gz |
avformat/mpegts: also convert strings without a specified encoding to UTF-8
The default codepage (ISO6937) should be used in this case.
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/mpegts.c')
-rw-r--r-- | libavformat/mpegts.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 2594b1eeb1..e7bbf3e488 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -678,7 +678,7 @@ static char *getstr8(const uint8_t **pp, const uint8_t *p_end) if (len > p_end - p) return NULL; #if CONFIG_ICONV - if (len && *p < 0x20) { + if (len) { const char *encodings[] = { "ISO6937", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "ISO-8859-10", "ISO-8859-11", @@ -688,16 +688,20 @@ static char *getstr8(const uint8_t **pp, const uint8_t *p_end) }; iconv_t cd; char *in, *out; - size_t inlen = len - 1, outlen = inlen * 6 + 1; + size_t inlen = len, outlen = inlen * 6 + 1; if (len >= 3 && p[0] == 0x10 && !p[1] && p[2] && p[2] <= 0xf && p[2] != 0xc) { char iso8859[12]; snprintf(iso8859, sizeof(iso8859), "ISO-8859-%d", p[2]); - inlen -= 2; + inlen -= 3; in = (char *)p + 3; cd = iconv_open("UTF-8", iso8859); - } else { + } else if (p[0] < 0x20) { + inlen -= 1; in = (char *)p + 1; cd = iconv_open("UTF-8", encodings[*p]); + } else { + in = (char *)p; + cd = iconv_open("UTF-8", encodings[0]); } if (cd == (iconv_t)-1) goto no_iconv; |