gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash testsuite/actionscript.all/SharedObject.a...


From: Rob Savoye
Subject: [Gnash-commit] gnash testsuite/actionscript.all/SharedObject.a...
Date: Thu, 20 Dec 2007 21:50:10 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Rob Savoye <rsavoye>    07/12/20 21:50:10

Modified files:
        testsuite/actionscript.all: SharedObject.as 
        server/asobj   : SharedObject.cpp 
        .              : ChangeLog 
        libamf         : amf.cpp sol.cpp 

Log message:
                * server/asobj/SharedObject.cpp: Make less verbose, don't dump
                members after reading.
                * libamf/amf.cpp: Check for a corrupted length field so we don't
                try to memcpy() an obscene amount of data... 
                * libamf/sol.cpp: Handle an error from trying to parse corrupted
                .sol files so we don't core dump.
                * testsuite/actionscript.all/SharedObject.as: Test the new 
values
                against the previous ones we just wrote.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/SharedObject.as?cvsroot=gnash&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/SharedObject.cpp?cvsroot=gnash&r1=1.16&r2=1.17
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5229&r2=1.5230
http://cvs.savannah.gnu.org/viewcvs/gnash/libamf/amf.cpp?cvsroot=gnash&r1=1.49&r2=1.50
http://cvs.savannah.gnu.org/viewcvs/gnash/libamf/sol.cpp?cvsroot=gnash&r1=1.5&r2=1.6

Patches:
Index: testsuite/actionscript.all/SharedObject.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/SharedObject.as,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- testsuite/actionscript.all/SharedObject.as  20 Dec 2007 21:18:21 -0000      
1.14
+++ testsuite/actionscript.all/SharedObject.as  20 Dec 2007 21:50:09 -0000      
1.15
@@ -20,7 +20,7 @@
 // compile this test case with Ming makeswf, and then
 // execute it like this gnash -1 -r 0 -v out.swf
 
-rcsid="$Id: SharedObject.as,v 1.14 2007/12/20 21:18:21 rsavoye Exp $";
+rcsid="$Id: SharedObject.as,v 1.15 2007/12/20 21:50:09 rsavoye Exp $";
 
 #include "check.as"
 
@@ -75,7 +75,8 @@
 so.data.localSecPathTime = 1.19751160683e+12;
 
 // trace(so.getSize());
-// so.flush();
+so.flush();
+
 
 newso = SharedObject.getLocal("settings");
 check_equals (typeof(newso), 'object');
@@ -85,17 +86,17 @@
 if (typeof(newso.data) != 'undefined') {
     trace("New Shared Object, checking data...");
     check_equals (typeof(newso.data.gain), 'number');
-    check_equals (newso.data.gain, 50.0);
+    check_equals (newso.data.gain, so.data.gain);
     check_equals (typeof(newso.data.echosuppression), 'boolean');
-    check_equals (newso.data.echosuppression, false);
+    check_equals (newso.data.echosuppression, so.data.echosuppression);
     check_equals (typeof(newso.data.defaultmicrophone), 'string');
-    check_equals (newso.data.defaultmicrophone, "/dev/input/mic");
+    check_equals (newso.data.defaultmicrophone, so.data.defaultmicrophone);
     check_equals (typeof(newso.data.defaultcamera), 'string');
     check_equals (newso.data.defaultcamera,  'undefined');
     check_equals (typeof(newso.data.defaultklimit), 'number');
-    check_equals (newso.data.defaultklimit, 100.0);
+    check_equals (newso.data.defaultklimit, so.data.defaultklimit);
     check_equals (typeof(newso.data.defaultalways), 'boolean');
-    check_equals (newso.data.defaultalways, false);
+    check_equals (newso.data.defaultalways, so.data.defaultalways);
 
     // FIXME: why did all these start failing ? Accoring to dump() they
     // all still exist.

Index: server/asobj/SharedObject.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/SharedObject.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -b -r1.16 -r1.17
--- server/asobj/SharedObject.cpp       20 Dec 2007 21:14:39 -0000      1.16
+++ server/asobj/SharedObject.cpp       20 Dec 2007 21:50:09 -0000      1.17
@@ -259,7 +259,7 @@
     
     for (it = els.begin(); it != els.end(); it++) {
         AMF::amf_element_t *el = &(*(it));
-        log_debug("Adding \"%s\"", el->name.c_str());
+//        log_debug("Adding \"%s\"", el->name.c_str());
         if (el->type == AMF::NUMBER) {
             double dub =  *((double *)el->data);
             ptr->set_member(st.string_table::find(el->name), as_value(dub));
@@ -285,7 +285,7 @@
         } 
     }
 
-    ptr->dump_members();        // FIXME: debug crap
+//    ptr->dump_members();        // FIXME: debug crap
     
     return as_value(obj.get()); // will keep alive
 }

Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5229
retrieving revision 1.5230
diff -u -b -r1.5229 -r1.5230
--- ChangeLog   20 Dec 2007 21:14:39 -0000      1.5229
+++ ChangeLog   20 Dec 2007 21:50:09 -0000      1.5230
@@ -1,5 +1,14 @@
 2007-12-20  Rob Savoye  <address@hidden>
 
