Compare commits

...

10 Commits

Author SHA1 Message Date
openeuler-ci-bot
a6b7efd21d
!45 update libproxy to 0.4.18
From: @sherlock2010 
Reviewed-by: @seuzw 
Signed-off-by: @seuzw
2022-11-09 01:58:51 +00:00
sherlock2010
520e33fb92 update libproxy to 0.4.18 2022-11-04 09:55:58 +00:00
openeuler-ci-bot
32254a7475
!35 【轻量级 PR】:fix bogus date in %changelog
From: @loong-C 
Reviewed-by: @seuzw 
Signed-off-by: @seuzw
2022-06-15 07:48:34 +00:00
loong-C
2344191dc2
fix bogus date in %changelog
![输入图片说明](https://images.gitee.com/uploads/images/2022/0615/114119_4e8aa0f4_9884780.png "屏幕截图.png")
2022-06-15 03:42:02 +00:00
openeuler-ci-bot
53ab2376fe !23 update libproxy to 0.4.17
From: @haochenstar
Reviewed-by: @zengwefeng
Signed-off-by: @zengwefeng
2021-01-30 17:14:28 +08:00
haochenstar
f4d59b6b1c update libproxy to 0.4.17 2021-01-28 15:31:39 +08:00
openeuler-ci-bot
6e745b8550 !16 delete mozjs-68 dependence for libproxy
From: @haochenstar
Reviewed-by: @zengwefeng
Signed-off-by: @zengwefeng
2020-12-03 15:35:24 +08:00
haochenstar
ebb09672ef delete mozjs-68 dependence for libproxy 2020-12-03 15:13:44 +08:00
openeuler-ci-bot
38ead91e29 !12 remove python2, don't support python2 anymore
From: @haochenstar
Reviewed-by: @zengwefeng
Signed-off-by: @zengwefeng
2020-10-30 11:30:12 +08:00
haochenstar
b7b137f6f2 delete python2 dependency,don't support python2 anymore 2020-10-30 10:29:46 +08:00
12 changed files with 43 additions and 806 deletions

Binary file not shown.

View File

@ -1,177 +0,0 @@
From 6f6d2dd74e6a1bd0e356e9290d733672afcf8f70 Mon Sep 17 00:00:00 2001
From: David Woodhouse <David.Woodhouse@intel.com>
Date: Wed, 8 Dec 2010 12:13:43 +0000
Subject: [PATCH] =?UTF-8?q?Add=20config=20module=20for=20querying=20PacRun?=
=?UTF-8?q?ner=20d=C3=A6mon?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
libproxy/cmake/modules.cmk | 2 +
libproxy/cmake/modules/config_pacrunner.cmk | 3 +
libproxy/modules/config_pacrunner.cpp | 122 ++++++++++++++++++++++++++++
3 files changed, 127 insertions(+)
create mode 100644 libproxy/cmake/modules/config_pacrunner.cmk
create mode 100644 libproxy/modules/config_pacrunner.cpp
diff --git a/libproxy/cmake/modules.cmk b/libproxy/cmake/modules.cmk
index 68ff898..2593d29 100644
--- a/libproxy/cmake/modules.cmk
+++ b/libproxy/cmake/modules.cmk
@@ -8,6 +8,7 @@ endif()
# Do module determination
include(cmake/pxmodule.cmk)
include(cmake/pkgconfig.cmk)
+include(cmake/modules/config_pacrunner.cmk)
include(cmake/modules/config_envvar.cmk)
include(cmake/modules/config_sysconfig.cmk)
include(cmake/modules/config_gnome.cmk)
@@ -28,6 +29,7 @@ endif()
## Module definition
#
message("MODULES TO BUILD:")
+px_module(config_pacrunner "${DBUS_FOUND}" 0 ${DBUS_LIBRARIES})
px_module(config_envvar "${ENVVAR_FOUND}" 1)
px_module(config_sysconfig "${SYSCONFIG_FOUND}" 1)
px_module(config_gnome "${GNOME2_FOUND}" 0)
diff --git a/libproxy/cmake/modules/config_pacrunner.cmk b/libproxy/cmake/modules/config_pacrunner.cmk
new file mode 100644
index 0000000..11dde89
--- /dev/null
+++ b/libproxy/cmake/modules/config_pacrunner.cmk
@@ -0,0 +1,3 @@
+if (NOT WIN32 AND NOT APPLE)
+ px_check_modules(DBUS dbus-1)
+endif()
diff --git a/libproxy/modules/config_pacrunner.cpp b/libproxy/modules/config_pacrunner.cpp
new file mode 100644
index 0000000..b4cf723
--- /dev/null
+++ b/libproxy/modules/config_pacrunner.cpp
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * libproxy - A library for proxy configuration
+ * Copyright (C) 2010 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ******************************************************************************/
+
+#include "../extension_config.hpp"
+using namespace libproxy;
+
+#include <string.h>
+#include <dbus/dbus.h>
+
+class pacrunner_config_extension : public config_extension {
+public:
+ pacrunner_config_extension() {
+ this->conn = NULL;
+ }
+
+ ~pacrunner_config_extension() {
+ if (this->conn) dbus_connection_close(this->conn);
+ }
+
+ class scoped_dbus_message {
+ public:
+ scoped_dbus_message(DBusMessage *msg) {
+ this->msg = msg;
+ }
+
+ ~scoped_dbus_message() {
+ if (this->msg)
+ dbus_message_unref(msg);
+ }
+
+ private:
+ DBusMessage *msg;
+ };
+
+ vector<url> get_config(const url &dest) throw (runtime_error) {
+ // Make sure we have a valid connection with a proper match
+ DBusConnection *conn = this->conn;
+ vector<url> response;
+
+ if (!conn || !dbus_connection_get_is_connected(conn))
+ {
+ // If the connection was disconnected,
+ // close it an clear the queue
+ if (conn)
+ {
+ dbus_connection_close(conn);
+ dbus_connection_read_write(conn, 0);
+ for (DBusMessage *msg=NULL ; (msg = dbus_connection_pop_message(conn)) ; dbus_message_unref(msg)) {};
+ }
+
+ // Create a new connections
+ conn = dbus_bus_get_private(DBUS_BUS_SYSTEM, NULL);
+ this->conn = conn;
+ if (!conn)
+ throw runtime_error("Unable to set up DBus connection");
+
+ // If connection was successful, set it up
+ dbus_connection_set_exit_on_disconnect(conn, false);
+ }
+
+ DBusMessage *msg, *reply;
+
+ msg = dbus_message_new_method_call("org.pacrunner",
+ "/org/pacrunner/client",
+ "org.pacrunner.Client",
+ "FindProxyForURL");
+ if (!msg)
+ throw runtime_error("Unable to create PacRunner DBus call");
+
+ string dest_str = dest.to_string();
+ string dest_host = dest.get_host();
+ const char *dest_cstr = dest_str.c_str();
+ const char *dest_host_cstr = dest_host.c_str();
+
+ dbus_message_append_args(msg, DBUS_TYPE_STRING, &dest_cstr,
+ DBUS_TYPE_STRING, &dest_host_cstr,
+ DBUS_TYPE_INVALID);
+
+ reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, NULL);
+
+ dbus_message_unref(msg);
+
+ if (!reply)
+ throw runtime_error("Failed to get DBus response from PacRunner");
+
+ scoped_dbus_message smsg(reply);
+ char *str = NULL;
+ dbus_message_get_args(reply, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID);
+
+ if (!str || !strlen(str) || !::strcmp(str, "DIRECT"))
+ response.push_back(url("direct://"));
+ else if (!strncmp(str, "PROXY ", 6))
+ response.push_back(url("http://" + string(str + 6)));
+ else if (!strncmp(str, "SOCKS ", 6))
+ response.push_back(url("socks://" + string(str + 6)));
+ else {
+ throw runtime_error("Unrecognised proxy response from PacRunner: " + string(str));
+ }
+ return response;
+ }
+
+private:
+ DBusConnection *conn;
+};
+
+MM_MODULE_INIT_EZ(pacrunner_config_extension, true, NULL, NULL);
--
1.8.2.1

