The yoffset calculation in oc_dec_init_dummy_frame was incorrect.
authorTim Terriberry <tterribe@xiph.org>
Sat, 15 Jan 2011 02:01:47 +0000 (02:01 +0000)
committerTim Terriberry <tterribe@xiph.org>
Sat, 15 Jan 2011 02:01:47 +0000 (02:01 +0000)
This was only used when a stream started without a keyframe, and was
 initializing the wrong region of memory.
This was harmless (the region it initialized was still safely
 allocated, it just didn't cover all of the frame we wanted to use
 as a reference frame), but lead to unpredictable results and
 valgrind errors.
See https://bugzilla.mozilla.org/show_bug.cgi?id=625773

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

lib/decode.c

index a79dd3f..ae52426 100644 (file)
@@ -2077,8 +2077,7 @@ static void oc_dec_init_dummy_frame(th_dec_ctx *_dec){
   cheight=yheight>>!(info->pixel_fmt&2);
   yplane_sz=yhstride*(size_t)yheight+16;
   cplane_sz=chstride*(size_t)cheight;
-  yoffset=_dec->state.ref_ystride[0]*(yheight-1)-
-   (OC_UMV_PADDING+OC_UMV_PADDING*(ptrdiff_t)yhstride);
+  yoffset=yhstride*(ptrdiff_t)(yheight-OC_UMV_PADDING-1)+OC_UMV_PADDING;
   memset(_dec->state.ref_frame_data[0]-yoffset,0x80,yplane_sz+2*cplane_sz);
 }