gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] [SCM] Gnash branch, master, updated. release_0_8_9_start-


From: Sandro Santilli
Subject: [Gnash-commit] [SCM] Gnash branch, master, updated. release_0_8_9_start-46-g9b39d47
Date: Sat, 12 Feb 2011 16:18:47 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnash".

The branch, master has been updated
       via  9b39d4778c6a5781fce26294122293b5a416b90e (commit)
       via  5a7cb0aa97a43fac31bb7e82d964cf9a4d0252ab (commit)
      from  37a2eec77ac64d255c0f64a6cf1fd83ea74e3d70 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit//commit/?id=9b39d4778c6a5781fce26294122293b5a416b90e


commit 9b39d4778c6a5781fce26294122293b5a416b90e
Author: Sandro Santilli <address@hidden>
Date:   Sat Feb 12 16:35:07 2011 +0100

    Check return from std::string::find

diff --git a/plugin/npapi/external.cpp b/plugin/npapi/external.cpp
index c0bab59..a60e771 100644
--- a/plugin/npapi/external.cpp
+++ b/plugin/npapi/external.cpp
@@ -219,16 +219,22 @@ ExternalInterface::parseInvoke(const std::string &xml)
         // Look for the easy ones first
         if (tag.substr(0, 7) == "<invoke") {
             // extract the name of the method to invoke
-            start = tag.find("name=") + 5;
+            start = tag.find("name=");
+            if ( start == std::string::npos ) return invoke;
+            start += 5;
             end   = tag.find(" ", start);
+            if ( end == std::string::npos ) return invoke;
             invoke->name  = tag.substr(start, end-start);
             // Ignore any quote characters around the string
             boost::erase_first(invoke->name, "\"");
             boost::erase_last(invoke->name, "\"");
 
             // extract the return type of the method
-            start = tag.find("returntype=") + 11;
+            start = tag.find("returntype=");
+            if ( start == std::string::npos ) return invoke;
+            start += 11;
             end   = tag.find(">", start);
+            if ( end == std::string::npos ) return invoke;
             invoke->type  = tag.substr(start, end-start);
             // Ignore any quote characters around the string
             boost::erase_first(invoke->type, "\"");
@@ -302,29 +308,33 @@ ExternalInterface::parseXML(const std::string &xml)
             obj->referenceCount = 1;
             start = end;
             end = xml.find("</array");
-            std::string str = xml.substr(start, end-start);
-            std::map<std::string, GnashNPVariant> props = parseProperties(str);
-            std::map<std::string, GnashNPVariant>::iterator it;
-            for (it=props.begin(); it != props.end(); ++it) {
-                NPIdentifier id = NPN_GetStringIdentifier(it->first.c_str());
-                GnashNPVariant& value = it->second;
-                NPN_SetProperty(NULL, obj, id, &value.get());
+            if ( end != std::string::npos )  {
+              std::string str = xml.substr(start, end-start);
+              std::map<std::string, GnashNPVariant> props = 
parseProperties(str);
+              std::map<std::string, GnashNPVariant>::iterator it;
+              for (it=props.begin(); it != props.end(); ++it) {
+                  NPIdentifier id = NPN_GetStringIdentifier(it->first.c_str());
+                  GnashNPVariant& value = it->second;
+                  NPN_SetProperty(NULL, obj, id, &value.get());
+              }
+              OBJECT_TO_NPVARIANT(obj, value);
             }
-            OBJECT_TO_NPVARIANT(obj, value);
         } else if (tag == "<object>") {
-            NPObject *obj =  (NPObject *)NPN_MemAlloc(sizeof(NPObject));
-            obj->referenceCount = 1;
             start = end;
             end = xml.find("</object");
-            std::string str = xml.substr(start, end-start);
-            std::map<std::string, GnashNPVariant> props = parseProperties(str);
-            std::map<std::string, GnashNPVariant>::iterator it;
-            for (it=props.begin(); it != props.end(); ++it) {
-                NPIdentifier id = NPN_GetStringIdentifier(it->first.c_str());
-                GnashNPVariant& value = it->second;
-                NPN_SetProperty(NULL, obj, id, &value.get());
+            if ( end != std::string::npos )  {
+              NPObject *obj =  (NPObject *)NPN_MemAlloc(sizeof(NPObject));
+              obj->referenceCount = 1;
+              std::string str = xml.substr(start, end-start);
+              std::map<std::string, GnashNPVariant> props = 
parseProperties(str);
+              std::map<std::string, GnashNPVariant>::iterator it;
+              for (it=props.begin(); it != props.end(); ++it) {
+                  NPIdentifier id = NPN_GetStringIdentifier(it->first.c_str());
+                  GnashNPVariant& value = it->second;
+                  NPN_SetProperty(NULL, obj, id, &value.get());
+              }
+              OBJECT_TO_NPVARIANT(obj, value);
             }
-            OBJECT_TO_NPVARIANT(obj, value);
         }
     }
     
@@ -411,7 +421,10 @@ ExternalInterface::parseArguments(const std::string &xml)
     while (!data.empty()) {
         // Extract the data
         start = data.find("<", 1); // start past the opening <
-        end = data.find(">", start) + 1;
+        if (start == std::string::npos ) break;
+        end = data.find(">", start);
+        if (end == std::string::npos ) break;
+        end += 1;
         std::string sub = data.substr(0, end);
         if (data == "</arguments>") {
             break;

http://git.savannah.gnu.org/cgit//commit/?id=5a7cb0aa97a43fac31bb7e82d964cf9a4d0252ab


commit 5a7cb0aa97a43fac31bb7e82d964cf9a4d0252ab
Author: Sandro Santilli <address@hidden>
Date:   Sat Feb 12 16:34:33 2011 +0100

    Some more tests (minor)

diff --git a/plugin/npapi/test.cpp b/plugin/npapi/test.cpp
index 79e09fa..f81d46e 100644
--- a/plugin/npapi/test.cpp
+++ b/plugin/npapi/test.cpp
@@ -308,7 +308,7 @@ main(int , char **)
     str = NPStringToString(NPVARIANT_TO_STRING(invoke->args[0].get()));
     check_equals(str, "reportFlashTiming");
     //
-    check(NPVARIANT_IS_OBJECT(invoke->args[1].get()));
+    xcheck(NPVARIANT_IS_OBJECT(invoke->args[1].get()));
     // TODO: check object contents
     //
     xcheck(NPVARIANT_IS_STRING(invoke->args[2].get()));
@@ -335,6 +335,20 @@ main(int , char **)
 //    check_equals(str, "Gnash%20GNU%2FLinux");
 
 
+    {
+      xml = "<object><property id=\"5\">";
+      GnashNPVariant v = plugin::ExternalInterface::parseXML(xml);
+      check(NPVARIANT_IS_NULL(v.get()));
+    }
+
+    {
+      NPVariant val;
+      NULL_TO_NPVARIANT(val);
+      check(NPVARIANT_IS_NULL(val));
+      GnashNPVariant v = val;
+      check(NPVARIANT_IS_NULL(v.get()));
+    }
+
     regfree (&regex_pat);
     NPN_MemFree(value);
 }

-----------------------------------------------------------------------

Summary of changes:
 plugin/npapi/external.cpp |   55 +++++++++++++++++++++++++++-----------------
 plugin/npapi/test.cpp     |   16 ++++++++++++-
 2 files changed, 49 insertions(+), 22 deletions(-)


hooks/post-receive
-- 
Gnash



reply via email to

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