gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/parser/video_stream_def.cpp


From: Tomas Groth
Subject: [Gnash-commit] gnash ChangeLog server/parser/video_stream_def.cpp
Date: Tue, 24 Jul 2007 22:48:12 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Tomas Groth <tgc>       07/07/24 22:48:12

Modified files:
        .              : ChangeLog 
        server/parser  : video_stream_def.cpp 

Log message:
                * server/parser/video_stream_def.cpp: Free the video frames
                  when deleting the video_stream_def object. Make the buffer
                  containing the video data 4 bytes bigger than needed to avoid
                  illegal reads from ffmpeg. Fixes bug #20440.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3817&r2=1.3818
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/video_stream_def.cpp?cvsroot=gnash&r1=1.10&r2=1.11

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3817
retrieving revision 1.3818
diff -u -b -r1.3817 -r1.3818
--- ChangeLog   24 Jul 2007 22:32:32 -0000      1.3817
+++ ChangeLog   24 Jul 2007 22:48:12 -0000      1.3818
@@ -1,3 +1,10 @@
+2007-07-24 Tomas Groth Christensen <address@hidden>
+
+       * server/parser/video_stream_def.cpp: Free the video frames
+         when deleting the video_stream_def object. Make the buffer
+         containing the video data 4 bytes bigger than needed to avoid
+         illegal reads from ffmpeg. Fixes bug #20440.
+
 2007-07-24 Sandro Santilli <address@hidden>
 
        * Makefile.am: define PHONY rules.

Index: server/parser/video_stream_def.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/video_stream_def.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/parser/video_stream_def.cpp  24 Jul 2007 11:09:06 -0000      1.10
+++ server/parser/video_stream_def.cpp  24 Jul 2007 22:48:12 -0000      1.11
@@ -16,7 +16,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 // 
-// $Id: video_stream_def.cpp,v 1.10 2007/07/24 11:09:06 tgc Exp $
+// $Id: video_stream_def.cpp,v 1.11 2007/07/24 22:48:12 tgc Exp $
 
 #include "video_stream_def.h"
 #include "video_stream_instance.h"
@@ -39,6 +39,10 @@
 
 video_stream_definition::~video_stream_definition()
 {
+       for (int32_t size = m_video_frames.size()-1; size >= 0; size--) {
+               delete m_video_frames[size];
+       }
+       m_video_frames.clear();
 }
 
 
@@ -71,9 +75,21 @@
        else if (tag == SWF::VIDEOFRAME)
        {
                in->skip_bytes(2); //int frameNum = in->read_u16();
-               int size = in->get_tag_end_position() - in->get_position();
+
+               // We need to make the buffer a bit bigger than the data
+               // to avoid libavcodec (ffmpeg) making illegal reads.
+               // The reason is a bit sketchy, but it seems that the h263
+               // decoder (perhaps other decoders as well) assumes that the
+               // buffer with the data is bigger than the data it contains.
+               // We make the buffer 4 bytes bigger than the data, and set
+               // them to 0.
+
+               // The data size is 4 bytes smaller than this, but because of 
+               // what is mentioned above we don't subtract the 4 bytes.
+               int size = in->get_tag_length();
                uint8_t* data = new uint8_t[size];
-               for (int i = 0; i < size; i++)
+               memset(data, 0, size);
+               for (int i = 0; i < size-4; i++) // The size-variable 4 bytes 
bigger than the data
                {
                        data[i] = in->read_u8();
                }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]