+       * server/asobj/SharedObject.cpp: Make less verbose, don't dump
+       members after reading.
+       * libamf/amf.cpp: Check for a corrupted length field so we don't
+       try to memcpy() an obscene amount of data... 
+       * libamf/sol.cpp: Handle an error from trying to parse corrupted
+       .sol files so we don't core dump.
+       * testsuite/actionscript.all/SharedObject.as: Test the new values
+       against the previous ones we just wrote.
+       
        * server/asobj/SharedObject.cpp: Get rcinit file, and use the
        SOLSafeDir setting, or defaul tto "./", for all SOL file
        locations. This now can both write and read SOL files.

Index: libamf/amf.cpp
===================================================================
RCS file: /sources/gnash/gnash/libamf/amf.cpp,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -b -r1.49 -r1.50
--- libamf/amf.cpp      20 Dec 2007 21:14:39 -0000      1.49
+++ libamf/amf.cpp      20 Dec 2007 21:50:10 -0000      1.50
@@ -1364,6 +1364,11 @@
     tmpptr += 2;
     // get the name of the element
     if (length > 0) {
+       if (length > 20000) {
+           log_error("Length field corrupted! parsed value is: %hd", length);
+           return 0;
+       }
+       
 //        log_msg(_("AMF element length is: %d"), length);
         memcpy(buffer, tmpptr, length);
         el->name = reinterpret_cast<char *>(buffer);
@@ -1387,11 +1392,11 @@
          memset(tmp, 0, AMF_NUMBER_SIZE+1);
          memcpy(tmp, buffer, AMF_NUMBER_SIZE);
          el->data = tmp;
-#if 1
+#if 0
           uint8_t hexint[AMF_NUMBER_SIZE*3];
           hexify((uint8_t *)hexint, (uint8_t *)buffer,
                 AMF_NUMBER_SIZE, false);
-//          log_msg(_("Number \"%s\" is: 0x%s"), el->name.c_str(), hexint);
+          log_msg(_("Number \"%s\" is: 0x%s"), el->name.c_str(), hexint);
 //          amfnum_t *num = extractNumber(tmpptr);
 #endif
           tmpptr += 8;

Index: libamf/sol.cpp
===================================================================
RCS file: /sources/gnash/gnash/libamf/sol.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- libamf/sol.cpp      20 Dec 2007 21:14:39 -0000      1.5
+++ libamf/sol.cpp      20 Dec 2007 21:50:10 -0000      1.6
@@ -336,11 +336,12 @@
         AMF::amf_element_t el;
         while ((buf - ptr) <= _filesize) {
             ptr = (char *)amf_obj.extractVariable(&el, 
reinterpret_cast<uint8_t *>(ptr));
-            if (ptr == 0) {
-                return true;
-            }
+            if (ptr != 0) {
             ptr += 1;            
             addObj(el);
+           } else {
+               break;
+           }
         }
         
         ifs.close();




reply via email to

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