[gjs] arg: Fix memory leak in exception path in array conversion



commit c1c274cb4daa49f61f16a3e0aa87603f623c1901
Author: Colin Walters <walters verbum org>
Date:   Fri Nov 30 11:15:16 2012 -0500

    arg: Fix memory leak in exception path in array conversion
    
    https://bugzilla.gnome.org/show_bug.cgi?id=689343

 gi/arg.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)
---
diff --git a/gi/arg.c b/gi/arg.c
index ceac621..5ffdb3f 100644
--- a/gi/arg.c
+++ b/gi/arg.c
@@ -1038,7 +1038,7 @@ gjs_array_to_explicit_array_internal(JSContext       *context,
                                      gpointer        *contents,
                                      gsize           *length_p)
 {
-    JSBool ret = JS_TRUE;
+    JSBool ret = JS_FALSE;
     GITypeInfo *param_info;
 
     param_info = g_type_info_get_param_type(type_info, 0);
@@ -1053,7 +1053,7 @@ gjs_array_to_explicit_array_internal(JSContext       *context,
                                  JS_TypeOfValue(context, value)),
                   JSVAL_IS_OBJECT(value) ? JSVAL_TO_OBJECT(value) : NULL);
         g_free(display_name);
-        return JS_FALSE;
+        goto out;
     }
 
     if (JSVAL_IS_NULL(value)) {
@@ -1063,7 +1063,7 @@ gjs_array_to_explicit_array_internal(JSContext       *context,
         /* Allow strings as int8/uint8/int16/uint16 arrays */
         if (!gjs_string_to_intarray(context, value, param_info,
                                     contents, length_p))
-            ret = JS_FALSE;
+            goto out;
     } else if (gjs_object_has_property(context,
                                        JSVAL_TO_OBJECT(value),
                                        "length")) {
@@ -1075,7 +1075,7 @@ gjs_array_to_explicit_array_internal(JSContext       *context,
                                          "length",
                                          &length_value) ||
             !JS_ValueToECMAUint32(context, length_value, &length)) {
-            ret = JS_FALSE;
+            goto out;
         } else {
             if (!gjs_array_to_array(context,
                                     value,
@@ -1083,12 +1083,14 @@ gjs_array_to_explicit_array_internal(JSContext       *context,
                                     transfer,
                                     param_info,
                                     contents))
-                ret = JS_FALSE;
+                goto out;
 
             *length_p = length;
         }
     }
 
+    ret = JS_TRUE;
+ out:
     g_base_info_unref((GIBaseInfo*) param_info);
 
     return ret;



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