summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-libs/libuv/files/01-libuv-0.11.25-tests.patch')
-rw-r--r--dev-libs/libuv/files/01-libuv-0.11.25-tests.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/dev-libs/libuv/files/01-libuv-0.11.25-tests.patch b/dev-libs/libuv/files/01-libuv-0.11.25-tests.patch
new file mode 100644
index 000000000000..12eabc213f57
--- /dev/null
+++ b/dev-libs/libuv/files/01-libuv-0.11.25-tests.patch
@@ -0,0 +1,84 @@
+From f58b02f2cf068e1bed10bf9f632bad396d907de9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= <saghul@gmail.com>
+Date: Fri, 23 May 2014 09:25:23 +0200
+Subject: [PATCH] unix, windows: fix parsing scoped IPv6 addresses
+
+---
+ src/inet.c | 37 +++++++++++++++++++++----------------
+ 1 file changed, 21 insertions(+), 16 deletions(-)
+
+diff --git a/src/inet.c b/src/inet.c
+index 0eb9438..36457f4 100644
+--- a/src/inet.c
++++ b/src/inet.c
+@@ -17,6 +17,7 @@
+
+ #include <stdio.h>
+ #include <string.h>
++#include <stdlib.h>
+
+ #if defined(_MSC_VER) && _MSC_VER < 1600
+ # include "stdint-msvc2008.h"
+@@ -159,11 +160,27 @@ static int inet_ntop6(const unsigned char *src, char *dst, size_t size) {
+
+
+ int uv_inet_pton(int af, const char* src, void* dst) {
++ if (src == NULL || dst == NULL)
++ return UV_EINVAL;
++
+ switch (af) {
+ case AF_INET:
+ return (inet_pton4(src, dst));
+- case AF_INET6:
+- return (inet_pton6(src, dst));
++ case AF_INET6: {
++ int len;
++ char tmp[UV__INET6_ADDRSTRLEN], *s, *p;
++ s = (char*) src;
++ p = strchr(src, '%');
++ if (p != NULL) {
++ s = tmp;
++ len = p - src;
++ if (len > UV__INET6_ADDRSTRLEN-1)
++ len = UV__INET6_ADDRSTRLEN-1;
++ memcpy(s, src, len);
++ s[len] = '\0';
++ }
++ return inet_pton6(s, dst);
++ }
+ default:
+ return UV_EAFNOSUPPORT;
+ }
+@@ -228,7 +245,7 @@ static int inet_pton6(const char *src, unsigned char *dst) {
+ curtok = src;
+ seen_xdigits = 0;
+ val = 0;
+- while ((ch = *src++) != '\0' && ch != '%') {
++ while ((ch = *src++) != '\0') {
+ const char *pch;
+
+ if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
+@@ -259,19 +276,7 @@ static int inet_pton6(const char *src, unsigned char *dst) {
+ continue;
+ }
+ if (ch == '.' && ((tp + sizeof(struct in_addr)) <= endp)) {
+- int err;
+-
+- /* Scope id present, parse ipv4 addr without it */
+- pch = strchr(curtok, '%');
+- if (pch != NULL) {
+- char tmp[sizeof "255.255.255.255"];
+-
+- memcpy(tmp, curtok, pch - curtok);
+- curtok = tmp;
+- src = pch;
+- }
+-
+- err = inet_pton4(curtok, tp);
++ int err = inet_pton4(curtok, tp);
+ if (err == 0) {
+ tp += sizeof(struct in_addr);
+ seen_xdigits = 0;
+--
+1.9.3
+