gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/swf/tag_loaders.cpp


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/swf/tag_loaders.cpp
Date: Wed, 28 Nov 2007 16:16:31 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/11/28 16:16:31

Modified files:
        .              : ChangeLog 
        server/swf     : tag_loaders.cpp 

Log message:
        (inflate_wrapper): don't read past end of tag, reads in chunks rather
        then byte-by-byte.  Fixes bug #21377.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4995&r2=1.4996
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/tag_loaders.cpp?cvsroot=gnash&r1=1.155&r2=1.156

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4995
retrieving revision 1.4996
diff -u -b -r1.4995 -r1.4996
--- ChangeLog   28 Nov 2007 15:38:53 -0000      1.4995
+++ ChangeLog   28 Nov 2007 16:16:30 -0000      1.4996
@@ -1,5 +1,8 @@
 2007-11-28 Sandro Santilli <address@hidden>
 
+       * server/swf/tag_loaders.cpp (inflate_wrapper): don't read past
+         end of tag, reads in chunks rather then byte-by-byte.
+         Fixes bug #21377.
        * server/impl.cpp: stub support for png loading.
 
 2007-11-28 Sandro Santilli <address@hidden>

Index: server/swf/tag_loaders.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf/tag_loaders.cpp,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -b -r1.155 -r1.156
--- server/swf/tag_loaders.cpp  27 Nov 2007 23:36:13 -0000      1.155
+++ server/swf/tag_loaders.cpp  28 Nov 2007 16:16:30 -0000      1.156
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: tag_loaders.cpp,v 1.155 2007/11/27 23:36:13 strk Exp $ */
+/* $Id: tag_loaders.cpp,v 1.156 2007/11/28 16:16:30 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -346,14 +346,23 @@
        return;
     }
 
-    uint8_t buf[1];
+#define CHUNKSIZE 256
 
-    for (;;) {
-       // Fill a one-byte (!) buffer.
-       // TODO: sub-optimal, read_u8 also calls align needlessly
-       buf[0] = in.read_u8();
+    uint8_t buf[CHUNKSIZE];
+    unsigned long endTagPos = in.get_tag_end_position();
+
+    for (;;)
+    {
+       unsigned int chunkSize = CHUNKSIZE;
+       assert(in.get_position() <= endTagPos);
+        unsigned int availableBytes =  endTagPos - in.get_position();
+       if ( availableBytes < chunkSize ) chunkSize = availableBytes;
+       
+       // Fill the buffer
+       assert(sizeof(char) == sizeof(uint8_t));
+       in.read((char*)buf, chunkSize);
        d_stream.next_in = &buf[0];
-       d_stream.avail_in = 1;
+       d_stream.avail_in = chunkSize;
 
        err = inflate(&d_stream, Z_SYNC_FLUSH);
        if (err == Z_STREAM_END) break;




reply via email to

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