CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/02/07 16:29:36
Modified files: . : ChangeLog server/swf : tag_loaders.cpp Log message: * server/swf/tag_loaders.cpp: use log_swferror where appropriate, (swf_event::read): tolerate malformed header. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2262&r2=1.2263 http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/tag_loaders.cpp?cvsroot=gnash&r1=1.72&r2=1.73 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.2262 retrieving revision 1.2263 diff -u -b -r1.2262 -r1.2263 --- ChangeLog 7 Feb 2007 13:31:26 -0000 1.2262 +++ ChangeLog 7 Feb 2007 16:29:35 -0000 1.2263 @@ -1,8 +1,7 @@ -M ChangeLog -M server/as_object.cpp -M server/types.cpp -M server/asobj/Object.cpp -M server/vm/fn_call.h +2007-02-07 Sandro Santilli <[EMAIL PROTECTED]> + + * server/swf/tag_loaders.cpp: use log_swferror where appropriate, + (swf_event::read): tolerate malformed header. 2007-02-07 Sandro Santilli <[EMAIL PROTECTED]> Index: server/swf/tag_loaders.cpp =================================================================== RCS file: /sources/gnash/gnash/server/swf/tag_loaders.cpp,v retrieving revision 1.72 retrieving revision 1.73 diff -u -b -r1.72 -r1.73 --- server/swf/tag_loaders.cpp 7 Feb 2007 09:07:36 -0000 1.72 +++ server/swf/tag_loaders.cpp 7 Feb 2007 16:29:36 -0000 1.73 @@ -14,7 +14,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -/* $Id: tag_loaders.cpp,v 1.72 2007/02/07 09:07:36 strk Exp $ */ +/* $Id: tag_loaders.cpp,v 1.73 2007/02/07 16:29:36 strk Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -141,9 +141,11 @@ } else { - log_warning("frame_label_loader end position " SIZET_FMT ", " - "read up to " SIZET_FMT " (Malformed SWF?)", + IF_VERBOSE_MALFORMED_SWF( + log_swferror("frame_label_loader end position " SIZET_FMT ", " + "read up to " SIZET_FMT, end_tag, curr_pos); + ); } } @@ -735,8 +737,10 @@ } else { - log_error("define_font_info_loader: " + IF_VERBOSE_MALFORMED_SWF( + log_swferror("define_font_info_loader: " "can't find font w/ id %d", font_id); + ); } } @@ -860,15 +864,30 @@ action_buffer action; action.read(in); - if (action.get_length() != event_length) + size_t readlen = action.size(); + if (readlen > event_length) { - log_error("swf_event::read(), " + IF_VERBOSE_MALFORMED_SWF( + log_swferror("swf_event::read(), " "event_length = %d, " - "but read %lu", - event_length, - static_cast<unsigned long>(action.get_length())); + "but read " SIZET_FMT + ". Breaking for safety.", + event_length, readlen); + ); + // or should we just continue here ? break; } + else if ( readlen < event_length ) + { + IF_VERBOSE_MALFORMED_SWF( + log_swferror("swf_event::read(), " + "event_length = %d, " + "but read " SIZET_FMT + ". Skipping excessive bytes.", + event_length, readlen); + ); + in->skip_bytes(event_length - readlen); + } // 13 bits reserved, 19 bits used static const event_id s_code_bits[19] = @@ -899,7 +918,9 @@ // Let's see if the event flag we received is for an event that we know of if ((pow(2.0, int( sizeof(s_code_bits) / sizeof(s_code_bits[0]) )) - 1) < flags) { - log_error("swf_event::read() -- unknown / unhandled event type received, flags = 0x%x", flags); + IF_VERBOSE_MALFORMED_SWF( + log_swferror("swf_event::read() -- unknown / unhandled event type received, flags = 0x%x", flags); + ); } for (int i = 0, mask = 1; i < int(sizeof(s_code_bits)/sizeof(s_code_bits[0])); i++, mask <<= 1) @@ -1184,7 +1205,9 @@ // would be a malformed SWF if ( ! dynamic_cast<movie_def_impl*>(m) ) { - log_error("Malformed SWF (nested DEFINESPRITE tags)"); + IF_VERBOSE_MALFORMED_SWF( + log_swferror("nested DEFINESPRITE tags"); + ); } // will automatically read the sprite @@ -1404,7 +1427,9 @@ // something smarter, if we agree on semantic if (source_movie == m) { - log_warning("Won't let movie import it's own exported symbols... "); + IF_VERBOSE_MALFORMED_SWF( + log_swferror("Movie attempts to import symbols from itself."); + ); return; } } @@ -1583,7 +1608,9 @@ if (! (sample_rate >= 0 && sample_rate <= 3)) { - log_error("Bad sample rate read from SWF header."); + IF_VERBOSE_MALFORMED_SWF( + log_swferror("Bad sample rate read from SWF header."); + ); return; } @@ -1676,7 +1703,9 @@ { if (s_sound_handler) { - log_error("start_sound_loader: sound_id %d is not defined", sound_id); + IF_VERBOSE_MALFORMED_SWF( + log_swferror("start_sound_loader: sound_id %d is not defined", sound_id); + ); } } @@ -1727,7 +1756,9 @@ if (! (sample_rate >= 0 && sample_rate <= 3)) { - log_error("Bad sample rate read from SWF header."); + IF_VERBOSE_MALFORMED_SWF( + log_swferror("Bad sample rate read from SWF header."); + ); return; } _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit