[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog libbase/jpeg.cpp server/swf/tag... [relea
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog libbase/jpeg.cpp server/swf/tag... [release_0_8_1] |
Date: |
Sat, 18 Aug 2007 05:05:17 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Branch: release_0_8_1
Changes by: Sandro Santilli <strk> 07/08/18 05:05:17
Modified files:
. : ChangeLog
libbase : jpeg.cpp
server/swf : tag_loaders.cpp
Log message:
* libbase/jpeg.cpp (jpeg_error_exit): only print SWF errors if
configured to do so; (input_impl): throw an exception if
jpeg_read_header detected errors.
* server/swf/tag_loaders.cpp (jpeg_tables_loader,
define_bits_jpeg_loader): early exception checking to avoid
parser interruption on malformed embedded jpeg.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&only_with_tag=release_0_8_1&r1=1.3971.2.25&r2=1.3971.2.26
http://cvs.savannah.gnu.org/viewcvs/gnash/libbase/jpeg.cpp?cvsroot=gnash&only_with_tag=release_0_8_1&r1=1.17&r2=1.17.2.1
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/tag_loaders.cpp?cvsroot=gnash&only_with_tag=release_0_8_1&r1=1.123.2.4&r2=1.123.2.5
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3971.2.25
retrieving revision 1.3971.2.26
diff -u -b -r1.3971.2.25 -r1.3971.2.26
--- ChangeLog 18 Aug 2007 03:02:29 -0000 1.3971.2.25
+++ ChangeLog 18 Aug 2007 05:05:16 -0000 1.3971.2.26
@@ -1,3 +1,12 @@
+2007-08-18 Sandro Santilli <address@hidden>
+
+ * libbase/jpeg.cpp (jpeg_error_exit): only print SWF errors if
+ configured to do so; (input_impl): throw an exception if
+ jpeg_read_header detected errors.
+ * server/swf/tag_loaders.cpp (jpeg_tables_loader,
+ define_bits_jpeg_loader): early exception checking to avoid
+ parser interruption on malformed embedded jpeg.
+
2007-08-18 Nick Warne <address@hidden>
* plugin/klash/klash_part.cpp: use the -u switch when invoking
Index: libbase/jpeg.cpp
===================================================================
RCS file: /sources/gnash/gnash/libbase/jpeg.cpp,v
retrieving revision 1.17
retrieving revision 1.17.2.1
diff -u -b -r1.17 -r1.17.2.1
--- libbase/jpeg.cpp 7 Aug 2007 20:53:09 -0000 1.17
+++ libbase/jpeg.cpp 18 Aug 2007 05:05:17 -0000 1.17.2.1
@@ -349,7 +349,28 @@
setup_rw_source(&m_cinfo, in);
// Read the encoding tables.
- jpeg_read_header(&m_cinfo, FALSE);
+ int ret = jpeg_read_header(&m_cinfo, FALSE);
+ switch (ret)
+ {
+ case JPEG_SUSPENDED: // suspended due to lack
of data
+ throw gnash::ParserException("lack of
data during JPEG header parsing");
+ //log_debug("jpeg_read_header returned
JPEG_SUSPENDED");
+ break;
+ case JPEG_HEADER_OK: // Found valid image
datastream
+ //gnash::log_debug("unexpected:
jpeg_read_header returned JPEG_HEADER_OK [%s:%d]", __FILE__, __LINE__);
+ break;
+ case JPEG_HEADER_TABLES_ONLY: // Found valid
table-specs-only datastream
+ //log_debug("jpeg_read_header returned
JPEG_HEADER_TABLES_ONLY");
+ break;
+ default:
+ gnash::log_debug("unexpected:
jpeg_read_header returned %d [%s:%d]", ret, __FILE__, __LINE__);
+ break;
+ }
+
+ if ( errorOccurred )
+ {
+ throw gnash::ParserException("errors during
JPEG header parsing");
+ }
// Don't start reading any image data!
// App does that manually using start_image.
@@ -409,10 +430,10 @@
//log_debug("jpeg_read_header
returned JPEG_HEADER_OK");
break;
case JPEG_HEADER_TABLES_ONLY: // Found
valid table-specs-only datastream
- //log_debug("jpeg_read_header
returned JPEG_HEADER_TABLES_ONLY");
+ //gnash::log_debug("unexpected:
jpeg_read_header returned JPEG_HEADER_TABLES_ONLY [%s:%d]", __FILE__, __LINE__);
break;
default:
- //log_debug("jpeg_read_header
returned %d", ret);
+ gnash::log_debug("unexpected:
jpeg_read_header returned %d [%s:%d]", ret, __FILE__, __LINE__);
break;
}
}
@@ -495,7 +516,9 @@
static void jpeg_error_exit(j_common_ptr cinfo)
{
+ IF_VERBOSE_MALFORMED_SWF(
gnash::log_swferror("Internal jpeg error: %s",
cinfo->err->jpeg_message_table[cinfo->err->msg_code]);
+ );
// Set a flag to stop parsing
input_impl* impl = static_cast<input_impl*>(cinfo->client_data);
Index: server/swf/tag_loaders.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf/tag_loaders.cpp,v
retrieving revision 1.123.2.4
retrieving revision 1.123.2.5
diff -u -b -r1.123.2.4 -r1.123.2.5
--- server/swf/tag_loaders.cpp 10 Aug 2007 03:54:11 -0000 1.123.2.4
+++ server/swf/tag_loaders.cpp 18 Aug 2007 05:05:17 -0000 1.123.2.5
@@ -17,7 +17,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: tag_loaders.cpp,v 1.123.2.4 2007/08/10 03:54:11 strk Exp $ */
+/* $Id: tag_loaders.cpp,v 1.123.2.5 2007/08/18 05:05:17 strk Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -476,6 +476,7 @@
void
jpeg_tables_loader(stream* in, tag_type tag, movie_definition* m)
{
+ //GNASH_REPORT_FUNCTION;
assert(tag == SWF::JPEGTABLES);
IF_VERBOSE_PARSE
@@ -483,9 +484,21 @@
log_parse(_(" jpeg_tables_loader"));
);
- std::auto_ptr<jpeg::input>
j_in(jpeg::input::create_swf_jpeg2_header_only(in->get_underlying_stream()));
- assert(j_in.get());
+ std::auto_ptr<jpeg::input> j_in;
+ try
+ {
+
j_in.reset(jpeg::input::create_swf_jpeg2_header_only(in->get_underlying_stream()));
+ }
+ catch (std::exception& e)
+ {
+ IF_VERBOSE_MALFORMED_SWF(
+ log_swferror("Error creating header-only jpeg2 input: %s", e.what());
+ );
+ return;
+ }
+
+ log_debug("Setting jpeg loader to %p", j_in.get());
m->set_jpeg_loader(j_in);
}
@@ -504,18 +517,33 @@
// Read the image data.
//
- if (m->get_create_bitmaps() == DO_LOAD_BITMAPS)
- {
- //bitmap_info* bi = NULL;
+ if (m->get_create_bitmaps() != DO_LOAD_BITMAPS) return;
+
jpeg::input* j_in = m->get_jpeg_loader();
+ if ( ! j_in )
+ {
+ IF_VERBOSE_MALFORMED_SWF(
+ log_swferror(_("DEFINEBITS: No jpeg loader registered in movie
definition - discarding bitmap character %d"), character_id);
+ );
+ return;
+ }
+
assert(j_in);
j_in->discard_partial_buffer();
- std::auto_ptr<image::rgb> im ( image::read_swf_jpeg2_with_tables(j_in)
);
- //bi = render::create_bitmap_info_rgb(im);
- //delete im;
+ std::auto_ptr<image::rgb> im;
+ try
+ {
+ im.reset ( image::read_swf_jpeg2_with_tables(j_in) );
+ }
+ catch (std::exception& e)
+ {
+ IF_VERBOSE_MALFORMED_SWF(
+ log_swferror("Error reading jpeg2 with headers for character id %d:
%s", character_id, e.what());
+ );
+ return;
+ }
- //assert(im->get_ref_count() == 0);
bitmap_character_def* ch = new bitmap_character_def(im);
@@ -529,7 +557,6 @@
{
m->add_bitmap_character_def(character_id, ch);
}
- }
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog libbase/jpeg.cpp server/swf/tag... [release_0_8_1],
Sandro Santilli <=