gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/stream.cpp server/stream...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/stream.cpp server/stream...
Date: Fri, 14 Mar 2008 22:33:57 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/03/14 22:33:57

Modified files:
        .              : ChangeLog 
        server         : stream.cpp stream.h 
        server/parser  : filter_factory.cpp 

Log message:
        Fix parsing bug exposed by sevenload.de swf player, improved parse 
logging

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5918&r2=1.5919
http://cvs.savannah.gnu.org/viewcvs/gnash/server/stream.cpp?cvsroot=gnash&r1=1.48&r2=1.49
http://cvs.savannah.gnu.org/viewcvs/gnash/server/stream.h?cvsroot=gnash&r1=1.41&r2=1.42
http://cvs.savannah.gnu.org/viewcvs/gnash/server/parser/filter_factory.cpp?cvsroot=gnash&r1=1.10&r2=1.11

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5918
retrieving revision 1.5919
diff -u -b -r1.5918 -r1.5919
--- ChangeLog   14 Mar 2008 20:57:00 -0000      1.5918
+++ ChangeLog   14 Mar 2008 22:33:56 -0000      1.5919
@@ -1,5 +1,13 @@
 2008-03-14 Sandro Santilli <address@hidden>
 
+       * server/stream.{cpp,h}: substitute the ambiguos read_float
+         with read_short_float and read_long_float.
+       * server/parser/filter_factory.cpp: use read_long_float for
+         bitmap filter parsing (fixes a parse error in sevenload.de
+         player.swf); more verbose parsing.
+
+2008-03-14 Sandro Santilli <address@hidden>
+
        * server/swf/PlaceObject2Tag.cpp: log more about PlaceObject3
        * server/fill_style.cpp: use an int for the temporary num_gradients.
        * server/textformat.cpp: warn once about unimplemented TextFormat.

Index: server/stream.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/stream.cpp,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- server/stream.cpp   19 Feb 2008 19:20:54 -0000      1.48
+++ server/stream.cpp   14 Mar 2008 22:33:56 -0000      1.49
@@ -217,13 +217,24 @@
        return static_cast<float> ( read_s16() / 256.0f );
 }
 
-// Read a signed float value.
-float  stream::read_float()
+/// Read a 16bit (1:sign 5:exp 10:mantissa) floating point value
+float  stream::read_short_float()
 {
-       // align(); // read_s16 will align
+       // read_s16 will align
        return static_cast<float> ( read_s16() );
 }
 
+/// Read a 32bit (1:sign 8:exp 23:mantissa) floating point value
+float  stream::read_long_float()
+{
+       char data[4];
+       data[0] = read_u8();
+       data[1] = read_u8();
+       data[2] = read_u8();
+       data[3] = read_u8();
+       return *((float *)data);
+}
+
 // Read a 64-bit double value
 long double stream::read_d64()
 {

Index: server/stream.h
===================================================================
RCS file: /sources/gnash/gnash/server/stream.h,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -b -r1.41 -r1.42
--- server/stream.h     12 Feb 2008 16:48:38 -0000      1.41
+++ server/stream.h     14 Mar 2008 22:33:56 -0000      1.42
@@ -108,11 +108,17 @@
        ///
        float   read_short_sfixed();
 
-       /// Read a 16bit floating point value
+       /// Read a 16bit (1:sign 5:exp 10:mantissa) floating point value
        //
        /// aligned read
        ///
-       float   read_float();
+       float   read_short_float();
+
+       /// Read a 32bit (1:sign 8:exp 23:mantissa) floating point value
+       //
+       /// aligned read
+       ///
+       float   read_long_float();
 
        /// Read a 64-bit double value
        //

Index: server/parser/filter_factory.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/parser/filter_factory.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- server/parser/filter_factory.cpp    5 Mar 2008 03:56:02 -0000       1.10
+++ server/parser/filter_factory.cpp    14 Mar 2008 22:33:57 -0000      1.11
@@ -55,6 +55,10 @@
         count = static_cast<int> (in.read_u8());
     }
 
