summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorflywind <xzsflywind@gmail.com>2021-03-30 02:48:06 +0800
committerGitHub <noreply@github.com>2021-03-29 11:48:06 -0700
commit1f1ef85eb0980f2e1077638a502c0754c3e2b80d (patch)
tree08405a26a0ae31aa7c8f1970ac7c0f8d60ce3860
parent861c42c258ee81ff20630fdaa49813de5311881d (diff)
downloadNim-1f1ef85eb0980f2e1077638a502c0754c3e2b80d.tar.gz
[std/uri]fix #17481 (#17568)
-rw-r--r--lib/pure/uri.nim2
-rw-r--r--tests/stdlib/turi.nim11
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/pure/uri.nim b/lib/pure/uri.nim
index 920529ecf..4ac04d02e 100644
--- a/lib/pure/uri.nim
+++ b/lib/pure/uri.nim
@@ -294,7 +294,7 @@ func parseUri*(uri: string, result: var Uri) =
   var i = 0
 
   # Check if this is a reference URI (relative URI)
-  let doubleSlash = uri.len > 1 and uri[1] == '/'
+  let doubleSlash = uri.len > 1 and uri[0] == '/' and uri[1] == '/'
   if i < uri.len and uri[i] == '/':
     # Make sure `uri` doesn't begin with '//'.
     if not doubleSlash:
diff --git a/tests/stdlib/turi.nim b/tests/stdlib/turi.nim
index 1a6f37520..d1a30bbfc 100644
--- a/tests/stdlib/turi.nim
+++ b/tests/stdlib/turi.nim
@@ -283,5 +283,16 @@ template main() =
     doAssert toSeq(decodeQuery("a=1&b=0")) == @[("a", "1"), ("b", "0")]
     doAssert toSeq(decodeQuery("a=1&b=2c=6")) == @[("a", "1"), ("b", "2c=6")]
 
+  block: # bug #17481
+    let u1 = parseUri("./")
+    let u2 = parseUri("./path")
+    let u3 = parseUri("a/path")
+    doAssert u1.scheme.len == 0
+    doAssert u1.path == "./"
+    doAssert u2.scheme.len == 0
+    doAssert u2.path == "./path"
+    doAssert u3.scheme.len == 0
+    doAssert u3.path == "a/path"
+
 static: main()
 main()