[Top][All Lists]
[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;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/stream.cpp server/stream...,
Sandro Santilli <=