Pekka Lampila
2007-Nov-14 10:45 UTC
[Swfdec] 2 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_asbroadcaster.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_string.c libswfdec/swfdec_color_as.c libswfdec/swfdec_initialize.as
libswfdec/swfdec_as_array.c | 36 ++++++++++++++++++++++++++++++++++++ libswfdec/swfdec_as_object.c | 12 +++++++++++- libswfdec/swfdec_as_string.c | 8 +++++++- libswfdec/swfdec_asbroadcaster.c | 3 +++ libswfdec/swfdec_color_as.c | 14 ++++++++++++-- libswfdec/swfdec_initialize.as | 1 - 6 files changed, 69 insertions(+), 5 deletions(-) New commits: commit e83bc46f533bc7c1c3155f46dc39634818a92f18 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Wed Nov 14 12:44:52 2007 +0200 Fix some crashes/asserts when this is null diff --git a/libswfdec/swfdec_as_array.c b/libswfdec/swfdec_as_array.c index 4c30399..3c6cde5 100644 --- a/libswfdec/swfdec_as_array.c +++ b/libswfdec/swfdec_as_array.c @@ -589,6 +589,9 @@ swfdec_as_array_join (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, const char *var, *str, *sep; SwfdecAsValue val; + if (object == NULL) + return; + if (argc > 0) { sep = swfdec_as_value_to_string (cx, &argv[0]); } else { @@ -623,6 +626,9 @@ void swfdec_as_array_toString (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { + if (object == NULL) + return; + swfdec_as_array_join (cx, object, 0, NULL, ret); } @@ -631,6 +637,9 @@ void swfdec_as_array_do_push (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { + if (object == NULL) + return; + // if 0 args, just return the length // manually set the length here to make the function work on non-Arrays if (argc > 0) { @@ -650,6 +659,9 @@ swfdec_as_array_do_pop (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, gint32 length; const char *var; + if (object == NULL) + return; + // we allow negative indexes here, but not 0 length = swfdec_as_array_length_as_integer (object); if (length == 0) @@ -674,6 +686,9 @@ swfdec_as_array_do_unshift (SwfdecAsContext *cx, SwfdecAsObject *object, { gint32 length; + if (object == NULL) + return; + if (argc) { // don't allow negative length length = swfdec_as_array_length (object); @@ -695,6 +710,9 @@ swfdec_as_array_do_shift (SwfdecAsContext *cx, SwfdecAsObject *object, gint32 length; const char *var; + if (object == NULL) + return; + // don't allow negative length length = swfdec_as_array_length (object); if (length <= 0) @@ -743,6 +761,9 @@ swfdec_as_array_reverse (SwfdecAsContext *cx, SwfdecAsObject *object, { gint32 length; + if (object == NULL) + return; + length = swfdec_as_array_length (object); swfdec_as_object_foreach_rename (object, swfdec_as_array_foreach_reverse, &length); @@ -760,6 +781,9 @@ swfdec_as_array_concat (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsArray *array_new; const char *var; + if (object == NULL) + return; + object_new = swfdec_as_array_new (cx); if (object_new == NULL) return; @@ -794,6 +818,9 @@ swfdec_as_array_slice (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsObject *object_new; SwfdecAsArray *array_new; + if (object == NULL) + return; + length = swfdec_as_array_length (object); if (argc > 0) { @@ -834,6 +861,9 @@ swfdec_as_array_splice (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsObject *object_new; SwfdecAsArray *array_new; + if (object == NULL) + return; + length = swfdec_as_array_length (object); if (argc > 0) { @@ -1260,6 +1290,9 @@ swfdec_as_array_sort (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, gint32 options; SwfdecAsFunction *custom_compare_func; + if (object == NULL) + return; + pos = 0; if (argc > 0 && !SWFDEC_AS_VALUE_IS_NUMBER (&argv[0])) { SwfdecAsFunction *fun; @@ -1290,6 +1323,9 @@ swfdec_as_array_sortOn (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, const char **fields; gint32 options; + if (object == NULL) + return; + if (argc < 1) return; diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c index bb4adcc..5cc446c 100644 --- a/libswfdec/swfdec_as_object.c +++ b/libswfdec/swfdec_as_object.c @@ -1422,6 +1422,9 @@ swfdec_as_object_hasOwnProperty (SwfdecAsContext *cx, SwfdecAsObject *object, SWFDEC_AS_VALUE_SET_BOOLEAN (retval, FALSE); + if (object == NULL) + return; + // return false even if no params if (argc < 1) return; @@ -1449,6 +1452,9 @@ swfdec_as_object_isPropertyEnumerable (SwfdecAsContext *cx, SWFDEC_AS_VALUE_SET_BOOLEAN (retval, FALSE); + if (object == NULL) + return; + // return false even if no params if (argc < 1) return; @@ -1546,6 +1552,9 @@ swfdec_as_object_unwatch (SwfdecAsContext *cx, SwfdecAsObject *object, SwfdecAsVariable *var; const char *name; + if (object == NULL) + return; + SWFDEC_AS_VALUE_SET_BOOLEAN (retval, FALSE); if (argc < 1) @@ -1574,7 +1583,8 @@ void swfdec_as_object_valueOf (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval) { - SWFDEC_AS_VALUE_SET_OBJECT (retval, object); + if (object != NULL) + SWFDEC_AS_VALUE_SET_OBJECT (retval, object); } SWFDEC_AS_NATIVE (101, 4, swfdec_as_object_toString) diff --git a/libswfdec/swfdec_as_string.c b/libswfdec/swfdec_as_string.c index 59515d9..d15c81b 100644 --- a/libswfdec/swfdec_as_string.c +++ b/libswfdec/swfdec_as_string.c @@ -75,7 +75,13 @@ swfdec_as_string_object_to_string (SwfdecAsContext *context, { SwfdecAsValue val; - g_return_val_if_fail (SWFDEC_IS_AS_OBJECT (object), NULL); + g_return_val_if_fail (object == NULL || SWFDEC_IS_AS_OBJECT (object), + SWFDEC_AS_STR_EMPTY); + + if (object == NULL) { + SWFDEC_FIXME ("What to do when this is null in string functions"); + return SWFDEC_AS_STR_EMPTY; + } SWFDEC_AS_VALUE_SET_OBJECT (&val, object); diff --git a/libswfdec/swfdec_asbroadcaster.c b/libswfdec/swfdec_asbroadcaster.c index 05897e8..7d26d64 100644 --- a/libswfdec/swfdec_asbroadcaster.c +++ b/libswfdec/swfdec_asbroadcaster.c @@ -39,6 +39,9 @@ broadcastMessage (SwfdecAsContext *cx, SwfdecAsObject *object, const char *name; GSList *list = NULL, *walk; + if (object == NULL) + return; + if (argc < 1) return; name = swfdec_as_value_to_string (cx, &argv[0]); diff --git a/libswfdec/swfdec_color_as.c b/libswfdec/swfdec_color_as.c index b09354c..6bd1878 100644 --- a/libswfdec/swfdec_color_as.c +++ b/libswfdec/swfdec_color_as.c @@ -54,7 +54,12 @@ swfdec_movie_color_getRGB (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { int result; - SwfdecMovie *movie = swfdec_movie_color_get_movie (obj); + SwfdecMovie *movie; + + if (obj == NULL) + return; + + movie = swfdec_movie_color_get_movie (obj); if (movie == NULL) return; @@ -80,7 +85,12 @@ swfdec_movie_color_getTransform (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval) { SwfdecAsObject *ret; - SwfdecMovie *movie = swfdec_movie_color_get_movie (obj); + SwfdecMovie *movie; + + if (obj == NULL) + return; + + movie = swfdec_movie_color_get_movie (obj); if (movie == NULL) return; commit da41d4aaa334d1260cc9891ba01bdc3d10350b95 Author: Pekka Lampila <pekka.lampila at iki.fi> Date: Wed Nov 14 12:27:24 2007 +0200 lal diff --git a/libswfdec/swfdec_initialize.as b/libswfdec/swfdec_initialize.as index dee0157..d02ff9a 100644 --- a/libswfdec/swfdec_initialize.as +++ b/libswfdec/swfdec_initialize.as @@ -28,7 +28,6 @@ ASSetNativeAccessor = ASnative (4, 1); Object.registerClass = ASnative(101, 8); ASSetPropFlags (Object, null, 7); -lal /*** Error ***/
Possibly Parallel Threads
- 3 commits - libswfdec-gtk/swfdec_gtk_loader.c libswfdec/swfdec_as_array.c libswfdec/swfdec_asbroadcaster.c libswfdec/swfdec_as_function.c libswfdec/swfdec_as_types.c libswfdec/swfdec_xml.c
- 4 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_as_types.c test/trace
- 4 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_as_boolean.c libswfdec/swfdec_as_function.c libswfdec/swfdec_as_number.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_string.c libswfdec/swfdec_color_as.c test/trace
- 2 commits - libswfdec/swfdec_as_array.c test/trace
- 5 commits - doc/Makefile.am doc/swfdec-sections.txt libswfdec/swfdec_as_array.c libswfdec/swfdec_as_boolean.c libswfdec/swfdec_asbroadcaster.c libswfdec/swfdec_as_internal.h libswfdec/swfdec_as_native_function.c libswfdec/swfdec_as_native_function.h