Remove some redundant NULL checks and fix a free on error return.
authorTim Terriberry <tterribe@xiph.org>
Fri, 2 Mar 2012 23:38:12 +0000 (23:38 +0000)
committerTim Terriberry <tterribe@xiph.org>
Fri, 2 Mar 2012 23:38:12 +0000 (23:38 +0000)
ref_frame_data was being allocated with the aligned allocator, but
 freed with the normal _ogg_free() function on failure, which
 doesn't work.
This would only cause a problem if there was just enough memory to
 satisfy the reference frame allocation (just over 4.5 or 9 bytes
 per pixel) but not enough for the fragment buffer offets (1/16 or
 1/8th byte per pixel).

svn path=/trunk/theora/; revision=18219

lib/internal.c
lib/state.c

index 981f8e7..afbb6ef 100644 (file)
@@ -131,7 +131,6 @@ void **oc_malloc_2d(size_t _height,size_t _width,size_t _sz){
   datsz=rowsz*_height;
   /*Alloc array and row pointers.*/
   ret=(char *)_ogg_malloc(datsz+colsz);
-  if(ret==NULL)return NULL;
   /*Initialize the array.*/
   if(ret!=NULL){
     size_t   i;
@@ -154,7 +153,6 @@ void **oc_calloc_2d(size_t _height,size_t _width,size_t _sz){
   datsz=rowsz*_height;
   /*Alloc array and row pointers.*/
   ret=(char *)_ogg_calloc(datsz+colsz,1);
-  if(ret==NULL)return NULL;
   /*Initialize the array.*/
   if(ret!=NULL){
     size_t   i;
index 723649c..261ea81 100644 (file)
@@ -588,7 +588,7 @@ static int oc_state_ref_bufs_init(oc_theora_state *_state,int _nrefs){
    _ogg_malloc(_state->nfrags*sizeof(*frag_buf_offs));
   if(ref_frame_data==NULL||frag_buf_offs==NULL){
     _ogg_free(frag_buf_offs);
-    _ogg_free(ref_frame_data);
+    oc_aligned_free(ref_frame_data);
     return TH_EFAULT;
   }
   /*Set up the width, height and stride for the image buffers.*/