[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