Package: mediatomb / 0.12.1-4+deb7u1

js_copyObject.patch Patch series | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Description: Fix segfaults caused by copyObject.
Bug-Debian: http://bugs.debian.org/664967
Author: Miguel A. Colón Vélez <debian.micove@gmail.com>
Last-Update: 2012-03-24

--- mediatomb-0.12.1.orig/src/scripting/js_functions.cc
+++ mediatomb-0.12.1/src/scripting/js_functions.cc
@@ -83,26 +83,31 @@ js_print(JSContext *cx, uintN argc, jsva
 JSBool
 js_copyObject(JSContext *cx, uintN argc, jsval *argv)
 {
-    jsval arg;
-    JSObject *js_cds_obj;
-    JSObject *js_cds_clone_obj;
+    JSObject *js_cds_obj = NULL;
+    JSObject *js_cds_clone_obj = NULL;
 
-    Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
+    JSObject *obj = JS_THIS_OBJECT(cx, argv);
+
+    Script *self = (Script *)JS_GetPrivate(cx, obj);
 
     try
     {
-        arg = argv[0];
-        if (!JSVAL_IS_OBJECT(arg))
-            return JS_TRUE;
-
-        if (!JS_ValueToObject(cx, arg, &js_cds_obj))
+        if (argc != 1)
+        {
+            log_debug("Incorrect number of input arguments given, argc = %d\n",argc);
             return JS_TRUE;
-
-        argv[0] = OBJECT_TO_JSVAL(js_cds_obj);
+        }
+        else
+        {
+            if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), "o", &js_cds_obj))
+            {
+                log_debug("Could not parse input arguments\n");
+                return JS_TRUE;
+            }
+        }
 
         Ref<CdsObject> cds_obj = self->jsObject2cdsObject(js_cds_obj, nil);
         js_cds_clone_obj = JS_NewObject(cx, NULL, NULL, NULL);
-        argv[1] = OBJECT_TO_JSVAL(js_cds_clone_obj);
 
         self->cdsObject2jsObject(cds_obj, js_cds_clone_obj);