[mediatomb] Added fix for custom JS parsing failure (#714466)

rmattes rmattes at fedoraproject.org
Thu Jun 30 02:19:49 UTC 2011


commit a8962a49cf462c93b8403cb6de94578a97614fc9
Author: Rich Mattes <richmattes at gmail.com>
Date:   Tue Jun 28 00:29:47 2011 -0400

    Added fix for custom JS parsing failure (#714466)

 mediatomb-0.12.1-jsparse.patch |  106 ++++++++++++++++++++++++++++++++++++++++
 mediatomb.spec                 |   12 ++++-
 2 files changed, 117 insertions(+), 1 deletions(-)
---
diff --git a/mediatomb-0.12.1-jsparse.patch b/mediatomb-0.12.1-jsparse.patch
new file mode 100644
index 0000000..59e2f83
--- /dev/null
+++ b/mediatomb-0.12.1-jsparse.patch
@@ -0,0 +1,106 @@
+diff -rup mediatomb-0.12.1/src/scripting/js_functions.cc ../mediatomb-0.12.1/src/scripting/js_functions.cc
+--- mediatomb-0.12.1/src/scripting/js_functions.cc	2011-06-28 00:16:08.217550466 -0400
++++ ../mediatomb-0.12.1/src/scripting/js_functions.cc	2011-06-28 00:13:27.403406447 -0400
+@@ -116,19 +116,49 @@ js_addCdsObject(JSContext *cx, uintN arg
+ {
+     try
+     {
+-        jsval arg;
+-        JSString *str;
+-        String path;
+-        String containerclass;
++    	// Inputs from native code
++        JSObject *js_cds_obj = NULL;
++        JSString *str =  NULL;
++        JSString *cont = NULL;
++
++        String path = nil;
++        String containerclass = nil;
+ 
+-        JSObject *js_cds_obj;
++        JSObject *obj = JS_THIS_OBJECT(cx, argv);
+         JSObject *js_orig_obj = NULL;
+         Ref<CdsObject> orig_object;
+ 
+         Ref<StringConverter> p2i;
+         Ref<StringConverter> i2i;
++        switch (argc)
++        {
++        case 0:
++        	log_debug("No input arguments given\n");
++        	return JS_FALSE;
++        case 1:
++			if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), "o", &js_cds_obj))
++			{
++				log_debug("Could not parse input arguments\n");
++				return JS_FALSE;
++			}
++			break;
++        case 2:
++        	if(!JS_ConvertArguments(cx, 2, JS_ARGV(cx, argv), "oS", &js_cds_obj, &str))
++			{
++				log_debug("Could not parse input arguments\n");
++				return JS_FALSE;
++			}
++			break;
++        default:
++        	if(!JS_ConvertArguments(cx, 3, JS_ARGV(cx, argv), "oSS", &js_cds_obj, &str, &cont))
++			{
++				log_debug("Could not parse input arguments\n");
++				return JS_FALSE;
++			}
++			break;
++        }
+ 
+-        Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
++        Script *self = (Script *)JS_GetPrivate(cx, obj);
+ 
+         if (self == NULL)
+         {
+@@ -144,23 +174,14 @@ js_addCdsObject(JSContext *cx, uintN arg
+         {
+             i2i = StringConverter::i2i();
+         }
+- 
+-        arg = argv[0];
+-        if (!JSVAL_IS_OBJECT(arg))
+-            return JS_TRUE;
+-        if (!JS_ValueToObject(cx, arg, &js_cds_obj))
+-            return JS_TRUE;
+ 
+-        // root it
+-        argv[0] = OBJECT_TO_JSVAL(js_cds_obj);
+ 
+-        str = JS_ValueToString(cx, argv[1]);
+         if (!str)
+             path = _("/");
+         else
+             path = JS_EncodeString(cx, str);
+ 
+-        JSString *cont = JS_ValueToString(cx, argv[2]);
++
+         if (cont)
+         {
+             containerclass = JS_EncodeString(cx, cont);
+@@ -169,9 +190,9 @@ js_addCdsObject(JSContext *cx, uintN arg
+         }
+ 
+         if (self->whoami() == S_PLAYLIST)
+-            js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("playlist"));
++            js_orig_obj = self->getObjectProperty(obj, _("playlist"));
+         else if (self->whoami() == S_IMPORT)
+-            js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("orig"));
++            js_orig_obj = self->getObjectProperty(obj, _("orig"));
+         
+         if (js_orig_obj == NULL)
+         {
+@@ -179,9 +200,6 @@ js_addCdsObject(JSContext *cx, uintN arg
+             return JS_TRUE;
+         }
+ 
+-        // root it
+-        argv[1] = OBJECT_TO_JSVAL(js_orig_obj);
+-
+         orig_object = self->jsObject2cdsObject(js_orig_obj, self->getProcessedObject());
+         if (orig_object == nil)
+             return JS_TRUE;
diff --git a/mediatomb.spec b/mediatomb.spec
index e62cf3a..552f696 100644
--- a/mediatomb.spec
+++ b/mediatomb.spec
@@ -1,16 +1,22 @@
 Version: 0.12.1
 Summary: UPnP AV MediaServer 
 Name: mediatomb
-Release: 10%{?dist}
+Release: 11%{?dist}
 Summary: MediaTomb - UPnP AV Mediaserver for Linux
 License: GPLv2
 Group: Applications/Multimedia
 URL: http://mediatomb.cc
 Source: http://downloads.sourceforge.net/mediatomb/%{name}-%{version}.tar.gz
+# Adds handler for ogg audio metadata by default.  Submitted upstream
 Patch0: mediatomb-0.12.1.fixogg.patch
+# Fixes issue where video files > 999 minutes in length overrun the minutes buffer.
 Patch1: mediatomb-0.12.1.fixbufferoverrun.patch
+# Fix build issues related to GCC 4.6 (missing definitions.)  Submitted upstream
 Patch2: mediatomb-0.12.1.fixbuild.patch
+# Port to js-1.8 (thanks Jan!)  Not yet submitted upstream
 Patch3: mediatomb-0.12.1.tonewjs.patch
+# Fixes to the js/native code to allow custom js parsing. Not yet submitted upstream
+Patch4: mediatomb-0.12.1-jsparse.patch 
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 
 BuildRequires: sqlite-devel, mysql-devel, libexif-devel, id3lib-devel, file-devel, js-devel, zlib-devel, taglib-devel
 BuildRequires: expat-devel, libcurl-devel
@@ -44,6 +50,7 @@ be found on http://www.upnp.org/.
 %patch1 -p0
 %patch2 -p0
 %patch3 -p1
+%patch4 -p1
 
 %build
 # Fedora 13 on use system jsapi.h
@@ -124,6 +131,9 @@ fi
 %{_initrddir}/mediatomb
 
 %changelog
+* Tue Jun 28 2011 Rich Mattes <richmattes at gmail.com> - 0.12.1-11
+- Added fix for custom JS parsing failure (#714466)
+
 * Tue Apr 19 2011 Jan Horak <jhorak at redhat.com> - 0.12.1-10
 - Added Spidermonkey 1.8 patch
 


More information about the scm-commits mailing list