[Swfdec] libswfdec/swfdec_as_array.c libswfdec/swfdec_as_string.c
Pekka Lampila
medar at kemper.freedesktop.org
Sun Sep 2 14:50:49 PDT 2007
libswfdec/swfdec_as_array.c | 5 +++++
libswfdec/swfdec_as_string.c | 34 ++++++++++++++++++++++++++++++----
2 files changed, 35 insertions(+), 4 deletions(-)
New commits:
diff-tree 362b6d991a6595468790b564501fb4f3b94d3a41 (from aa5947ee972f285b59556ab8888081addd458bfe)
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Sep 3 00:49:47 2007 +0300
Fix various String functions and Array sort crashing when called on other object
diff --git a/libswfdec/swfdec_as_array.c b/libswfdec/swfdec_as_array.c
index 273b083..ff446d8 100644
--- a/libswfdec/swfdec_as_array.c
+++ b/libswfdec/swfdec_as_array.c
@@ -943,6 +943,11 @@ swfdec_as_array_sort (SwfdecAsContext *c
ForeachSortData fdata;
guint pos;
+ if (!SWFDEC_IS_AS_ARRAY (object)) {
+ SWFDEC_FIXME ("Array.sort should work on non-array objects too");
+ return;
+ }
+
fdata.length = swfdec_as_array_get_length (object);
fdata.order_size =
MIN ((gint32)g_hash_table_size (object->properties) + 1, fdata.length + 1);
diff --git a/libswfdec/swfdec_as_string.c b/libswfdec/swfdec_as_string.c
index 5988369..cce29bf 100644
--- a/libswfdec/swfdec_as_string.c
+++ b/libswfdec/swfdec_as_string.c
@@ -99,6 +99,9 @@ swfdec_as_string_lastIndexOf (SwfdecAsCo
gsize len;
const char *s;
+ if (argc < 1)
+ return;
+
s = swfdec_as_value_to_string (object->context, &argv[0]);
if (argc == 2) {
int offset = swfdec_as_value_to_integer (object->context, &argv[1]);
@@ -127,6 +130,9 @@ swfdec_as_string_indexOf (SwfdecAsContex
int offset=0, len, i=-1;
const char *s, *t = NULL;
+ if (argc < 1)
+ return;
+
s = swfdec_as_value_to_string (object->context, &argv[0]);
if (argc == 2)
offset = swfdec_as_value_to_integer (object->context, &argv[1]);
@@ -152,6 +158,9 @@ swfdec_as_string_charAt (SwfdecAsContext
int i;
const char *s, *t;
+ if (argc < 1)
+ return;
+
i = swfdec_as_value_to_integer (object->context, &argv[0]);
if (i < 0) {
SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_EMPTY);
@@ -177,6 +186,9 @@ swfdec_as_string_charCodeAt (SwfdecAsCon
const char *s;
gunichar c;
+ if (argc < 1)
+ return;
+
i = swfdec_as_value_to_integer (cx, &argv[0]);
if (i < 0) {
SWFDEC_AS_VALUE_SET_NUMBER (ret, NAN);
@@ -289,9 +301,10 @@ void
swfdec_as_string_toString (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SwfdecAsString *string = SWFDEC_AS_STRING (object);
+ if (!SWFDEC_IS_AS_STRING (object))
+ return;
- SWFDEC_AS_VALUE_SET_STRING (ret, string->string);
+ SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STRING (object)->string);
}
SWFDEC_AS_NATIVE (251, 1, swfdec_as_string_valueOf)
@@ -299,9 +312,10 @@ void
swfdec_as_string_valueOf (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SwfdecAsString *string = SWFDEC_AS_STRING (object);
+ if (!SWFDEC_IS_AS_STRING (object))
+ return;
- SWFDEC_AS_VALUE_SET_STRING (ret, string->string);
+ SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STRING (object)->string);
}
#if 0
@@ -322,6 +336,9 @@ swfdec_as_string_split_5 (SwfdecAsContex
const char *str, *end, *delim;
int count;
+ if (argc < 1)
+ return;
+
str = swfdec_as_string_object_to_string (cx, object);
arr = SWFDEC_AS_ARRAY (swfdec_as_array_new (cx));
if (arr == NULL)
@@ -376,6 +393,9 @@ swfdec_as_string_split_6 (SwfdecAsContex
int count;
guint len;
+ if (argc < 1)
+ return;
+
str = swfdec_as_string_object_to_string (cx, object);
arr = SWFDEC_AS_ARRAY (swfdec_as_array_new (cx));
if (arr == NULL)
@@ -453,6 +473,9 @@ swfdec_as_string_substr (SwfdecAsContext
const char *string = swfdec_as_string_object_to_string (cx, object);
int from, to, len;
+ if (argc < 1)
+ return;
+
from = swfdec_as_value_to_integer (cx, &argv[0]);
len = g_utf8_strlen (string, -1);
@@ -487,6 +510,9 @@ swfdec_as_string_substring (SwfdecAsCont
const char *string = swfdec_as_string_object_to_string (cx, object);
int from, to, len;
+ if (argc < 1)
+ return;
+
len = g_utf8_strlen (string, -1);
from = swfdec_as_value_to_integer (cx, &argv[0]);
if (argc > 1) {
More information about the Swfdec
mailing list