View File

@ -1,96 +0,0 @@
From 75750b01d846fde77451fad4000bf0ca7caec8a7 Mon Sep 17 00:00:00 2001
From: Fei Li <lifeibiren@gmail.com>
Date: Fri, 17 Jul 2020 02:18:37 +0800
Subject: [PATCH] Fix buffer overflow when PAC is enabled
The bug was found on Windows 10 (MINGW64) when PAC is enabled. It turned
out to be the large PAC file (more than 102400 bytes) returned by a
local proxy program with no content-length present.
---
libproxy/url.cpp | 44 +++++++++++++++++++++++++++++++-------------
1 file changed, 31 insertions(+), 13 deletions(-)
diff --git a/libproxy/url.cpp b/libproxy/url.cpp
index b61a9bc..230d0ee 100644
--- a/libproxy/url.cpp
+++ b/libproxy/url.cpp
@@ -52,7 +52,7 @@ using namespace std;
#define PAC_MIME_TYPE_FB "text/plain"
// This is the maximum pac size (to avoid memory attacks)
-#define PAC_MAX_SIZE 102400
+#define PAC_MAX_SIZE 0x800000
// This is the default block size to use when receiving via HTTP
#define PAC_HTTP_BLOCK_SIZE 512
@@ -476,15 +476,13 @@ char* url::get_pac() {
}
// Get content
- unsigned int recvd = 0;
- buffer = new char[PAC_MAX_SIZE];
- memset(buffer, 0, PAC_MAX_SIZE);
+ std::vector<char> dynamic_buffer;
do {
unsigned int chunk_length;
if (chunked) {
// Discard the empty line if we received a previous chunk
- if (recvd > 0) recvline(sock);
+ if (!dynamic_buffer.empty()) recvline(sock);
// Get the chunk-length line as an integer
if (sscanf(recvline(sock).c_str(), "%x", &chunk_length) != 1 || chunk_length == 0) break;
@@ -496,21 +494,41 @@ char* url::get_pac() {
if (content_length >= PAC_MAX_SIZE) break;
- while (content_length == 0 || recvd != content_length) {
- int r = recv(sock, buffer + recvd,
- content_length == 0 ? PAC_HTTP_BLOCK_SIZE
- : content_length - recvd, 0);
+ while (content_length == 0 || dynamic_buffer.size() != content_length) {
+ // Calculate length to recv
+ unsigned int length_to_read = PAC_HTTP_BLOCK_SIZE;
+ if (content_length > 0)
+ length_to_read = content_length - dynamic_buffer.size();
+
+ // Prepare buffer
+ dynamic_buffer.resize(dynamic_buffer.size() + length_to_read);
+
+ int r = recv(sock, dynamic_buffer.data() + dynamic_buffer.size() - length_to_read, length_to_read, 0);
+
+ // Shrink buffer to fit
+ if (r >= 0)
+ dynamic_buffer.resize(dynamic_buffer.size() - length_to_read + r);
+
+ // PAC size too large, discard
+ if (dynamic_buffer.size() >= PAC_MAX_SIZE) {
+ chunked = false;
+ dynamic_buffer.clear();
+ break;
+ }
+
if (r <= 0) {
chunked = false;
break;
}
- recvd += r;
}
} while (chunked);
- if (content_length != 0 && string(buffer).size() != content_length) {
- delete[] buffer;
- buffer = NULL;
+ if (content_length == 0 || content_length == dynamic_buffer.size()) {
+ buffer = new char[dynamic_buffer.size() + 1];
+ if (!dynamic_buffer.empty()) {
+ memcpy(buffer, dynamic_buffer.data(), dynamic_buffer.size());
+ }
+ buffer[dynamic_buffer.size()] = '\0';
}
}
--
1.8.3.1

View File

@ -1,41 +0,0 @@
diff -up libproxy-0.4.11/libproxy/extension_pacrunner.cpp.crash libproxy-0.4.11/libproxy/extension_pacrunner.cpp
--- libproxy-0.4.11/libproxy/extension_pacrunner.cpp.crash 2010-07-29 08:14:59.000000000 -0400
+++ libproxy-0.4.11/libproxy/extension_pacrunner.cpp 2013-11-11 15:23:56.987266457 -0500
@@ -22,20 +22,10 @@ using namespace libproxy;
pacrunner::pacrunner(string, const url&) {}
-pacrunner_extension::pacrunner_extension() {
- this->pr = NULL;
-}
+pacrunner_extension::pacrunner_extension() {}
-pacrunner_extension::~pacrunner_extension() {
- if (this->pr) delete this->pr;
-}
+pacrunner_extension::~pacrunner_extension() {}
pacrunner* pacrunner_extension::get(string pac, const url& pacurl) throw (bad_alloc) {
- if (this->pr) {
- if (this->last == pac)
- return this->pr;
- delete this->pr;
- }
-
- return this->pr = this->create(pac, pacurl);
+ return this->create(pac, pacurl);
}
diff -up libproxy-0.4.11/libproxy/proxy.cpp.crash libproxy-0.4.11/libproxy/proxy.cpp
--- libproxy-0.4.11/libproxy/proxy.cpp.crash 2013-11-11 15:25:27.309271353 -0500
+++ libproxy-0.4.11/libproxy/proxy.cpp 2013-11-11 15:25:31.569271584 -0500
@@ -416,7 +416,9 @@ void proxy_factory::run_pac(url &realurl
/* Run the PAC, but only try one PACRunner */
if (debug) cerr << "Using pacrunner: " << typeid(*pacrunners[0]).name() << endl;
- string pacresp = pacrunners[0]->get(this->pac, this->pacurl->to_string())->run(realurl);
+ pacrunner* runner = pacrunners[0]->get(this->pac, this->pacurl->to_string());
+ string pacresp = runner->run(realurl);
+ delete runner;
if (debug) cerr << "Pacrunner returned: " << pacresp << endl;
format_pac_response(pacresp, response);
}

View File

@ -1,58 +0,0 @@
From a83dae404feac517695c23ff43ce1e116e2bfbe0 Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@gnome.org>
Date: Wed, 9 Sep 2020 11:12:02 -0500
Subject: [PATCH] Rewrite url::recvline to be nonrecursive
This function processes network input. It's semi-trusted, because the
PAC ought to be trusted. But we still shouldn't allow it to control how
far we recurse. A malicious PAC can cause us to overflow the stack by
sending a sufficiently-long line without any '\n' character.
Also, this function failed to properly handle EINTR, so let's fix that
too, for good measure.
Fixes #134
---
libproxy/url.cpp | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/libproxy/url.cpp b/libproxy/url.cpp
index ee776b2..68d69cd 100644
--- a/libproxy/url.cpp
+++ b/libproxy/url.cpp
@@ -386,16 +386,24 @@ string url::to_string() const {
return m_orig;
}
-static inline string recvline(int fd) {
- // Read a character.
- // If we don't get a character, return empty string.
- // If we are at the end of the line, return empty string.
- char c = '\0';
-
- if (recv(fd, &c, 1, 0) != 1 || c == '\n')
- return "";
-
- return string(1, c) + recvline(fd);
+static string recvline(int fd) {
+ string line;
+ int ret;
+
+ // Reserve arbitrary amount of space to avoid small memory reallocations.
+ line.reserve(128);
+
+ do {
+ char c;
+ ret = recv(fd, &c, 1, 0);
+ if (ret == 1) {
+ if (c == '\n')
+ return line;
+ line += c;
+ }
+ } while (ret == 1 || (ret == -1 && errno == EINTR));
+
+ return line;
}
char* url::get_pac() {

View File

@ -1,38 +0,0 @@
From 738785214546ec5bb772886019529b2a6519deaf Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@debian.org>
Date: Fri, 1 May 2020 19:04:22 +0100
Subject: [PATCH] mozjs: Avoid use-after-free
If we don't assign the temporary std::string returned by
url_.to_string() to a variable, then it immediately goes out of scope
and is freed, resulting in the result of c_str() pointing into freed
memory. This works about as well as you would expect.
Signed-off-by: Simon McVittie <smcv@debian.org>
---
libproxy/modules/pacrunner_mozjs.cpp | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/libproxy/modules/pacrunner_mozjs.cpp b/libproxy/modules/pacrunner_mozjs.cpp
index ade6d0a..aac6531 100644
--- a/libproxy/modules/pacrunner_mozjs.cpp
+++ b/libproxy/modules/pacrunner_mozjs.cpp
@@ -175,14 +175,11 @@ class mozjs_pacrunner : public pacrunner {
string run(const url& url_) throw (bad_alloc) {
// Build arguments to the FindProxyForURL() function
- const char *tmpurl = url_.to_string().c_str();
- const char *tmphost = url_.get_host().c_str();
- if (!tmpurl || !tmphost) {
- throw bad_alloc();
- }
+ string tmpurl(url_.to_string());
+ string tmphost(url_.get_host());
JS::AutoValueArray<2> args(this->jsctx);
- args[0].setString(JS_NewStringCopyZ(this->jsctx, tmpurl));
- args[1].setString(JS_NewStringCopyZ(this->jsctx, tmphost));
+ args[0].setString(JS_NewStringCopyZ(this->jsctx, tmpurl.c_str()));
+ args[1].setString(JS_NewStringCopyZ(this->jsctx, tmphost.c_str()));
// Find the proxy (call FindProxyForURL())
JS::RootedValue rval(this->jsctx);

View File

@ -1,124 +0,0 @@
From f594720280b2e40d81fa6e286a0ef8868687ef7e Mon Sep 17 00:00:00 2001
From: Pierre Lejeune <superheron@gmail.com>
Date: Sat, 30 Jun 2018 21:10:06 +0200
Subject: [PATCH] Build with mozjs-52
Fixes #71
---
libproxy/cmake/modules/pacrunner_mozjs.cmk | 2 +-
libproxy/modules/pacrunner_mozjs.cpp | 19 +++++++------------
2 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/libproxy/cmake/modules/pacrunner_mozjs.cmk b/libproxy/cmake/modules/pacrunner_mozjs.cmk
index c2ae3db..20857fb 100644
--- a/libproxy/cmake/modules/pacrunner_mozjs.cmk
+++ b/libproxy/cmake/modules/pacrunner_mozjs.cmk
@@ -9,7 +9,7 @@ if(WIN32)
elseif(NOT APPLE)
option(WITH_MOZJS "Search for MOZJS package" ON)
if (WITH_MOZJS)
- pkg_search_module(MOZJS mozjs-38)
+ pkg_search_module(MOZJS mozjs-52)
if(MOZJS_FOUND)
include_directories(${MOZJS_INCLUDE_DIRS})
link_directories(${MOZJS_LIBRARY_DIRS})
diff --git a/libproxy/modules/pacrunner_mozjs.cpp b/libproxy/modules/pacrunner_mozjs.cpp
index a70b2e9..ed07c69 100644
--- a/libproxy/modules/pacrunner_mozjs.cpp
+++ b/libproxy/modules/pacrunner_mozjs.cpp
@@ -35,6 +35,7 @@ using namespace libproxy;
#pragma GCC diagnostic ignored "-Winvalid-offsetof"
#include <jsapi.h>
#pragma GCC diagnostic error "-Winvalid-offsetof"
+#include <js/Initialization.h>
#include <js/CallArgs.h>
#include "pacutils.h"
@@ -111,17 +112,14 @@ class mozjs_pacrunner : public pacrunner {
mozjs_pacrunner(string pac, const url& pacurl) throw (bad_alloc) : pacrunner(pac, pacurl) {
// Set defaults
- this->jsrun = nullptr;
this->jsctx = nullptr;
JS_Init();
- // Initialize Javascript runtime environment
- if (!(this->jsrun = JS_NewRuntime(1024 * 1024))) goto error;
- if (!(this->jsctx = JS_NewContext(this->jsrun, 1024 * 1024))) goto error;
+ // Initialize Javascript context
+ if (!(this->jsctx = JS_NewContext(1024 * 1024))) goto error;
{
JS::RootedValue rval(this->jsctx);
JS::CompartmentOptions compart_opts;
- compart_opts.setVersion(JSVERSION_LATEST);
this->jsglb = new JS::Heap<JSObject*>(JS_NewGlobalObject(
this->jsctx, &cls,
@@ -139,16 +137,15 @@ class mozjs_pacrunner : public pacrunner {
JS::CompileOptions options(this->jsctx);
options.setUTF8(true);
- JS::Evaluate(this->jsctx, global, options, JAVASCRIPT_ROUTINES,
- strlen(JAVASCRIPT_ROUTINES), &rval);
+ JS::Evaluate(this->jsctx, options, JAVASCRIPT_ROUTINES,
+ strlen(JAVASCRIPT_ROUTINES), JS::MutableHandleValue(&rval));
// Add PAC to the environment
- JS::Evaluate(this->jsctx, global, options, pac.c_str(), pac.length(), &rval);
+ JS::Evaluate(this->jsctx, options, pac.c_str(), pac.length(), JS::MutableHandleValue(&rval));
return;
}
error:
if (this->jsctx) JS_DestroyContext(this->jsctx);
- if (this->jsrun) JS_DestroyRuntime(this->jsrun);
throw bad_alloc();
}
@@ -156,7 +153,6 @@ class mozjs_pacrunner : public pacrunner {
if (this->jsac) delete this->jsac;
if (this->jsglb) delete this->jsglb;
if (this->jsctx) JS_DestroyContext(this->jsctx);
- if (this->jsrun) JS_DestroyRuntime(this->jsrun);
JS_ShutDown();
}
@@ -178,7 +174,7 @@ class mozjs_pacrunner : public pacrunner {
JS::RootedObject global(this->jsctx,this->jsglb->get());
bool result = JS_CallFunctionName(this->jsctx, global, "FindProxyForURL", args, &rval);
if (!result) return "";
-
+
char * tmpanswer = JS_EncodeString(this->jsctx, rval.toString());
string answer = string(tmpanswer);
JS_free(this->jsctx, tmpanswer);
@@ -188,7 +184,6 @@ class mozjs_pacrunner : public pacrunner {
}
private:
- JSRuntime *jsrun;
JSContext *jsctx;
JS::Heap<JSObject*> *jsglb;
JSAutoCompartment *jsac;
From a9b052c6e30101fb0b702917f245a3e2a2f08366 Mon Sep 17 00:00:00 2001
From: Laurent Bigonville <bigon@bigon.be>
Date: Tue, 2 Oct 2018 10:22:56 +0200
Subject: [PATCH] Add call to JS::InitSelfHostedCode()
This is needed otherwise mozjs crashes
---
libproxy/modules/pacrunner_mozjs.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libproxy/modules/pacrunner_mozjs.cpp b/libproxy/modules/pacrunner_mozjs.cpp
index ed07c69..38e7d46 100644
--- a/libproxy/modules/pacrunner_mozjs.cpp
+++ b/libproxy/modules/pacrunner_mozjs.cpp
@@ -118,6 +118,8 @@ class mozjs_pacrunner : public pacrunner {
// Initialize Javascript context
if (!(this->jsctx = JS_NewContext(1024 * 1024))) goto error;
{
+ if (!JS::InitSelfHostedCode(this->jsctx)) goto error;
+
JS::RootedValue rval(this->jsctx);
JS::CompartmentOptions compart_opts;

View File

@ -1,23 +0,0 @@
From 1600c6af7ed775d4ccbb239937acd92ef7162409 Mon Sep 17 00:00:00 2001
From: Laurent Bigonville <bigon@bigon.be>
Date: Sun, 9 Dec 2018 16:07:55 +0100
Subject: [PATCH] Build with mozjs 60 instead
This seems enough to make it work with mozjs 60
---
libproxy/cmake/modules/pacrunner_mozjs.cmk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libproxy/cmake/modules/pacrunner_mozjs.cmk b/libproxy/cmake/modules/pacrunner_mozjs.cmk
index 20857fb..871cc85 100644
--- a/libproxy/cmake/modules/pacrunner_mozjs.cmk
+++ b/libproxy/cmake/modules/pacrunner_mozjs.cmk
@@ -9,7 +9,7 @@ if(WIN32)
elseif(NOT APPLE)
option(WITH_MOZJS "Search for MOZJS package" ON)
if (WITH_MOZJS)
- pkg_search_module(MOZJS mozjs-52)
+ pkg_search_module(MOZJS mozjs-60)
if(MOZJS_FOUND)
include_directories(${MOZJS_INCLUDE_DIRS})
link_directories(${MOZJS_LIBRARY_DIRS})

View File

@ -1,180 +0,0 @@
From 6c9e48accddb90eef8412bef3ccc29594935d3b3 Mon Sep 17 00:00:00 2001
From: Iain Lane <iain@orangesquash.org.uk>
Date: Wed, 11 Mar 2020 11:54:52 +0000
Subject: [PATCH] mozjs: Port to mozjs 68
There are a number of API changes that need to be adapted to, notably
- JS_EncodeString is gone; need to use JS_EncodeStringToUTF8 now which
requires a rooted object to be passed in.
- JS_free is gone
The pkg-config file ships some flags which need to be supplied to the
build.
---
libproxy/cmake/modules/pacrunner_mozjs.cmk | 6 ++-
libproxy/modules/pacrunner_mozjs.cpp | 56 ++++++++++++++--------
2 files changed, 41 insertions(+), 21 deletions(-)
diff --git a/libproxy/cmake/modules/pacrunner_mozjs.cmk b/libproxy/cmake/modules/pacrunner_mozjs.cmk
index 871cc85..2cc3c51 100644
--- a/libproxy/cmake/modules/pacrunner_mozjs.cmk
+++ b/libproxy/cmake/modules/pacrunner_mozjs.cmk
@@ -9,8 +9,12 @@ if(WIN32)
elseif(NOT APPLE)
option(WITH_MOZJS "Search for MOZJS package" ON)
if (WITH_MOZJS)
- pkg_search_module(MOZJS mozjs-60)
+ pkg_search_module(MOZJS mozjs-68)
if(MOZJS_FOUND)
+ foreach(OPT ${MOZJS_CFLAGS})
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OPT}")
+ endforeach()
+ message("mozjs is " ${CMAKE_CXX_FLAGS})
include_directories(${MOZJS_INCLUDE_DIRS})
link_directories(${MOZJS_LIBRARY_DIRS})
else()
diff --git a/libproxy/modules/pacrunner_mozjs.cpp b/libproxy/modules/pacrunner_mozjs.cpp
index 38e7d46..37e1b42 100644
--- a/libproxy/modules/pacrunner_mozjs.cpp
+++ b/libproxy/modules/pacrunner_mozjs.cpp
@@ -37,6 +37,9 @@ using namespace libproxy;
#pragma GCC diagnostic error "-Winvalid-offsetof"
#include <js/Initialization.h>
#include <js/CallArgs.h>
+#include <js/CompilationAndEvaluation.h>
+#include <js/MemoryFunctions.h>
+#include <js/SourceText.h>
#include "pacutils.h"
@@ -49,19 +52,21 @@ using namespace libproxy;
#endif
static void dnsResolve_(JSContext *cx, JSString *hostname, JS::CallArgs *argv) {
+ char *tmp;
// Get hostname argument
- char *tmp = JS_EncodeString(cx, hostname);
+ JS::RootedString str(cx, hostname);
+ JS::UniqueChars chars = JS_EncodeStringToUTF8(cx, str);
+ const char *val = chars.get();
// Set the default return value
argv->rval().setNull();
// Look it up
struct addrinfo *info = nullptr;
- if (getaddrinfo(tmp, NULL, NULL, &info))
+ if (getaddrinfo(val, NULL, NULL, &info))
goto out;
// Allocate the IP address
- JS_free(cx, tmp);
tmp = (char *) JS_malloc(cx, INET6_ADDRSTRLEN+1);
memset(tmp, 0, INET6_ADDRSTRLEN+1);
@@ -77,7 +82,6 @@ static void dnsResolve_(JSContext *cx, JSString *hostname, JS::CallArgs *argv) {
out:
if (info) freeaddrinfo(info);
- JS_free(cx, tmp);
}
static bool dnsResolve(JSContext *cx, unsigned argc, JS::Value *vp) {
@@ -121,29 +125,40 @@ class mozjs_pacrunner : public pacrunner {
if (!JS::InitSelfHostedCode(this->jsctx)) goto error;
JS::RootedValue rval(this->jsctx);
- JS::CompartmentOptions compart_opts;
+ JS::RealmOptions realm_opts;
this->jsglb = new JS::Heap<JSObject*>(JS_NewGlobalObject(
this->jsctx, &cls,
nullptr, JS::DontFireOnNewGlobalHook,
- compart_opts));
+ realm_opts));
if (!(this->jsglb)) goto error;
JS::RootedObject global(this->jsctx,this->jsglb->get());
- if (!(this->jsac = new JSAutoCompartment(this->jsctx, global))) goto error;
- if (!JS_InitStandardClasses(this->jsctx, global)) goto error;
+ if (!(this->jsar = new JSAutoRealm(this->jsctx, global))) goto error;
// Define Javascript functions
JS_DefineFunction(this->jsctx, global, "dnsResolve", dnsResolve, 1, 0);
JS_DefineFunction(this->jsctx, global, "myIpAddress", myIpAddress, 0, 0);
JS::CompileOptions options(this->jsctx);
- options.setUTF8(true);
- JS::Evaluate(this->jsctx, options, JAVASCRIPT_ROUTINES,
- strlen(JAVASCRIPT_ROUTINES), JS::MutableHandleValue(&rval));
+ JS::SourceText<mozilla::Utf8Unit> routines, pac_source;
+ if (!routines.init(this->jsctx,
+ JAVASCRIPT_ROUTINES,
+ strlen(JAVASCRIPT_ROUTINES),
+ JS::SourceOwnership::Borrowed))
+ goto error;
+
+ if (!pac_source.init(this->jsctx,
+ pac.c_str(),
+ pac.length(),
+ JS::SourceOwnership::Borrowed))
+ goto error;
+
+
+ JS::Evaluate(this->jsctx, options, routines, JS::MutableHandleValue(&rval));
// Add PAC to the environment
- JS::Evaluate(this->jsctx, options, pac.c_str(), pac.length(), JS::MutableHandleValue(&rval));
+ JS::Evaluate(this->jsctx, options, pac_source, JS::MutableHandleValue(&rval));
return;
}
error:
@@ -152,7 +167,7 @@ class mozjs_pacrunner : public pacrunner {
}
~mozjs_pacrunner() {
- if (this->jsac) delete this->jsac;
+ if (this->jsar) delete this->jsar;
if (this->jsglb) delete this->jsglb;
if (this->jsctx) JS_DestroyContext(this->jsctx);
JS_ShutDown();
@@ -160,11 +175,9 @@ class mozjs_pacrunner : public pacrunner {
string run(const url& url_) throw (bad_alloc) {
// Build arguments to the FindProxyForURL() function
- char *tmpurl = JS_strdup(this->jsctx, url_.to_string().c_str());
- char *tmphost = JS_strdup(this->jsctx, url_.get_host().c_str());
+ const char *tmpurl = url_.to_string().c_str();
+ const char *tmphost = url_.get_host().c_str();
if (!tmpurl || !tmphost) {
- if (tmpurl) JS_free(this->jsctx, tmpurl);
- if (tmphost) JS_free(this->jsctx, tmphost);
throw bad_alloc();
}
JS::AutoValueArray<2> args(this->jsctx);
@@ -176,10 +189,13 @@ class mozjs_pacrunner : public pacrunner {
JS::RootedObject global(this->jsctx,this->jsglb->get());
bool result = JS_CallFunctionName(this->jsctx, global, "FindProxyForURL", args, &rval);
if (!result) return "";
+ if (!rval.isString())
+ return "";
- char * tmpanswer = JS_EncodeString(this->jsctx, rval.toString());
+ JS::RootedString s(this->jsctx, rval.toString());
+ JS::UniqueChars chars = JS_EncodeStringToUTF8(this->jsctx, s);
+ const char *tmpanswer = chars.get();
string answer = string(tmpanswer);
- JS_free(this->jsctx, tmpanswer);
if (answer == "undefined") return "";
return answer;
@@ -188,7 +204,7 @@ class mozjs_pacrunner : public pacrunner {
private:
JSContext *jsctx;
JS::Heap<JSObject*> *jsglb;
- JSAutoCompartment *jsac;
+ JSAutoRealm *jsar;
};
PX_PACRUNNER_MODULE_EZ(mozjs, "JS_DefineFunction", "mozjs");

View File

@ -1,26 +0,0 @@
From 2d6da65598b90480b4a62c4633eda035ea51681f Mon Sep 17 00:00:00 2001
From: David King <amigadave@amigadave.com>
Date: Wed, 27 Jun 2018 06:36:00 +0100
Subject: [PATCH] python: support Python 3.7 and 3.8
Add 3.7 and 3.8 to the list of accepted Python 3 versions.
---
cmake/FindPython3Interp.cmake | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmake/FindPython3Interp.cmake b/cmake/FindPython3Interp.cmake
index c6cbe3d..8e5e409 100644
--- a/cmake/FindPython3Interp.cmake
+++ b/cmake/FindPython3Interp.cmake
@@ -39,7 +39,7 @@
unset(_Python3_NAMES)
-set(_Python3_VERSIONS 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
+set(_Python3_VERSIONS 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
if(Python3Interp_FIND_VERSION)
if(Python3Interp_FIND_VERSION_COUNT GREATER 1)
--
2.17.1

BIN
libproxy-0.4.18.tar.gz Normal file

Binary file not shown.

View File

@ -1,31 +1,19 @@
Name: libproxy
Version: 0.4.15
Release: 17
Version: 0.4.18
Release: 1
Summary: Libproxy is a library that provides automatic proxy configuration management
License: LGPLv2+
URL: https://libproxy.github.io/libproxy/
Source0: https://github.com/libproxy/%{name}/archive/%{version}.tar.gz
Source0: https://github.com/libproxy/%{name}/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
# Source1 comes from the Debian package.
Source1: proxy.1
# Patch from google code
Patch0: 0001-Add-config-module-for-querying-PacRunner-d-mon.patch
Patch1: libproxy-0.4.11-crash.patch
# Patch 2 and 3 are backported from upstream commuity
Patch2: libproxy-0.4.15-python3738.patch
Patch3: libproxy-0.4.15-mozjs52.patch
Patch4: Fix-buffer-overflow-when-PAC-is-enabled.patch
Patch5: libproxy-0.4.15-mozjs60.patch
Patch6: libproxy-0.4.15-mozjs68.patch
Patch7: libproxy-0.4.15-mozjs-use-after-free.patch
Patch8: libproxy-0.4.15-fix-CVE-2020-25219.patch
BuildRequires: cmake >= 2.6.0 gcc-c++
BuildRequires: pkgconfig(gio-2.0) >= 2.26 pkgconfig(mozjs-68) pkgconfig(libnm) python2-devel python3-devel
BuildRequires: pkgconfig(dbus-1) pkgconfig(javascriptcoregtk-4.0)
BuildRequires: pkgconfig(gio-2.0) >= 2.26 pkgconfig(libnm) python3-devel
BuildRequires: pkgconfig(dbus-1) pkgconfig(duktape)
Provides: %{name}-bin %{name}-gnome %{name}-kde %{name}-mozjs %{name}-networkmanager %{name}-pacrunner
Provides: %{name}-bin %{name}-gnome %{name}-kde %{name}-networkmanager %{name}-pacrunner
Obsoletes: %{name}-bin %{name}-gnome %{name}-kde %{name}-mozjs %{name}-networkmanager %{name}-pacrunner
%description
@ -37,15 +25,6 @@ libproxy offers the following features:
* dynamic adjustment to changing network topology.
* a standard way of dealing with proxy settings across all scenarios.
%package -n python2-%{name}
Summary: Binding for %{name} and python2
Requires: %{name} = %{version}-%{release}
BuildArch: noarch
%{?python_provide:%python_provide python2-%{name}}
%description -n python2-%{name}
The python2 binding for libproxy.
%package -n python3-%{name}
Summary: Binding for %{name} and python3
Requires: %{name} = %{version}-%{release}
@ -55,13 +34,13 @@ BuildArch: noarch
%description -n python3-%{name}
The python3 binding for libproxy.
%package webkitgtk4
Summary: plugin for webkit2gtk3
%package duktape
Summary: plugin for duktape
Requires: %{name} = %{version}-%{release}
Provides: %{name}-pac = %{version}-%{release}
%description webkitgtk4
plugin for webkit2gtk3.
%description duktape
plugin for duktape.
%package devel
Summary: Libproxy provides consistent proxy configuration to applications - Development Files
@ -78,8 +57,9 @@ This package contains libraries and header files for developing applications.
%build
%{cmake} \
-DMODULE_INSTALL_DIR=%{_libdir}/%{name}/%{version}/modules \
-DWITH_PERL=OFF -DWITH_GNOME3=ON -DWITH_PYTHON2=ON -DPYTHON2_EXECUTABLE=%{__python2} \
-DWITH_PYTHON3=ON -DWITH_WEBKIT3=ON -DWITH_MOZJS=ON .
-DBIPR=OFF \
-DWITH_PERL=OFF -DWITH_GNOME3=ON \
-DWITH_PYTHON3=ON -DWITH_WEBKIT3=OFF -DWITH_DUKTAPE=ON -DWITH_MOZJS=OFF .
%make_build
%install
@ -101,20 +81,16 @@ make test
%{_bindir}/proxy
%{_libdir}/%{name}/%{version}/modules/*
%{_libexecdir}/pxgsettings
%exclude %{_libdir}/%{name}/%{version}/modules/pacrunner_webkit.so
%files -n python2-%{name}
%defattr(-,root,root)
%{python2_sitelib}/%{name}.*
%exclude %{_libdir}/%{name}/%{version}/modules/pacrunner_duktape.so
%files -n python3-%{name}
%defattr(-,root,root)
%{python3_sitelib}/__pycache__/*
%{python3_sitelib}/%{name}.*
%files webkitgtk4
%files duktape
%defattr(-,root,root)
%{_libdir}/%{name}/%{version}/modules/pacrunner_webkit.so
%{_libdir}/%{name}/%{version}/modules/pacrunner_duktape.so
%files devel
%defattr(-,root,root)
@ -128,16 +104,40 @@ make test
%{_mandir}/man1/proxy.1*
%changelog
* Thu Oct 29 liuxin <liuxin264@huawei.com> - 0.4.15-17
* Thu Nov 03 2022 zhouyihang <zhouyihang3@h-partners.com> - 0.4.18-1
- Type:requirements
- Id:NA
- SUG:NA
- DESC:update libproxy to 0.4.18
* Thu Jan 28 2021 xihaochen <xihaochen@huawei.com> - 0.4.17-1
- Type:requirements
- Id:NA
- SUG:NA
- DESC:update libproxy to 0.4.17
* Wed Dec 02 2020 xihaochen <xihaochen@huawei.com> - 0.4.15-19
- Type:requirements
- Id:NA
- SUG:NA
- DESC:delete mozjs-68 dependency
* Fri Oct 30 2020 xihaochen <xihaochen@huawei.com> - 0.4.15-18
- Type:requirements
- Id:NA
- SUG:NA
- DESC:delete python2 dependency
* Thu Oct 29 2020 liuxin <liuxin264@huawei.com> - 0.4.15-17
- Type:cves
- Id:NA
- SUG:NA
- DESC:Disable mozjs backend by default and fix CVE-2020-25219
* Tue Oct 27 orange-snn <songnannan2@huawei.com> - 0.4.15-16
* Tue Oct 27 2020 orange-snn <songnannan2@huawei.com> - 0.4.15-16
- change the mozjs52 to mozjs68 in buildRequires
* Tue Oct 20 hanzhijun <hanzhijun1@huawei.com> - 0.4.15-15
* Tue Oct 20 2020 hanzhijun <hanzhijun1@huawei.com> - 0.4.15-15
- Type:cves
- Id:NA
- SUG:NA