[libproxy] Add support for xulrunner 2.0 from trunk

Nicolas Chauvet kwizart at fedoraproject.org
Tue Mar 29 13:53:39 UTC 2011


commit d4a685a545ad24f0e7fcf17538bfceb298b3f788
Author: Nicolas Chauvet <kwizart at gmail.com>
Date:   Tue Mar 29 15:53:51 2011 +0200

    Add support for xulrunner 2.0 from trunk

 libproxy-trunk.patch |  307 ++++++++++++++++++++++++++++++++++++++++++++++++++
 libproxy.spec        |   18 ++--
 2 files changed, 317 insertions(+), 8 deletions(-)
---
diff --git a/libproxy-trunk.patch b/libproxy-trunk.patch
new file mode 100644
index 0000000..14a7bf3
--- /dev/null
+++ b/libproxy-trunk.patch
@@ -0,0 +1,307 @@
+diff -ur libproxy-0.4.6/libproxy/cmake/modules/pacrunner_mozjs.cmk libproxy-trunk/libproxy/cmake/modules/pacrunner_mozjs.cmk
+--- libproxy-0.4.6/libproxy/cmake/modules/pacrunner_mozjs.cmk	2010-09-01 22:23:34.000000000 +0200
++++ libproxy-trunk/libproxy/cmake/modules/pacrunner_mozjs.cmk	2011-03-29 12:12:09.833395003 +0200
+@@ -7,16 +7,19 @@
+     include_directories("${MOZJS_INCLUDE_DIR}")
+   endif()
+ elseif(NOT APPLE)
+-  set(MOZJS_SEARCH_ORDER "xulrunner-js;firefox-js;mozilla-js;seamonkey-js" CACHE STRING "MozJS search order")
++  set(MOZJS_SEARCH_ORDER "mozilla-js;xulrunner-js;firefox-js;seamonkey-js" CACHE STRING "MozJS search order")
+   option(WITH_MOZJS "Search for MOZJS package" ON)
+   if (WITH_MOZJS)
+-    pkg_search_module(MOZJS ${MOZJS_SEARCH_ORDER})
+-    if(MOZJS_FOUND)
+-      include_directories(${MOZJS_INCLUDE_DIRS})
+-      link_directories(${MOZJS_LIBRARY_DIRS})
+-    else()
+-      set(MOZJS_FOUND 0)
+-    endif()
++    foreach(MOZJSLIB ${MOZJS_SEARCH_ORDER})
++      pkg_search_module(MOZJS ${MOZJSLIB}>=2.0)
++      if(MOZJS_FOUND)
++        include_directories(${MOZJS_INCLUDE_DIRS})
++        link_directories(${MOZJS_LIBRARY_DIRS})
++        break()
++      else()
++        set(MOZJS_FOUND 0)
++      endif()
++    endforeach()
+   else()
+     set(MOZJS_FOUND 0)
+   endif()
+diff -ur libproxy-0.4.6/libproxy/cmake/modules.cmk libproxy-trunk/libproxy/cmake/modules.cmk
+--- libproxy-0.4.6/libproxy/cmake/modules.cmk	2010-09-01 22:23:34.000000000 +0200
++++ libproxy-trunk/libproxy/cmake/modules.cmk	2011-03-29 12:12:09.856395005 +0200
+@@ -14,11 +14,12 @@
+ include(cmake/modules/config_macosx.cmk)
+ include(cmake/modules/network_networkmanager.cmk)
+ include(cmake/modules/pacrunner_mozjs.cmk)
++include(cmake/modules/pacrunner_natus.cmk)
+ include(cmake/modules/pacrunner_webkit.cmk)
+ 
+ # Build the pacrunner into libproxy unless we are building for multiple engines
+ set(BIPR 1)
+-if(MOZJS_FOUND AND WEBKIT_FOUND)
++if((MOZJS_FOUND AND WEBKIT_FOUND) OR (MOZJS_FOUND AND NATUS_FOUND) OR (WEBKIT_FOUND AND NATUS_FOUND))
+   set(BIPR 0)
+ endif()
+ 
+@@ -36,6 +37,7 @@
+ px_module(ignore_ip                1                 1)
+ px_module(network_networkmanager   "${NM_FOUND}"     0       ${NM_LIBRARIES})
+ px_module(pacrunner_mozjs          "${MOZJS_FOUND}"  ${BIPR} ${MOZJS_LIBRARIES})
++px_module(pacrunner_natus          "${NATUS_FOUND}"  ${BIPR} ${NATUS_LIBRARIES})
+ px_module(pacrunner_webkit         "${WEBKIT_FOUND}" ${BIPR} ${WEBKIT_LIBRARIES})
+ px_module(wpad_dns_alias           1                 1)
+ message("")
+diff -ur libproxy-0.4.6/libproxy/libproxy-1.0.pc.in libproxy-trunk/libproxy/libproxy-1.0.pc.in
+--- libproxy-0.4.6/libproxy/libproxy-1.0.pc.in	2011-03-29 15:28:19.781395005 +0200
++++ libproxy-trunk/libproxy/libproxy-1.0.pc.in	2011-03-29 12:12:11.029395005 +0200
+@@ -4,6 +4,6 @@
+ 
+ Name: libproxy-1.0
+ Description: Proxy Configuration Library
+-Version: 0.4.6
++Version: @PROJECT_VERSION@
+ Libs: -L${libdir} -lproxy
+ Cflags: -I${includedir} 
+diff -ur libproxy-0.4.6/libproxy/modules/config_gnome.cpp libproxy-trunk/libproxy/modules/config_gnome.cpp
+--- libproxy-0.4.6/libproxy/modules/config_gnome.cpp	2010-09-01 22:23:34.000000000 +0200
++++ libproxy-trunk/libproxy/modules/config_gnome.cpp	2011-03-29 12:12:10.920395004 +0200
+@@ -102,10 +102,8 @@
+ 		if (dup2(rpipe[1], STDOUT_FILENO) != STDOUT_FILENO) _exit(2);
+ 
+ 		// Close unneeded fds
+-		close(rpipe[0]);
+-		close(rpipe[1]);
+-		close(wpipe[0]);
+-		close(wpipe[1]);
++		for (int i = 3; i < sysconf(_SC_OPEN_MAX); i++)
++			close(i);
+ 
+ 		// Exec
+ 		execl("/bin/sh", "sh", "-c", program, (char*) NULL);
+@@ -194,8 +192,8 @@
+ 		else if (this->data[PROXY_MODE] == "manual") {
+ 			string type, host, port;
+ 			bool       auth = this->data[PROXY_USE_AUTHENTICATION] == "true";
+-			string username = url::encode(this->data[PROXY_AUTH_USER], url::ALLOWED_IN_USERINFO_ELEMENT);
+-			string password = url::encode(this->data[PROXY_AUTH_PASSWORD], url::ALLOWED_IN_USERINFO_ELEMENT);
++			string username = url::encode(this->data[PROXY_AUTH_USER], URL_ALLOWED_IN_USERINFO_ELEMENT);
++			string password = url::encode(this->data[PROXY_AUTH_PASSWORD], URL_ALLOWED_IN_USERINFO_ELEMENT);
+ 			bool same_proxy = this->data[PROXY_SAME_FOR_ALL] == "true"; 
+ 
+ 			// If socks is set use it (except when same_proxy is set)
+diff -ur libproxy-0.4.6/libproxy/modules/pacrunner_mozjs.cpp libproxy-trunk/libproxy/modules/pacrunner_mozjs.cpp
+--- libproxy-0.4.6/libproxy/modules/pacrunner_mozjs.cpp	2010-09-01 22:23:34.000000000 +0200
++++ libproxy-trunk/libproxy/modules/pacrunner_mozjs.cpp	2011-03-29 12:12:10.915395005 +0200
+@@ -42,12 +42,12 @@
+ #define INET6_ADDRSTRLEN 46
+ #endif
+ 
+-static JSBool dnsResolve(JSContext *cx, JSObject * /*obj*/, uintN /*argc*/, jsval *argv, jsval *rval) {
++static JSBool dnsResolve_(JSContext *cx, jsval hostname, jsval *vp) {
+ 	// Get hostname argument
+-	char *tmp = JS_strdup(cx, JS_GetStringBytes(JS_ValueToString(cx, argv[0])));
++	char *tmp = JS_EncodeString(cx, JS_ValueToString(cx, hostname));
+ 
+ 	// Set the default return value
+-	*rval = JSVAL_NULL;
++	JS_SET_RVAL(cx, vp, JSVAL_NULL);
+ 
+ 	// Look it up
+ 	struct addrinfo *info = NULL;
+@@ -66,7 +66,7 @@
+ 					NI_NUMERICHOST)) goto out;
+ 
+ 	// We succeeded
+-	*rval = STRING_TO_JSVAL(JS_NewString(cx, tmp, strlen(tmp)));
++	JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyN(cx, tmp, strlen(tmp))));
+ 	tmp = NULL;
+ 
+ 	out:
+@@ -75,15 +75,20 @@
+ 		return true;
+ }
+ 
+-static JSBool myIpAddress(JSContext *cx, JSObject *obj, uintN /*argc*/, jsval * /*argv*/, jsval *rval) {
++static JSBool dnsResolve(JSContext *cx, uintN /*argc*/, jsval *vp) {
++	jsval *argv = JS_ARGV(cx, vp);
++	return dnsResolve_(cx, argv[0], vp);
++}
++
++static JSBool myIpAddress(JSContext *cx, uintN /*argc*/, jsval *vp) {
+ 	char *hostname = (char *) JS_malloc(cx, 1024);
+ 	if (!gethostname(hostname, 1023)) {
+-		JSString *myhost = JS_NewString(cx, hostname, strlen(hostname));
++		JSString *myhost = JS_NewStringCopyN(cx, hostname, strlen(hostname));
+ 		jsval arg = STRING_TO_JSVAL(myhost);
+-		return dnsResolve(cx, obj, 1, &arg, rval);
++		return dnsResolve_(cx, 1, &arg);
+ 	}
+ 	JS_free(cx, hostname);
+-	*rval = JSVAL_NULL;
++	JS_SET_RVAL(cx, vp, JSVAL_NULL);
+ 	return true;
+ }
+ 
+@@ -91,7 +96,7 @@
+ // This MUST be a static global
+ static JSClass cls = {
+ 		"global", JSCLASS_GLOBAL_FLAGS,
+-		JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
++		JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
+ 		JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
+ 		NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+ };
+@@ -111,7 +116,7 @@
+ 	    //JS_SetOptions(this->jsctx, JSOPTION_VAROBJFIX);
+ 	    //JS_SetVersion(this->jsctx, JSVERSION_LATEST);
+ 	    //JS_SetErrorReporter(cx, reportError);
+-		if (!(this->jsglb = JS_NewObject(this->jsctx, &cls, NULL, NULL))) goto error;
++		if (!(this->jsglb = JS_NewCompartmentAndGlobalObject(this->jsctx, &cls, NULL))) goto error;
+ 		if (!JS_InitStandardClasses(this->jsctx, this->jsglb))            goto error;
+ 
+ 		// Define Javascript functions
+@@ -147,15 +152,19 @@
+ 			throw bad_alloc();
+ 		}
+ 		jsval args[2] = {
+-			STRING_TO_JSVAL(JS_NewString(this->jsctx, tmpurl, strlen(tmpurl))),
+-			STRING_TO_JSVAL(JS_NewString(this->jsctx, tmphost, strlen(tmphost)))
++			STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmpurl, strlen(tmpurl))),
++			STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmphost, strlen(tmphost)))
+ 		};
+ 
+ 		// Find the proxy (call FindProxyForURL())
+ 		jsval rval;
+ 		JSBool result = JS_CallFunctionName(this->jsctx, this->jsglb, "FindProxyForURL", 2, args, &rval);
+ 		if (!result) return "";
+-		string answer = string(JS_GetStringBytes(JS_ValueToString(this->jsctx, rval)));
++		
++		char * tmpanswer = JS_EncodeString(this->jsctx, JS_ValueToString(this->jsctx, rval));
++		string answer = string(tmpanswer);
++		JS_free(this->jsctx, tmpanswer);
++
+ 		if (answer == "undefined") return "";
+ 		return answer;
+ 	}
+diff -ur libproxy-0.4.6/libproxy/url.cpp libproxy-trunk/libproxy/url.cpp
+--- libproxy-0.4.6/libproxy/url.cpp	2010-09-01 22:23:34.000000000 +0200
++++ libproxy-trunk/libproxy/url.cpp	2011-03-29 12:12:11.023395004 +0200
+@@ -36,12 +36,9 @@
+ 
+ #ifdef WIN32
+ #include <io.h>
+-#define pfsize(st) (st.st_size)
+ #define close _close
+ #define read _read
+ #define SHUT_RDWR SD_BOTH
+-#else
+-#define pfsize(st) (st.st_blksize * st.st_blocks)
+ #endif
+ 
+ #include "url.hpp"
+@@ -56,13 +53,6 @@
+ // This is the maximum pac size (to avoid memory attacks)
+ #define PAC_MAX_SIZE 102400
+ 
+-const string url::GENERIC_DELIMITERS(":/?#[]@");
+-const string url::SUBCOMPONENT_DELIMITERS("!$&'()*+,;=");
+-const string url::ALLOWED_IN_USERINFO_ELEMENT(url::SUBCOMPONENT_DELIMITERS);
+-const string url::ALLOWED_IN_USERINFO(url::ALLOWED_IN_USERINFO_ELEMENT + ":");
+-const string url::ALLOWED_IN_PATH_ELEMENT(url::SUBCOMPONENT_DELIMITERS + ":@");
+-const string url::ALLOWED_IN_PATH(url::ALLOWED_IN_PATH_ELEMENT + "/");
+-
+ static inline int get_default_port(string scheme) {
+ 	struct servent *serv;
+ 	size_t plus = scheme.find('+');
+@@ -109,8 +99,8 @@
+ 
+ string url::encode(const string &data, const string &valid_reserved) {
+ 	ostringstream encoded;
+-	for (int i=0; data[i]; i++) {
+-		if (isalnum(data[i])
++	for (unsigned int i=0; i < data.size(); i++) {
++		if (isalnum((unsigned char)data[i])
+ 				|| valid_reserved.find(data[i]) != string::npos
+ 				|| string("-._~").find(data[i]) != string::npos)
+ 			encoded << data[i];
+@@ -211,7 +201,8 @@
+ 			host_start = userinfo_end + 1;
+ 
+ 		/* Check for IPv6 IP */
+-		if (hier_part[host_start] == '[') {
++		if (host_start < hier_part.size()
++                    && hier_part[host_start] == '[') {
+ 			host_end = hier_part.find(']', host_start);
+ 			if (host_end == string::npos)
+ 				throw parse_error("Invalid URL: " + url);
+@@ -232,7 +223,7 @@
+ 		/* Get port */
+ 		m_port = get_default_port(m_scheme);
+ 
+-		if (host_end != hier_part.size()
++		if (host_end < hier_part.size()
+ 			&& hier_part[host_end] == ':') {
+ 			size_t port_start = host_end + 1;
+ 			m_port = atoi(hier_part.c_str() + port_start);
+@@ -400,10 +391,12 @@
+ 		struct stat st;
+ 		if ((sock = ::open(m_path.c_str(), O_RDONLY)) < 0)
+ 			return NULL;
+-		if (!fstat(sock, &st) && pfsize(st) < PAC_MAX_SIZE) {
+-			buffer = new char[pfsize(st)+1];
+-			if (read(sock, buffer, pfsize(st)) == 0) {
+-				delete buffer;
++
++		if (!fstat(sock, &st) && st.st_size < PAC_MAX_SIZE) {
++			buffer = new char[st.st_size+1];
++			memset(buffer, 0, st.st_size+1);
++			if (read(sock, buffer, st.st_size) == 0) {
++				delete[] buffer;
+ 				buffer = NULL;
+ 			}
+ 		}
+diff -ur libproxy-0.4.6/libproxy/url.hpp libproxy-trunk/libproxy/url.hpp
+--- libproxy-0.4.6/libproxy/url.hpp	2010-09-01 22:23:34.000000000 +0200
++++ libproxy-trunk/libproxy/url.hpp	2011-03-29 12:12:11.024395005 +0200
+@@ -27,6 +27,13 @@
+ 
+ #include "config.hpp"
+ 
++#define URL_GENERIC_DELIMITERS          ":/?#[]@"
++#define URL_SUBCOMPONENT_DELIMITERS     "!$&'()*+,;="
++#define URL_ALLOWED_IN_USERINFO_ELEMENT URL_SUBCOMPONENT_DELIMITERS
++#define URL_ALLOWED_IN_USERINFO         URL_ALLOWED_IN_USERINFO_ELEMENT ":"
++#define URL_ALLOWED_IN_PATH_ELEMENT     URL_SUBCOMPONENT_DELIMITERS ":@"
++#define URL_ALLOWED_IN_PATH             URL_ALLOWED_IN_PATH_ELEMENT "/"
++
+ namespace libproxy {
+ 
+ using namespace std;
+@@ -38,13 +45,6 @@
+ 
+ class DLL_PUBLIC url {
+ public:
+-	static const string ALLOWED_IN_PATH;
+-	static const string ALLOWED_IN_PATH_ELEMENT;
+-	static const string ALLOWED_IN_USERINFO;
+-	static const string ALLOWED_IN_USERINFO_ELEMENT;
+-	static const string GENERIC_DELIMITERS;
+-	static const string SUBCOMPONENT_DELIMITERS;
+-
+ 	static bool is_valid(const string url);
+ 	static string encode(const string &data, const string &valid_reserved = "");
+ 
+diff -ur libproxy-0.4.6/NEWS libproxy-trunk/NEWS
+--- libproxy-0.4.6/NEWS	2010-09-01 22:23:34.000000000 +0200
++++ libproxy-trunk/NEWS	2011-03-29 12:12:11.303395004 +0200
+@@ -1,3 +1,7 @@
++New in version 0.4.7
++==============================
++* Support/require xulrunner 2.0+
++
+ New in version 0.4.6
+ ==============================	
+ * Fixed a crash in the URL parser
diff --git a/libproxy.spec b/libproxy.spec
index e97b2b6..2f9bf38 100644
--- a/libproxy.spec
+++ b/libproxy.spec
@@ -3,10 +3,10 @@
 #0 to bootstrap libproxy circle dependencies - 1 normal case
 %if 1
 %if 0%{?fedora} < 15
-%global gecko_version 1.9.2
-%global _with_mozjs 1
 %global _with_webkit 1
 %endif
+%global gecko_version 2.0
+%global _with_mozjs 1
 %global _with_gnome 1
 %global _with_kde 1
 %global _with_networkmanager 1
@@ -15,7 +15,7 @@
 
 Name:           libproxy
 Version:        0.4.6
-Release:        3%{?dist}
+Release:        4%{?dist}
 Summary:        A library handling all the details of proxy configuration
 
 Group:          System Environment/Libraries
@@ -23,10 +23,11 @@ License:        LGPLv2+
 URL:            http://code.google.com/p/libproxy/
 Source0:        http://libproxy.googlecode.com/files/libproxy-%{version}.tar.gz
 Patch0:         libproxy-0.4.6-python_noarch.patch
+Patch1:         libproxy-trunk.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 %{?_with_python:BuildRequires:  python-devel}
-BuildRequires:  libmodman-devel >= 2.0.0
+BuildRequires:  libmodman-devel >= 2.0.1
 BuildRequires:  cmake >= 2.6.0
 
 # gnome
@@ -35,7 +36,7 @@ BuildRequires:  GConf2-devel
 BuildRequires:  libXmu-devel
 }
 # mozjs
-%{?_with_mozjs:BuildRequires:  gecko-devel}
+%{?_with_mozjs:BuildRequires: gecko-devel >= %{gecko_version}}
 # NetworkManager
 %{?_with_networkmanager:
 BuildRequires:  NetworkManager-devel
@@ -161,9 +162,7 @@ developing applications that use %{name}.
 %prep
 %setup -q
 %patch0 -p1 -b.pynoarch
-
-#Fix version field in pkg-config
-sed -i -e 's|@PROJECT_VERSION@|%{version}|' libproxy/libproxy-1.0.pc.in
+%patch1 -p1 -b .trunk
 
 
 %build
@@ -252,6 +251,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Tue Mar 29 2011 Nicolas Chauvet <kwizart at gmail.com> - 0.4.6-4
+- Add support for xulrunner 2.0 from trunk
+
 * Wed Nov 24 2010 Nicolas Chauvet <kwizart at gmail.com> - 0.4.6-3
 - Fix mozjs/webkit obsoletion - rhbz#656849
 - Workaround unreliable Version field in pkg-config - rhbz#656484


More information about the scm-commits mailing list