gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash server/as_value.cpp testsuite/actionscrip...


From: Sandro Santilli
Subject: [Gnash-commit] gnash server/as_value.cpp testsuite/actionscrip...
Date: Fri, 30 Nov 2007 19:12:50 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/11/30 19:12:50

Modified files:
        server         : as_value.cpp 
        testsuite/actionscript.all: Number.as 

Log message:
        Handle malformed hex strings in number conversion

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.100&r2=1.101
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Number.as?cvsroot=gnash&r1=1.35&r2=1.36

Patches:
Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -b -r1.100 -r1.101
--- server/as_value.cpp 30 Nov 2007 19:01:03 -0000      1.100
+++ server/as_value.cpp 30 Nov 2007 19:12:49 -0000      1.101
@@ -56,6 +56,7 @@
 
 namespace {
 
+struct invalidHexDigit {};
 uint8_t parseHex(char c)
 {
        switch (c)
@@ -76,6 +77,7 @@
                case 'd': case 'D': return 13;
                case 'e': case 'E': return 14;
                case 'f': case 'F': return 15;
+               default: throw invalidHexDigit();
        }
 }
 
@@ -155,7 +157,7 @@
                case OBJECT:
                case AS_FUNCTION:
                {
-                       as_object* obj = m_type == OBJECT ? getObj().get() : 
getFun().get();
+                       //as_object* obj = m_type == OBJECT ? getObj().get() : 
getFun().get();
                        try
                        {
                                as_value ret = to_primitive(STRING);
@@ -378,10 +380,13 @@
             {
                if ( s.length() == 8 && s[0] == '0' && ( s[1] == 'x' || s[1] == 
'X' ) )
                {
+                       try {
                        uint8_t r = (parseHex(s[2])<<4) + parseHex(s[3]);
                        uint8_t g = (parseHex(s[4])<<4) + parseHex(s[5]);
                        uint8_t b = (parseHex(s[6])<<4) + parseHex(s[7]);
                        return (double)((r<<16)|(g<<8)|b);
+                       } catch (invalidHexDigit) { }
+                       
                }
             }
 
@@ -434,7 +439,7 @@
             //
             // Arrays and Movieclips should return NaN.
 
-            as_object* obj = m_type == OBJECT ? getObj().get() : 
getFun().get();
+            //as_object* obj = m_type == OBJECT ? getObj().get() : 
getFun().get();
             try
             {
                 as_value ret = to_primitive(NUMBER);
@@ -762,7 +767,7 @@
 }
 
 bool
-as_value::conforms_to(string_table::key name)
+as_value::conforms_to(string_table::key /*name*/)
 {
        // TODO: Implement
        return false;
@@ -1472,7 +1477,7 @@
        //       as the SpriteProxy target (instead of
        //       the full string, to be parsed everytime)
 
-       string::size_type size = tgtstr.size();
+       //string::size_type size = tgtstr.size();
        string::size_type from = 0;
        while ( string::size_type to=tgtstr.find_first_of('.', from) )
        {

Index: testsuite/actionscript.all/Number.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Number.as,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- testsuite/actionscript.all/Number.as        30 Nov 2007 19:01:03 -0000      
1.35
+++ testsuite/actionscript.all/Number.as        30 Nov 2007 19:12:50 -0000      
1.36
@@ -27,7 +27,7 @@
 // TODO: test with SWF target != 6 (the only one tested so far)
 //     
 
-rcsid="$Id: Number.as,v 1.35 2007/11/30 19:01:03 strk Exp $";
+rcsid="$Id: Number.as,v 1.36 2007/11/30 19:12:50 strk Exp $";
 
 #include "check.as"
 
@@ -267,6 +267,8 @@
  check("0XFF0000" != 0xFF0000);
 #endif
 
+check(isNaN("0xff000z"));
+
 check_equals(typeof(Number.prototype.valueOf), 'function'); 
 check_equals(typeof(Number.prototype.toString), 'function'); 
 #if OUTPUT_VERSION > 5
@@ -452,11 +454,11 @@
 // END OF TEST
 
 #if OUTPUT_VERSION < 6
- check_totals(146);
+ check_totals(147);
 #else
 #if OUTPUT_VERSION < 7
- check_totals(158);
+ check_totals(159);
 #else
- check_totals(156);
+ check_totals(157);
 #endif
 #endif




reply via email to

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