Skip to content

Commit

Permalink
Percent-encode $ in URLEncodedFormEncoder
Browse files Browse the repository at this point in the history
  • Loading branch information
ptoffy committed May 13, 2024
1 parent d9fa0d3 commit 9c677c2
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 107 deletions.
22 changes: 11 additions & 11 deletions Sources/Vapor/URLEncodedForm/URLEncodedFormSerializer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import struct Foundation.CharacterSet
struct URLEncodedFormSerializer: Sendable {
let splitVariablesOn: Character
let splitKeyValueOn: Character

/// Create a new form-urlencoded data parser.
init(splitVariablesOn: Character = "&", splitKeyValueOn: Character = "=") {
self.splitVariablesOn = splitVariablesOn
self.splitKeyValueOn = splitKeyValueOn
}

func serialize(_ data: URLEncodedFormData, codingPath: [CodingKey] = []) throws -> String {
var entries: [String] = []
let key = try codingPath.toURLEncodedKey()
Expand All @@ -21,20 +21,20 @@ struct URLEncodedFormSerializer: Sendable {
}
}
for (key, child) in data.children {
entries.append(try serialize(child, codingPath: codingPath + [_CodingKey(stringValue: key) as CodingKey]))
try entries.append(serialize(child, codingPath: codingPath + [_CodingKey(stringValue: key) as CodingKey]))
}
return entries.joined(separator: String(splitVariablesOn))
}

struct _CodingKey: CodingKey {
var stringValue: String

init(stringValue: String) {
self.stringValue = stringValue
}

var intValue: Int?

init?(intValue: Int) {
self.intValue = intValue
self.stringValue = intValue.description
Expand All @@ -47,9 +47,9 @@ extension Array where Element == CodingKey {
if count < 1 {
return ""
}
return try self[0].stringValue.urlEncoded(codingPath: self) + self[1...].map({ (key: CodingKey) -> String in
return try "[" + key.stringValue.urlEncoded(codingPath: self) + "]"
}).joined()
return try self[0].stringValue.urlEncoded(codingPath: self) + self[1...].map { (key: CodingKey) -> String in
try "[" + key.stringValue.urlEncoded(codingPath: self) + "]"
}.joined()
}
}

Expand All @@ -75,7 +75,7 @@ private enum Characters {
static let allowedCharacters: CharacterSet = {
var allowed = CharacterSet.urlQueryAllowed
// these symbols are reserved for url-encoded form
allowed.remove(charactersIn: "?&=[];+")
allowed.remove(charactersIn: "?&=[];+$")
return allowed
}()
}

0 comments on commit 9c677c2

Please sign in to comment.