aboutsummaryrefslogtreecommitdiff
path: root/libphobos/src
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2020-05-17 18:49:19 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2020-05-17 18:49:19 +0200
commite977a5df5bae2bce6e3e95456f5da0dbfdd02934 (patch)
tree7987b9c20f00ff87cf7e86b9493014b39462cdd5 /libphobos/src
parentcc558e28014f0d85247398c89e7cf75d92df1bd3 (diff)
downloadgcc-e977a5df5bae2bce6e3e95456f5da0dbfdd02934.zip
gcc-e977a5df5bae2bce6e3e95456f5da0dbfdd02934.tar.gz
gcc-e977a5df5bae2bce6e3e95456f5da0dbfdd02934.tar.bz2
libphobos: Merge upstream druntime 5cc061a8, phobos 64ed4684f
- core.cpuid has been fixed to not use i7 detection on AMD processors. - std.net.curl has been fixed to correctly handle HTTP/2 status lines. - std.zip has had a test fixed to not rely on unzip being installed. Fixes: PR d/95166 PR d/95167 PR d/95168 Reviewed-on: https://github.com/dlang/druntime/pull/3107 https://github.com/dlang/phobos/pull/7486
Diffstat (limited to 'libphobos/src')
-rw-r--r--libphobos/src/MERGE2
-rw-r--r--libphobos/src/std/net/curl.d44
-rw-r--r--libphobos/src/std/zip.d6
3 files changed, 39 insertions, 13 deletions
diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE
index 6025cdc..5900ca7 100644
--- a/libphobos/src/MERGE
+++ b/libphobos/src/MERGE
@@ -1,4 +1,4 @@
-bf0d0a37c4c2d8762ceff7d8677e7584b770800f
+64ed4684fa2a0f2401f5b6df34f6dcb4c3973945
The first line of this file holds the git revision number of the last
merge done from the dlang/phobos repository.
diff --git a/libphobos/src/std/net/curl.d b/libphobos/src/std/net/curl.d
index 32ba45c..445f996 100644
--- a/libphobos/src/std/net/curl.d
+++ b/libphobos/src/std/net/curl.d
@@ -2451,7 +2451,6 @@ struct HTTP
in char[] value) callback)
{
import std.algorithm.searching : startsWith;
- import std.conv : to;
import std.regex : regex, match;
import std.uni : toLower;
@@ -2471,18 +2470,8 @@ struct HTTP
if (header.startsWith("HTTP/"))
{
headersIn.clear();
-
- const m = match(header, regex(r"^HTTP/(\d+)\.(\d+) (\d+) (.*)$"));
- if (m.empty)
+ if (parseStatusLine(header, status))
{
- // Invalid status line
- }
- else
- {
- status.majorVersion = to!ushort(m.captures[1]);
- status.minorVersion = to!ushort(m.captures[2]);
- status.code = to!ushort(m.captures[3]);
- status.reason = m.captures[4].idup;
if (onReceiveStatusLine != null)
onReceiveStatusLine(status);
}
@@ -2517,6 +2506,37 @@ struct HTTP
private RefCounted!Impl p;
+ /// Parse status line, as received from / generated by cURL.
+ private static bool parseStatusLine(in char[] header, out StatusLine status) @safe
+ {
+ import std.conv : to;
+ import std.regex : regex, match;
+
+ const m = match(header, regex(r"^HTTP/(\d+)(?:\.(\d+))? (\d+)(?: (.*))?$"));
+ if (m.empty)
+ return false; // Invalid status line
+ else
+ {
+ status.majorVersion = to!ushort(m.captures[1]);
+ status.minorVersion = m.captures[2].length ? to!ushort(m.captures[2]) : 0;
+ status.code = to!ushort(m.captures[3]);
+ status.reason = m.captures[4].idup;
+ return true;
+ }
+ }
+
+ @safe unittest
+ {
+ StatusLine status;
+ assert(parseStatusLine("HTTP/1.1 200 OK", status)
+ && status == StatusLine(1, 1, 200, "OK"));
+ assert(parseStatusLine("HTTP/1.0 304 Not Modified", status)
+ && status == StatusLine(1, 0, 304, "Not Modified"));
+ // The HTTP2 protocol is binary; cURL generates this fake text header.
+ assert(parseStatusLine("HTTP/2 200", status)
+ && status == StatusLine(2, 0, 200, null));
+ }
+
/** Time condition enumeration as an alias of $(REF CurlTimeCond, etc,c,curl)
$(HTTP www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25, _RFC2616 Section 14.25)
diff --git a/libphobos/src/std/zip.d b/libphobos/src/std/zip.d
index db47dde..8b130ea 100644
--- a/libphobos/src/std/zip.d
+++ b/libphobos/src/std/zip.d
@@ -970,6 +970,12 @@ version (Posix) @system unittest
{
import std.datetime, std.file, std.format, std.path, std.process, std.stdio;
+ if (executeShell("unzip").status != 0)
+ {
+ writeln("Can't run unzip, skipping unzip test");
+ return;
+ }
+
auto zr = new ZipArchive();
auto am = new ArchiveMember();
am.compressionMethod = CompressionMethod.deflate;