From c03568412615ffb294650149c5f6de18288f0976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Tue, 18 Dec 2007 21:10:55 +0100 Subject: Set the values of buffers in the same if as they are tested. Use calloc(1, ...) rather than using memset right afterward. --- src/demuxers/asfheader.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) (limited to 'src/demuxers/asfheader.c') diff --git a/src/demuxers/asfheader.c b/src/demuxers/asfheader.c index 26a61d8fd..35bd187df 100644 --- a/src/demuxers/asfheader.c +++ b/src/demuxers/asfheader.c @@ -130,8 +130,7 @@ static uint8_t *asf_reader_get_bytes(asf_reader_t *reader, size_t size) { if ((reader->size - reader->pos) < size) return NULL; - buffer = malloc(size); - if (!buffer) + if (! (buffer = malloc(size)) ) return NULL; memcpy(buffer, reader->buffer + reader->pos, size); reader->pos += size; @@ -241,8 +240,7 @@ static int asf_header_parse_file_properties(asf_header_t *header, uint8_t *buffe return 0; } - asf_file = malloc(sizeof(asf_file_t)); - if (!asf_file) { + if (! (asf_file = malloc(sizeof(asf_file_t))) ) { lprintf("cannot allocate asf_file_struct\n"); return 0; } @@ -296,8 +294,7 @@ static int asf_header_parse_stream_properties(asf_header_t *header, uint8_t *buf if (buffer_len < 54) goto exit_error; - asf_stream = malloc(sizeof(asf_stream_t)); - if (!asf_stream) + if (! (asf_stream = malloc(sizeof(asf_stream_t))) ) goto exit_error; asf_reader_init(&reader, buffer, buffer_len); @@ -363,8 +360,7 @@ static int asf_header_parse_stream_extended_properties(asf_header_t *header, uin if (buffer_len < 64) return 0; - asf_stream_extension = malloc(sizeof(asf_stream_extension_t)); - if (!asf_stream_extension) + if (! (asf_stream_extension = malloc(sizeof(asf_stream_extension_t))) ) return 0; asf_reader_init(&reader, buffer, buffer_len); @@ -581,10 +577,8 @@ static int asf_header_parse_content_description(asf_header_t *header_pub, uint8_ if (buffer_len < 10) return 0; - content = malloc(sizeof(asf_content_t)); - if (!content) + if (! (content = calloc(1, sizeof(asf_content_t))) ) return 0; - memset(content, 0, sizeof(asf_content_t)); asf_reader_init(&reader, buffer, buffer_len); asf_reader_get_16(&reader, &title_length); @@ -611,10 +605,8 @@ asf_header_t *asf_header_new (uint8_t *buffer, int buffer_len) { uint32_t object_count; uint16_t junk; - asf_header = malloc(sizeof(asf_header_internal_t)); - if (!asf_header) + if (! (asf_header = calloc(1, sizeof(asf_header_internal_t))) ) return NULL; - memset(asf_header, 0, sizeof(asf_header_internal_t)); lprintf("parsing_asf_header\n"); if (buffer_len < 6) { @@ -697,10 +689,8 @@ asf_header_t *asf_header_new (uint8_t *buffer, int buffer_len) { } if (!asf_header->pub.content) { lprintf("no content object present\n"); - asf_header->pub.content = malloc(sizeof(asf_content_t)); - if (!asf_header->pub.content) + if (! (asf_header->pub.content = calloc(1, sizeof(asf_content_t))) ) goto exit_error; - memset(asf_header->pub.content, 0, sizeof(asf_content_t)); } return &asf_header->pub; -- cgit v1.2.3 From de2319031060f7ac4e7e4c169944490e43539777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Tue, 18 Dec 2007 21:12:12 +0100 Subject: Check for buffer_len before allocating the buffer, so it hasn't to be freed. --- src/demuxers/asfheader.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/demuxers/asfheader.c') diff --git a/src/demuxers/asfheader.c b/src/demuxers/asfheader.c index 35bd187df..720bf5423 100644 --- a/src/demuxers/asfheader.c +++ b/src/demuxers/asfheader.c @@ -605,16 +605,15 @@ asf_header_t *asf_header_new (uint8_t *buffer, int buffer_len) { uint32_t object_count; uint16_t junk; - if (! (asf_header = calloc(1, sizeof(asf_header_internal_t))) ) - return NULL; - lprintf("parsing_asf_header\n"); if (buffer_len < 6) { printf("invalid buffer size\n"); - free(asf_header); return NULL; } + if (! (asf_header = calloc(1, sizeof(asf_header_internal_t))) ) + return NULL; + asf_header->iconv_cd = iconv_open ("UTF-8", "UCS-2LE"); if (asf_header->iconv_cd == (iconv_t)-1) { printf("iconv open error\n"); -- cgit v1.2.3 From b3945e2e0132309fd2eaf583e4ad9c0245c7828e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20=27Flameeyes=27=20Petten=C3=B2?= Date: Tue, 18 Dec 2007 21:28:51 +0100 Subject: Only open (and close) iconv in asf_header_parse_content_description. This way the iconv descriptor is not left open during the whole ASF demuxing. --- src/demuxers/asfheader.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) (limited to 'src/demuxers/asfheader.c') diff --git a/src/demuxers/asfheader.c b/src/demuxers/asfheader.c index 720bf5423..23692574e 100644 --- a/src/demuxers/asfheader.c +++ b/src/demuxers/asfheader.c @@ -63,7 +63,6 @@ struct asf_header_internal_s { /* private part */ int number_count; uint16_t numbers[ASF_MAX_NUM_STREAMS]; - iconv_t iconv_cd; uint8_t *bitrate_pointers[ASF_MAX_NUM_STREAMS]; }; @@ -573,6 +572,7 @@ static int asf_header_parse_content_description(asf_header_t *header_pub, uint8_ asf_reader_t reader; asf_content_t *content; uint16_t title_length, author_length, copyright_length, description_length, rating_length; + iconv_t iconv_cd; if (buffer_len < 10) return 0; @@ -580,6 +580,9 @@ static int asf_header_parse_content_description(asf_header_t *header_pub, uint8_ if (! (content = calloc(1, sizeof(asf_content_t))) ) return 0; + if ( (iconv_cd = iconv_open("UTF-8", "UCS-2LE")) == (iconv_t)-1 ) + return 0; + asf_reader_init(&reader, buffer, buffer_len); asf_reader_get_16(&reader, &title_length); asf_reader_get_16(&reader, &author_length); @@ -587,13 +590,15 @@ static int asf_header_parse_content_description(asf_header_t *header_pub, uint8_ asf_reader_get_16(&reader, &description_length); asf_reader_get_16(&reader, &rating_length); - content->title = asf_reader_get_string(&reader, title_length, header->iconv_cd); - content->author = asf_reader_get_string(&reader, author_length, header->iconv_cd); - content->copyright = asf_reader_get_string(&reader, copyright_length, header->iconv_cd); - content->description = asf_reader_get_string(&reader, description_length, header->iconv_cd); - content->rating = asf_reader_get_string(&reader, rating_length, header->iconv_cd); + content->title = asf_reader_get_string(&reader, title_length, iconv_cd); + content->author = asf_reader_get_string(&reader, author_length, iconv_cd); + content->copyright = asf_reader_get_string(&reader, copyright_length, iconv_cd); + content->description = asf_reader_get_string(&reader, description_length, iconv_cd); + content->rating = asf_reader_get_string(&reader, rating_length, iconv_cd); header->pub.content = content; + + iconv_close(iconv_cd); return 1; } @@ -614,13 +619,6 @@ asf_header_t *asf_header_new (uint8_t *buffer, int buffer_len) { if (! (asf_header = calloc(1, sizeof(asf_header_internal_t))) ) return NULL; - asf_header->iconv_cd = iconv_open ("UTF-8", "UCS-2LE"); - if (asf_header->iconv_cd == (iconv_t)-1) { - printf("iconv open error\n"); - free(asf_header); - return NULL; - } - asf_reader_init(&reader, buffer, buffer_len); asf_reader_get_32(&reader, &object_count); asf_reader_get_16(&reader, &junk); @@ -755,9 +753,6 @@ void asf_header_delete (asf_header_t *header_pub) { asf_header_delete_stream_extended_properties(header->pub.stream_extensions[i]); } - if (header->iconv_cd != (iconv_t)-1) - iconv_close (header->iconv_cd); - free(header); } -- cgit v1.2.3