+    IF_VERBOSE_PARSE(
+    log_parse("   number of filters: %d", count);
+    );
+
     for (int i = 0; i < count; ++i)
     {
         BitmapFilter *the_filter = NULL;
@@ -131,6 +135,11 @@
 
     static_cast<void> (in.read_uint(5)); // Throw these away on purpose.
 
+    IF_VERBOSE_PARSE(
+    log_parse("   DropShadowFilter: blurX=%f blurY=%f",
+        m_blurX, m_blurY);
+    );
+
     return true;
 }
 
@@ -145,6 +154,11 @@
 
     static_cast<void> (in.read_uint(3)); // Throw these away.
 
+    IF_VERBOSE_PARSE(
+    log_parse("   BlurFilter: blurX=%f blurY=%f quality=%d",
+        m_blurX, m_blurY, m_quality);
+    );
+
     return true;
 }
 
@@ -165,6 +179,10 @@
 
     static_cast<void> (in.read_uint(6)); // Throw these away.
 
+    IF_VERBOSE_PARSE(
+    log_parse("   GlowFilter ");
+    );
+
     return true;
 }
 
@@ -199,6 +217,10 @@
     
     static_cast<void> (in.read_uint(4)); // Throw these away.
 
+    IF_VERBOSE_PARSE(
+    log_parse("   BevelFilter ");
+    );
+
     return true;
 }
 
@@ -242,6 +264,10 @@
 
     m_quality = static_cast<boost::uint8_t> (in.read_uint(4));
 
+    IF_VERBOSE_PARSE(
+    log_parse("   GradientGlowFilter ");
+    );
+
     return true;
 }
 
@@ -249,11 +275,11 @@
 {
     in.ensureBytes(2 + 8);
 
-    m_matrixX = in.read_u8();
-    m_matrixY = in.read_u8();
+    m_matrixX = in.read_u8(); // 1 byte
+    m_matrixY = in.read_u8(); // 1 byte
 
-    m_divisor = in.read_float();
-    m_bias = in.read_float();
+    m_divisor = in.read_long_float(); // 4 bytes
+    m_bias = in.read_long_float(); // 4 bytes
 
     size_t matrixCount = m_matrixX * m_matrixY;
 
@@ -262,7 +288,7 @@
     m_matrix.reserve(matrixCount);
     for (size_t i = 0; i < matrixCount; ++i)
     {
-        m_matrix.push_back(in.read_float());
+        m_matrix.push_back(in.read_long_float());
     }
 
     m_color = in.read_u8() << 16 + in.read_u8() << 8 + in.read_u8();
@@ -273,6 +299,10 @@
     m_clamp = in.read_bit(); 
     m_preserveAlpha = in.read_bit(); 
 
+    IF_VERBOSE_PARSE(
+    log_parse("   ConvolutionFilter ");
+    );
+
     return true;
 }
 
@@ -283,9 +313,21 @@
     m_matrix.reserve(20);
     for (int i = 0; i < 20; ++i)
     {
-        m_matrix.push_back(in.read_float());
+        m_matrix.push_back(in.read_long_float());
     }
 
+    IF_VERBOSE_PARSE(
+    log_parse("   ColorMatrixFilter: ");
+    log_parse("     %g, %g, %g, %g, %g",
+        m_matrix[0], m_matrix[1], m_matrix[2], m_matrix[3], m_matrix[4]);
+    log_parse("     %g, %g, %g, %g, %g",
+        m_matrix[5], m_matrix[6], m_matrix[7], m_matrix[8], m_matrix[9]);
+    log_parse("     %g, %g, %g, %g, %g",
+        m_matrix[10], m_matrix[11], m_matrix[12], m_matrix[13], m_matrix[14]);
+    log_parse("     %g, %g, %g, %g, %g",
+        m_matrix[15], m_matrix[16], m_matrix[17], m_matrix[18], m_matrix[19]);
+    );
+
     return true;
 }
 
@@ -327,6 +369,10 @@
 
     m_quality = static_cast<boost::uint8_t> (in.read_uint(4));
 
+    IF_VERBOSE_PARSE(
+    log_parse("   GradientBevelFilter ");
+    );
+
     return true;
 }
 




reply via email to

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