diff options
author | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2008-04-09 18:28:49 +0100 |
---|---|---|
committer | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2008-04-09 18:28:49 +0100 |
commit | 39939c95eff90545285a9a8f761d9fa6e9349358 (patch) | |
tree | b8ea1fa3f2ddf1627eeecbd889f47226b01a45d8 /src/demuxers/ebml.c | |
parent | 19357940a57c565ebe319729bd08d6e4800aff5d (diff) | |
parent | 628c4cbd9d023e74a7c6805d7ec0f163f2c172d1 (diff) | |
download | xine-lib-39939c95eff90545285a9a8f761d9fa6e9349358.tar.gz xine-lib-39939c95eff90545285a9a8f761d9fa6e9349358.tar.bz2 |
Merge from 1.2 main.
Diffstat (limited to 'src/demuxers/ebml.c')
-rw-r--r-- | src/demuxers/ebml.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/demuxers/ebml.c b/src/demuxers/ebml.c index 41a91371e..1e9a456d2 100644 --- a/src/demuxers/ebml.c +++ b/src/demuxers/ebml.c @@ -310,7 +310,25 @@ int ebml_read_ascii(ebml_parser_t *ebml, ebml_elem_t *elem, char *str) { int ebml_read_utf8 (ebml_parser_t *ebml, ebml_elem_t *elem, char *str) { return ebml_read_ascii (ebml, elem, str); } +#endif + +char *ebml_alloc_read_ascii (ebml_parser_t *ebml, ebml_elem_t *elem) +{ + char *text; + if (elem->len >= 4096) + return NULL; + text = malloc(elem->len + 1); + if (text) + { + text[elem->len] = '\0'; + if (ebml_read_ascii (ebml, elem, text)) + return text; + free (text); + } + return NULL; +} +#if 0 int ebml_read_date (ebml_parser_t *ebml, ebml_elem_t *elem, int64_t *date) { return ebml_read_sint (ebml, elem, date); } @@ -414,10 +432,8 @@ int ebml_check_header(ebml_parser_t *ebml) { } case EBML_ID_DOCTYPE: { - char *text = malloc(elem.len + 1); - - text[elem.len] = '\0'; - if (!ebml_read_ascii (ebml, &elem, text)) + char *text = ebml_alloc_read_ascii (ebml, &elem); + if (!text) return 0; lprintf("doctype: %s\n", text); |