diff options
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.patch | 84 |
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 + |