List Info

Thread: r200 - trunk/libnut/demuxer.c




r200 - trunk/libnut/demuxer.c
user name
2006-11-12 06:41:01
Author: ods15
Date: Sun Nov 12 07:41:00 2006
New Revision: 200

Modified:
   trunk/libnut/demuxer.c

Log:
safer reallocs in demuxer to prevent memleaks


Modified: trunk/libnut/demuxer.c
============================================================
==================
--- trunk/libnut/demuxer.c	(original)
+++ trunk/libnut/demuxer.c	Sun Nov 12 07:41:00 2006
 -252,8
+252,9 
 	if (nut->max_distance > 65536) nut->max_distance
= 65536;
 
 	GET_V(tmp, nut->timebase_count);
+	nut->alloc->free(nut->tb); nut->tb = NULL;
 	ERROR(SIZE_MAX/sizeof(nut_timebase_t) <
nut->timebase_count, -ERR_OUT_OF_MEM);
-	nut->tb = nut->alloc->realloc(nut->tb,
nut->timebase_count * sizeof(nut_timebase_t));
+	nut->tb =
nut->alloc->malloc(nut->timebase_count *
sizeof(nut_timebase_t));
 	ERROR(!nut->tb, -ERR_OUT_OF_MEM);
 	for (i = 0; i < nut->timebase_count; i++) {
 		GET_V(tmp, nut->tb[i].nom);
 -507,6
+508,7 
 	syncpoint_list_t * sl = &nut->syncpoints;
 	uint64_t x;
 	int i;
+	void * a, * b, * c;
 
 	CHECK(get_bytes(nut->i, 8, &x));
 	ERROR(x != INDEX_STARTCODE, -ERR_GENERAL_ERROR);
 -523,10
+525,13 
 	ERROR(SIZE_MAX/x < sizeof(syncpoint_t) || SIZE_MAX/x
< sizeof(uint64_t) * nut->stream_count,
-ERR_OUT_OF_MEM);
 
 	sl->alloc_len = sl->len = x;
-	sl->s = nut->alloc->realloc(sl->s,
sl->alloc_len * sizeof(syncpoint_t));
-	sl->pts = nut->alloc->realloc(sl->pts,
sl->alloc_len * sizeof(uint64_t) * nut->stream_count);
-	sl->eor = nut->alloc->realloc(sl->eor,
sl->alloc_len * sizeof(uint64_t) * nut->stream_count);
-	ERROR(!sl->s || !sl->pts || !sl->eor,
-ERR_OUT_OF_MEM);
+	a = nut->alloc->realloc(sl->s, sl->alloc_len *
sizeof(syncpoint_t));
+	b = nut->alloc->realloc(sl->pts, sl->alloc_len
* nut->stream_count * sizeof(uint64_t));
+	c = nut->alloc->realloc(sl->eor, sl->alloc_len
* nut->stream_count * sizeof(uint64_t));
+	ERROR(!a || !b || !c, -ERR_OUT_OF_MEM);
+	sl->s = a;
+	sl->pts = b;
+	sl->eor = c;
 
 	for (i = 0; i < sl->len; i++) {
 		GET_V(tmp, sl->s[i].pos);
_______________________________________________
NUT-devel mailing list
NUT-develmplayerhq.hu

http://lists.mplayerhq.hu/mailman/listinfo/nut-devel
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )