gnash-commit
[Top][All Lists]
Advanced

[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);
        }
-    }
 }
 
 




reply via email to

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