fix adding empty sequence to HTTP headers (#15783)
* fix adding empty sequence to HTTP headers * add tests
This commit is contained in:
parent
8e1fa84b0d
commit
c4cc907433
2 changed files with 34 additions and 4 deletions
|
|
@ -166,9 +166,12 @@ proc `[]=`*(headers: HttpHeaders, key, value: string) =
|
||||||
|
|
||||||
proc `[]=`*(headers: HttpHeaders, key: string, value: seq[string]) =
|
proc `[]=`*(headers: HttpHeaders, key: string, value: seq[string]) =
|
||||||
## Sets the header entries associated with ``key`` to the specified list of
|
## Sets the header entries associated with ``key`` to the specified list of
|
||||||
## values.
|
## values. Replaces any existing values. If ``value`` is empty,
|
||||||
## Replaces any existing values.
|
## deletes the header entries associated with ``key``.
|
||||||
headers.table[headers.toCaseInsensitive(key)] = value
|
if value.len > 0:
|
||||||
|
headers.table[headers.toCaseInsensitive(key)] = value
|
||||||
|
else:
|
||||||
|
headers.table.del(headers.toCaseInsensitive(key))
|
||||||
|
|
||||||
proc add*(headers: HttpHeaders, key, value: string) =
|
proc add*(headers: HttpHeaders, key, value: string) =
|
||||||
## Adds the specified value to the specified key. Appends to any existing
|
## Adds the specified value to the specified key. Appends to any existing
|
||||||
|
|
@ -179,7 +182,7 @@ proc add*(headers: HttpHeaders, key, value: string) =
|
||||||
headers.table[headers.toCaseInsensitive(key)].add(value)
|
headers.table[headers.toCaseInsensitive(key)].add(value)
|
||||||
|
|
||||||
proc del*(headers: HttpHeaders, key: string) =
|
proc del*(headers: HttpHeaders, key: string) =
|
||||||
## Delete the header entries associated with ``key``
|
## Deletes the header entries associated with ``key``
|
||||||
headers.table.del(headers.toCaseInsensitive(key))
|
headers.table.del(headers.toCaseInsensitive(key))
|
||||||
|
|
||||||
iterator pairs*(headers: HttpHeaders): tuple[key, value: string] =
|
iterator pairs*(headers: HttpHeaders): tuple[key, value: string] =
|
||||||
|
|
|
||||||
|
|
@ -51,3 +51,30 @@ suite "httpcore":
|
||||||
doAssert parseHeader("Accept: foo, bar") == (key: "Accept", value: @["foo", "bar"])
|
doAssert parseHeader("Accept: foo, bar") == (key: "Accept", value: @["foo", "bar"])
|
||||||
doAssert parseHeader("Accept: foo, bar, prologue") == (key: "Accept", value: @["foo", "bar", "prologue"])
|
doAssert parseHeader("Accept: foo, bar, prologue") == (key: "Accept", value: @["foo", "bar", "prologue"])
|
||||||
doAssert parseHeader("Accept: foo, bar, prologue, starlight") == (key: "Accept", value: @["foo", "bar", "prologue", "starlight"])
|
doAssert parseHeader("Accept: foo, bar, prologue, starlight") == (key: "Accept", value: @["foo", "bar", "prologue", "starlight"])
|
||||||
|
|
||||||
|
test "add empty sequence to HTTP headers":
|
||||||
|
block:
|
||||||
|
var headers = newHttpHeaders()
|
||||||
|
headers["empty"] = @[]
|
||||||
|
|
||||||
|
doAssert not headers.hasKey("empty")
|
||||||
|
|
||||||
|
block:
|
||||||
|
var headers = newHttpHeaders()
|
||||||
|
headers["existing"] = "true"
|
||||||
|
headers["existing"] = @[]
|
||||||
|
|
||||||
|
doAssert not headers.hasKey("existing")
|
||||||
|
|
||||||
|
block:
|
||||||
|
var headers = newHttpHeaders()
|
||||||
|
headers["existing"] = @["true"]
|
||||||
|
headers["existing"] = @[]
|
||||||
|
|
||||||
|
doAssert not headers.hasKey("existing")
|
||||||
|
|
||||||
|
block:
|
||||||
|
var headers = newHttpHeaders()
|
||||||
|
headers["existing"] = @[]
|
||||||
|
headers["existing"] = @["true"]
|
||||||
|
doAssert headers.hasKey("existing")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue