Generated-output differences

quicktype output changed between the PR base and tested PR merge revisions.
← Back to the pull request
314test cases
374files differ
374modified
0new
0deleted
4,488changed lines
+4,488 −0insertions / deletions
Base 3c3d4d66f2f8fdfbd0268dd98e059c4d1b0b170e · PR merge 480929529c2046cc304f8b30903297920c6e9088 · Head 236035089db524c0c5289fc94b197642975991aa · raw patch
Test case

test/inputs/graphql/github1.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -191,11 +191,23 @@ extension Error {
191191
192192 // MARK: - Helper functions for creating encoders and decoders
193193
194+private func isValidDate(_ value: String) -> Bool {
195+ let formatter = DateFormatter()
196+ formatter.locale = Locale(identifier: "en_US_POSIX")
197+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
198+ formatter.dateFormat = "u-MM-dd"
199+ formatter.isLenient = false
200+ return formatter.date(from: String(value.prefix(10))) != nil
201+}
202+
194203 func newJSONDecoder() -> JSONDecoder {
195204 let decoder = JSONDecoder()
196205 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
197206 let container = try decoder.singleValueContainer()
198207 let dateStr = try container.decode(String.self).uppercased()
208+ guard isValidDate(dateStr) else {
209+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
210+ }
199211
200212 let formatter = DateFormatter()
201213 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github2.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -283,11 +283,23 @@ extension Error {
283283
284284 // MARK: - Helper functions for creating encoders and decoders
285285
286+private func isValidDate(_ value: String) -> Bool {
287+ let formatter = DateFormatter()
288+ formatter.locale = Locale(identifier: "en_US_POSIX")
289+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
290+ formatter.dateFormat = "u-MM-dd"
291+ formatter.isLenient = false
292+ return formatter.date(from: String(value.prefix(10))) != nil
293+}
294+
286295 func newJSONDecoder() -> JSONDecoder {
287296 let decoder = JSONDecoder()
288297 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
289298 let container = try decoder.singleValueContainer()
290299 let dateStr = try container.decode(String.self).uppercased()
300+ guard isValidDate(dateStr) else {
301+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
302+ }
291303
292304 let formatter = DateFormatter()
293305 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github3.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -329,11 +329,23 @@ extension Error {
329329
330330 // MARK: - Helper functions for creating encoders and decoders
331331
332+private func isValidDate(_ value: String) -> Bool {
333+ let formatter = DateFormatter()
334+ formatter.locale = Locale(identifier: "en_US_POSIX")
335+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
336+ formatter.dateFormat = "u-MM-dd"
337+ formatter.isLenient = false
338+ return formatter.date(from: String(value.prefix(10))) != nil
339+}
340+
332341 func newJSONDecoder() -> JSONDecoder {
333342 let decoder = JSONDecoder()
334343 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
335344 let container = try decoder.singleValueContainer()
336345 let dateStr = try container.decode(String.self).uppercased()
346+ guard isValidDate(dateStr) else {
347+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
348+ }
337349
338350 let formatter = DateFormatter()
339351 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github4.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -333,11 +333,23 @@ extension Error {
333333
334334 // MARK: - Helper functions for creating encoders and decoders
335335
336+private func isValidDate(_ value: String) -> Bool {
337+ let formatter = DateFormatter()
338+ formatter.locale = Locale(identifier: "en_US_POSIX")
339+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
340+ formatter.dateFormat = "u-MM-dd"
341+ formatter.isLenient = false
342+ return formatter.date(from: String(value.prefix(10))) != nil
343+}
344+
336345 func newJSONDecoder() -> JSONDecoder {
337346 let decoder = JSONDecoder()
338347 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
339348 let container = try decoder.singleValueContainer()
340349 let dateStr = try container.decode(String.self).uppercased()
350+ guard isValidDate(dateStr) else {
351+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
352+ }
341353
342354 let formatter = DateFormatter()
343355 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github5.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -191,11 +191,23 @@ extension Error {
191191
192192 // MARK: - Helper functions for creating encoders and decoders
193193
194+private func isValidDate(_ value: String) -> Bool {
195+ let formatter = DateFormatter()
196+ formatter.locale = Locale(identifier: "en_US_POSIX")
197+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
198+ formatter.dateFormat = "u-MM-dd"
199+ formatter.isLenient = false
200+ return formatter.date(from: String(value.prefix(10))) != nil
201+}
202+
194203 func newJSONDecoder() -> JSONDecoder {
195204 let decoder = JSONDecoder()
196205 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
197206 let container = try decoder.singleValueContainer()
198207 let dateStr = try container.decode(String.self).uppercased()
208+ guard isValidDate(dateStr) else {
209+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
210+ }
199211
200212 let formatter = DateFormatter()
201213 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github6.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -191,11 +191,23 @@ extension Error {
191191
192192 // MARK: - Helper functions for creating encoders and decoders
193193
194+private func isValidDate(_ value: String) -> Bool {
195+ let formatter = DateFormatter()
196+ formatter.locale = Locale(identifier: "en_US_POSIX")
197+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
198+ formatter.dateFormat = "u-MM-dd"
199+ formatter.isLenient = false
200+ return formatter.date(from: String(value.prefix(10))) != nil
201+}
202+
194203 func newJSONDecoder() -> JSONDecoder {
195204 let decoder = JSONDecoder()
196205 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
197206 let container = try decoder.singleValueContainer()
198207 let dateStr = try container.decode(String.self).uppercased()
208+ guard isValidDate(dateStr) else {
209+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
210+ }
199211
200212 let formatter = DateFormatter()
201213 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github7.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -387,11 +387,23 @@ extension Error {
387387
388388 // MARK: - Helper functions for creating encoders and decoders
389389
390+private func isValidDate(_ value: String) -> Bool {
391+ let formatter = DateFormatter()
392+ formatter.locale = Locale(identifier: "en_US_POSIX")
393+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
394+ formatter.dateFormat = "u-MM-dd"
395+ formatter.isLenient = false
396+ return formatter.date(from: String(value.prefix(10))) != nil
397+}
398+
390399 func newJSONDecoder() -> JSONDecoder {
391400 let decoder = JSONDecoder()
392401 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
393402 let container = try decoder.singleValueContainer()
394403 let dateStr = try container.decode(String.self).uppercased()
404+ guard isValidDate(dateStr) else {
405+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
406+ }
395407
396408 let formatter = DateFormatter()
397409 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github8.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -252,11 +252,23 @@ extension Error {
252252
253253 // MARK: - Helper functions for creating encoders and decoders
254254
255+private func isValidDate(_ value: String) -> Bool {
256+ let formatter = DateFormatter()
257+ formatter.locale = Locale(identifier: "en_US_POSIX")
258+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
259+ formatter.dateFormat = "u-MM-dd"
260+ formatter.isLenient = false
261+ return formatter.date(from: String(value.prefix(10))) != nil
262+}
263+
255264 func newJSONDecoder() -> JSONDecoder {
256265 let decoder = JSONDecoder()
257266 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
258267 let container = try decoder.singleValueContainer()
259268 let dateStr = try container.decode(String.self).uppercased()
269+ guard isValidDate(dateStr) else {
270+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
271+ }
260272
261273 let formatter = DateFormatter()
262274 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/graphql/github9.graphql

1 generated file · +12 −0
Mgraphql-swiftdefault / quicktype.swift+12 −0
@@ -296,11 +296,23 @@ extension Error {
296296
297297 // MARK: - Helper functions for creating encoders and decoders
298298
299+private func isValidDate(_ value: String) -> Bool {
300+ let formatter = DateFormatter()
301+ formatter.locale = Locale(identifier: "en_US_POSIX")
302+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
303+ formatter.dateFormat = "u-MM-dd"
304+ formatter.isLenient = false
305+ return formatter.date(from: String(value.prefix(10))) != nil
306+}
307+
299308 func newJSONDecoder() -> JSONDecoder {
300309 let decoder = JSONDecoder()
301310 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
302311 let container = try decoder.singleValueContainer()
303312 let dateStr = try container.decode(String.self).uppercased()
313+ guard isValidDate(dateStr) else {
314+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
315+ }
304316
305317 let formatter = DateFormatter()
306318 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/00c36.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -236,11 +236,23 @@ extension Array where Element == TopLevel.Element {
236236
237237 // MARK: - Helper functions for creating encoders and decoders
238238
239+private func isValidDate(_ value: String) -> Bool {
240+ let formatter = DateFormatter()
241+ formatter.locale = Locale(identifier: "en_US_POSIX")
242+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
243+ formatter.dateFormat = "u-MM-dd"
244+ formatter.isLenient = false
245+ return formatter.date(from: String(value.prefix(10))) != nil
246+}
247+
239248 func newJSONDecoder() -> JSONDecoder {
240249 let decoder = JSONDecoder()
241250 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242251 let container = try decoder.singleValueContainer()
243252 let dateStr = try container.decode(String.self).uppercased()
253+ guard isValidDate(dateStr) else {
254+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
255+ }
244256
245257 let formatter = DateFormatter()
246258 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/00ec5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -619,11 +619,23 @@ extension Schema {
619619
620620 // MARK: - Helper functions for creating encoders and decoders
621621
622+private func isValidDate(_ value: String) -> Bool {
623+ let formatter = DateFormatter()
624+ formatter.locale = Locale(identifier: "en_US_POSIX")
625+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
626+ formatter.dateFormat = "u-MM-dd"
627+ formatter.isLenient = false
628+ return formatter.date(from: String(value.prefix(10))) != nil
629+}
630+
622631 func newJSONDecoder() -> JSONDecoder {
623632 let decoder = JSONDecoder()
624633 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
625634 let container = try decoder.singleValueContainer()
626635 let dateStr = try container.decode(String.self).uppercased()
636+ guard isValidDate(dateStr) else {
637+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
638+ }
627639
628640 let formatter = DateFormatter()
629641 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/010b1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Array where Element == TopLevel.Element {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/016af.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/033b1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/050b0.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -333,11 +333,23 @@ extension Array where Element == TopLevel.Element {
333333
334334 // MARK: - Helper functions for creating encoders and decoders
335335
336+private func isValidDate(_ value: String) -> Bool {
337+ let formatter = DateFormatter()
338+ formatter.locale = Locale(identifier: "en_US_POSIX")
339+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
340+ formatter.dateFormat = "u-MM-dd"
341+ formatter.isLenient = false
342+ return formatter.date(from: String(value.prefix(10))) != nil
343+}
344+
336345 func newJSONDecoder() -> JSONDecoder {
337346 let decoder = JSONDecoder()
338347 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
339348 let container = try decoder.singleValueContainer()
340349 let dateStr = try container.decode(String.self).uppercased()
350+ guard isValidDate(dateStr) else {
351+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
352+ }
341353
342354 let formatter = DateFormatter()
343355 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/06bee.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -278,11 +278,23 @@ extension Array where Element == TopLevel.Element {
278278
279279 // MARK: - Helper functions for creating encoders and decoders
280280
281+private func isValidDate(_ value: String) -> Bool {
282+ let formatter = DateFormatter()
283+ formatter.locale = Locale(identifier: "en_US_POSIX")
284+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
285+ formatter.dateFormat = "u-MM-dd"
286+ formatter.isLenient = false
287+ return formatter.date(from: String(value.prefix(10))) != nil
288+}
289+
281290 func newJSONDecoder() -> JSONDecoder {
282291 let decoder = JSONDecoder()
283292 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
284293 let container = try decoder.singleValueContainer()
285294 let dateStr = try container.decode(String.self).uppercased()
295+ guard isValidDate(dateStr) else {
296+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
297+ }
286298
287299 let formatter = DateFormatter()
288300 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/07540.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -94,11 +94,23 @@ extension Cookies {
9494
9595 // MARK: - Helper functions for creating encoders and decoders
9696
97+private func isValidDate(_ value: String) -> Bool {
98+ let formatter = DateFormatter()
99+ formatter.locale = Locale(identifier: "en_US_POSIX")
100+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
101+ formatter.dateFormat = "u-MM-dd"
102+ formatter.isLenient = false
103+ return formatter.date(from: String(value.prefix(10))) != nil
104+}
105+
97106 func newJSONDecoder() -> JSONDecoder {
98107 let decoder = JSONDecoder()
99108 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
100109 let container = try decoder.singleValueContainer()
101110 let dateStr = try container.decode(String.self).uppercased()
111+ guard isValidDate(dateStr) else {
112+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
113+ }
102114
103115 let formatter = DateFormatter()
104116 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0779f.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/07c75.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -254,11 +254,23 @@ extension Array where Element == TopLevel.Element {
254254
255255 // MARK: - Helper functions for creating encoders and decoders
256256
257+private func isValidDate(_ value: String) -> Bool {
258+ let formatter = DateFormatter()
259+ formatter.locale = Locale(identifier: "en_US_POSIX")
260+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
261+ formatter.dateFormat = "u-MM-dd"
262+ formatter.isLenient = false
263+ return formatter.date(from: String(value.prefix(10))) != nil
264+}
265+
257266 func newJSONDecoder() -> JSONDecoder {
258267 let decoder = JSONDecoder()
259268 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
260269 let container = try decoder.singleValueContainer()
261270 let dateStr = try container.decode(String.self).uppercased()
271+ guard isValidDate(dateStr) else {
272+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
273+ }
262274
263275 let formatter = DateFormatter()
264276 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/09f54.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -159,11 +159,23 @@ extension Description {
159159
160160 // MARK: - Helper functions for creating encoders and decoders
161161
162+private func isValidDate(_ value: String) -> Bool {
163+ let formatter = DateFormatter()
164+ formatter.locale = Locale(identifier: "en_US_POSIX")
165+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
166+ formatter.dateFormat = "u-MM-dd"
167+ formatter.isLenient = false
168+ return formatter.date(from: String(value.prefix(10))) != nil
169+}
170+
162171 func newJSONDecoder() -> JSONDecoder {
163172 let decoder = JSONDecoder()
164173 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165174 let container = try decoder.singleValueContainer()
166175 let dateStr = try container.decode(String.self).uppercased()
176+ guard isValidDate(dateStr) else {
177+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
178+ }
167179
168180 let formatter = DateFormatter()
169181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0a358.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -182,11 +182,23 @@ extension Result {
182182
183183 // MARK: - Helper functions for creating encoders and decoders
184184
185+private func isValidDate(_ value: String) -> Bool {
186+ let formatter = DateFormatter()
187+ formatter.locale = Locale(identifier: "en_US_POSIX")
188+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
189+ formatter.dateFormat = "u-MM-dd"
190+ formatter.isLenient = false
191+ return formatter.date(from: String(value.prefix(10))) != nil
192+}
193+
185194 func newJSONDecoder() -> JSONDecoder {
186195 let decoder = JSONDecoder()
187196 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
188197 let container = try decoder.singleValueContainer()
189198 let dateStr = try container.decode(String.self).uppercased()
199+ guard isValidDate(dateStr) else {
200+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
201+ }
190202
191203 let formatter = DateFormatter()
192204 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0a91a.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1238,11 +1238,23 @@ extension Array where Element == TopLevel.Element {
12381238
12391239 // MARK: - Helper functions for creating encoders and decoders
12401240
1241+private func isValidDate(_ value: String) -> Bool {
1242+ let formatter = DateFormatter()
1243+ formatter.locale = Locale(identifier: "en_US_POSIX")
1244+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1245+ formatter.dateFormat = "u-MM-dd"
1246+ formatter.isLenient = false
1247+ return formatter.date(from: String(value.prefix(10))) != nil
1248+}
1249+
12411250 func newJSONDecoder() -> JSONDecoder {
12421251 let decoder = JSONDecoder()
12431252 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
12441253 let container = try decoder.singleValueContainer()
12451254 let dateStr = try container.decode(String.self).uppercased()
1255+ guard isValidDate(dateStr) else {
1256+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1257+ }
12461258
12471259 let formatter = DateFormatter()
12481260 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0b91a.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -351,11 +351,23 @@ extension Component {
351351
352352 // MARK: - Helper functions for creating encoders and decoders
353353
354+private func isValidDate(_ value: String) -> Bool {
355+ let formatter = DateFormatter()
356+ formatter.locale = Locale(identifier: "en_US_POSIX")
357+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
358+ formatter.dateFormat = "u-MM-dd"
359+ formatter.isLenient = false
360+ return formatter.date(from: String(value.prefix(10))) != nil
361+}
362+
354363 func newJSONDecoder() -> JSONDecoder {
355364 let decoder = JSONDecoder()
356365 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
357366 let container = try decoder.singleValueContainer()
358367 let dateStr = try container.decode(String.self).uppercased()
368+ guard isValidDate(dateStr) else {
369+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
370+ }
359371
360372 let formatter = DateFormatter()
361373 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0cffa.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -727,11 +727,23 @@ extension Pagination {
727727
728728 // MARK: - Helper functions for creating encoders and decoders
729729
730+private func isValidDate(_ value: String) -> Bool {
731+ let formatter = DateFormatter()
732+ formatter.locale = Locale(identifier: "en_US_POSIX")
733+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
734+ formatter.dateFormat = "u-MM-dd"
735+ formatter.isLenient = false
736+ return formatter.date(from: String(value.prefix(10))) != nil
737+}
738+
730739 func newJSONDecoder() -> JSONDecoder {
731740 let decoder = JSONDecoder()
732741 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
733742 let container = try decoder.singleValueContainer()
734743 let dateStr = try container.decode(String.self).uppercased()
744+ guard isValidDate(dateStr) else {
745+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
746+ }
735747
736748 let formatter = DateFormatter()
737749 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0e0c2.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -522,11 +522,23 @@ extension VoteScore {
522522
523523 // MARK: - Helper functions for creating encoders and decoders
524524
525+private func isValidDate(_ value: String) -> Bool {
526+ let formatter = DateFormatter()
527+ formatter.locale = Locale(identifier: "en_US_POSIX")
528+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
529+ formatter.dateFormat = "u-MM-dd"
530+ formatter.isLenient = false
531+ return formatter.date(from: String(value.prefix(10))) != nil
532+}
533+
525534 func newJSONDecoder() -> JSONDecoder {
526535 let decoder = JSONDecoder()
527536 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
528537 let container = try decoder.singleValueContainer()
529538 let dateStr = try container.decode(String.self).uppercased()
539+ guard isValidDate(dateStr) else {
540+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
541+ }
530542
531543 let formatter = DateFormatter()
532544 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/0fecf.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/10be4.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -344,11 +344,23 @@ extension Array where Element == TopLevel.Element {
344344
345345 // MARK: - Helper functions for creating encoders and decoders
346346
347+private func isValidDate(_ value: String) -> Bool {
348+ let formatter = DateFormatter()
349+ formatter.locale = Locale(identifier: "en_US_POSIX")
350+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
351+ formatter.dateFormat = "u-MM-dd"
352+ formatter.isLenient = false
353+ return formatter.date(from: String(value.prefix(10))) != nil
354+}
355+
347356 func newJSONDecoder() -> JSONDecoder {
348357 let decoder = JSONDecoder()
349358 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
350359 let container = try decoder.singleValueContainer()
351360 let dateStr = try container.decode(String.self).uppercased()
361+ guard isValidDate(dateStr) else {
362+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
363+ }
352364
353365 let formatter = DateFormatter()
354366 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/112b5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -162,11 +162,23 @@ extension Headers {
162162
163163 // MARK: - Helper functions for creating encoders and decoders
164164
165+private func isValidDate(_ value: String) -> Bool {
166+ let formatter = DateFormatter()
167+ formatter.locale = Locale(identifier: "en_US_POSIX")
168+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
169+ formatter.dateFormat = "u-MM-dd"
170+ formatter.isLenient = false
171+ return formatter.date(from: String(value.prefix(10))) != nil
172+}
173+
165174 func newJSONDecoder() -> JSONDecoder {
166175 let decoder = JSONDecoder()
167176 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
168177 let container = try decoder.singleValueContainer()
169178 let dateStr = try container.decode(String.self).uppercased()
179+ guard isValidDate(dateStr) else {
180+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
181+ }
170182
171183 let formatter = DateFormatter()
172184 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/127a1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -726,11 +726,23 @@ extension Pagination {
726726
727727 // MARK: - Helper functions for creating encoders and decoders
728728
729+private func isValidDate(_ value: String) -> Bool {
730+ let formatter = DateFormatter()
731+ formatter.locale = Locale(identifier: "en_US_POSIX")
732+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
733+ formatter.dateFormat = "u-MM-dd"
734+ formatter.isLenient = false
735+ return formatter.date(from: String(value.prefix(10))) != nil
736+}
737+
729738 func newJSONDecoder() -> JSONDecoder {
730739 let decoder = JSONDecoder()
731740 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
732741 let container = try decoder.singleValueContainer()
733742 let dateStr = try container.decode(String.self).uppercased()
743+ guard isValidDate(dateStr) else {
744+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
745+ }
734746
735747 let formatter = DateFormatter()
736748 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/13d8d.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -258,11 +258,23 @@ extension Array where Element == TopLevel.Element {
258258
259259 // MARK: - Helper functions for creating encoders and decoders
260260
261+private func isValidDate(_ value: String) -> Bool {
262+ let formatter = DateFormatter()
263+ formatter.locale = Locale(identifier: "en_US_POSIX")
264+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
265+ formatter.dateFormat = "u-MM-dd"
266+ formatter.isLenient = false
267+ return formatter.date(from: String(value.prefix(10))) != nil
268+}
269+
261270 func newJSONDecoder() -> JSONDecoder {
262271 let decoder = JSONDecoder()
263272 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
264273 let container = try decoder.singleValueContainer()
265274 let dateStr = try container.decode(String.self).uppercased()
275+ guard isValidDate(dateStr) else {
276+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
277+ }
266278
267279 let formatter = DateFormatter()
268280 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/14d38.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -107,11 +107,23 @@ extension Headers {
107107
108108 // MARK: - Helper functions for creating encoders and decoders
109109
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
110119 func newJSONDecoder() -> JSONDecoder {
111120 let decoder = JSONDecoder()
112121 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113122 let container = try decoder.singleValueContainer()
114123 let dateStr = try container.decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
115127
116128 let formatter = DateFormatter()
117129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/167d6.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/16bc5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -807,11 +807,23 @@ extension Wind {
807807
808808 // MARK: - Helper functions for creating encoders and decoders
809809
810+private func isValidDate(_ value: String) -> Bool {
811+ let formatter = DateFormatter()
812+ formatter.locale = Locale(identifier: "en_US_POSIX")
813+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
814+ formatter.dateFormat = "u-MM-dd"
815+ formatter.isLenient = false
816+ return formatter.date(from: String(value.prefix(10))) != nil
817+}
818+
810819 func newJSONDecoder() -> JSONDecoder {
811820 let decoder = JSONDecoder()
812821 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813822 let container = try decoder.singleValueContainer()
814823 let dateStr = try container.decode(String.self).uppercased()
824+ guard isValidDate(dateStr) else {
825+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
826+ }
815827
816828 let formatter = DateFormatter()
817829 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/176f1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -263,11 +263,23 @@ extension Footnote {
263263
264264 // MARK: - Helper functions for creating encoders and decoders
265265
266+private func isValidDate(_ value: String) -> Bool {
267+ let formatter = DateFormatter()
268+ formatter.locale = Locale(identifier: "en_US_POSIX")
269+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
270+ formatter.dateFormat = "u-MM-dd"
271+ formatter.isLenient = false
272+ return formatter.date(from: String(value.prefix(10))) != nil
273+}
274+
266275 func newJSONDecoder() -> JSONDecoder {
267276 let decoder = JSONDecoder()
268277 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
269278 let container = try decoder.singleValueContainer()
270279 let dateStr = try container.decode(String.self).uppercased()
280+ guard isValidDate(dateStr) else {
281+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
282+ }
271283
272284 let formatter = DateFormatter()
273285 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/1a7f5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Array where Element == TopLevel.Element {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/1b28c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/1b409.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -441,11 +441,23 @@ enum Title: String, Codable {
441441
442442 // MARK: - Helper functions for creating encoders and decoders
443443
444+private func isValidDate(_ value: String) -> Bool {
445+ let formatter = DateFormatter()
446+ formatter.locale = Locale(identifier: "en_US_POSIX")
447+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
448+ formatter.dateFormat = "u-MM-dd"
449+ formatter.isLenient = false
450+ return formatter.date(from: String(value.prefix(10))) != nil
451+}
452+
444453 func newJSONDecoder() -> JSONDecoder {
445454 let decoder = JSONDecoder()
446455 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
447456 let container = try decoder.singleValueContainer()
448457 let dateStr = try container.decode(String.self).uppercased()
458+ guard isValidDate(dateStr) else {
459+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
460+ }
449461
450462 let formatter = DateFormatter()
451463 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/2465e.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -679,11 +679,23 @@ extension Schema {
679679
680680 // MARK: - Helper functions for creating encoders and decoders
681681
682+private func isValidDate(_ value: String) -> Bool {
683+ let formatter = DateFormatter()
684+ formatter.locale = Locale(identifier: "en_US_POSIX")
685+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
686+ formatter.dateFormat = "u-MM-dd"
687+ formatter.isLenient = false
688+ return formatter.date(from: String(value.prefix(10))) != nil
689+}
690+
682691 func newJSONDecoder() -> JSONDecoder {
683692 let decoder = JSONDecoder()
684693 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
685694 let container = try decoder.singleValueContainer()
686695 let dateStr = try container.decode(String.self).uppercased()
696+ guard isValidDate(dateStr) else {
697+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
698+ }
687699
688700 let formatter = DateFormatter()
689701 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/24f52.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/262f0.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -813,11 +813,23 @@ extension Wind {
813813
814814 // MARK: - Helper functions for creating encoders and decoders
815815
816+private func isValidDate(_ value: String) -> Bool {
817+ let formatter = DateFormatter()
818+ formatter.locale = Locale(identifier: "en_US_POSIX")
819+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
820+ formatter.dateFormat = "u-MM-dd"
821+ formatter.isLenient = false
822+ return formatter.date(from: String(value.prefix(10))) != nil
823+}
824+
816825 func newJSONDecoder() -> JSONDecoder {
817826 let decoder = JSONDecoder()
818827 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
819828 let container = try decoder.singleValueContainer()
820829 let dateStr = try container.decode(String.self).uppercased()
830+ guard isValidDate(dateStr) else {
831+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
832+ }
821833
822834 let formatter = DateFormatter()
823835 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/26b49.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -726,11 +726,23 @@ extension Pagination {
726726
727727 // MARK: - Helper functions for creating encoders and decoders
728728
729+private func isValidDate(_ value: String) -> Bool {
730+ let formatter = DateFormatter()
731+ formatter.locale = Locale(identifier: "en_US_POSIX")
732+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
733+ formatter.dateFormat = "u-MM-dd"
734+ formatter.isLenient = false
735+ return formatter.date(from: String(value.prefix(10))) != nil
736+}
737+
729738 func newJSONDecoder() -> JSONDecoder {
730739 let decoder = JSONDecoder()
731740 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
732741 let container = try decoder.singleValueContainer()
733742 let dateStr = try container.decode(String.self).uppercased()
743+ guard isValidDate(dateStr) else {
744+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
745+ }
734746
735747 let formatter = DateFormatter()
736748 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/26c9c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1470,11 +1470,23 @@ extension Expression {
14701470
14711471 // MARK: - Helper functions for creating encoders and decoders
14721472
1473+private func isValidDate(_ value: String) -> Bool {
1474+ let formatter = DateFormatter()
1475+ formatter.locale = Locale(identifier: "en_US_POSIX")
1476+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1477+ formatter.dateFormat = "u-MM-dd"
1478+ formatter.isLenient = false
1479+ return formatter.date(from: String(value.prefix(10))) != nil
1480+}
1481+
14731482 func newJSONDecoder() -> JSONDecoder {
14741483 let decoder = JSONDecoder()
14751484 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14761485 let container = try decoder.singleValueContainer()
14771486 let dateStr = try container.decode(String.self).uppercased()
1487+ guard isValidDate(dateStr) else {
1488+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1489+ }
14781490
14791491 let formatter = DateFormatter()
14801492 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/27332.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -878,11 +878,23 @@ enum Kind: String, Codable {
878878
879879 // MARK: - Helper functions for creating encoders and decoders
880880
881+private func isValidDate(_ value: String) -> Bool {
882+ let formatter = DateFormatter()
883+ formatter.locale = Locale(identifier: "en_US_POSIX")
884+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
885+ formatter.dateFormat = "u-MM-dd"
886+ formatter.isLenient = false
887+ return formatter.date(from: String(value.prefix(10))) != nil
888+}
889+
881890 func newJSONDecoder() -> JSONDecoder {
882891 let decoder = JSONDecoder()
883892 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
884893 let container = try decoder.singleValueContainer()
885894 let dateStr = try container.decode(String.self).uppercased()
895+ guard isValidDate(dateStr) else {
896+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
897+ }
886898
887899 let formatter = DateFormatter()
888900 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/29f47.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -812,11 +812,23 @@ enum Kind: String, Codable {
812812
813813 // MARK: - Helper functions for creating encoders and decoders
814814
815+private func isValidDate(_ value: String) -> Bool {
816+ let formatter = DateFormatter()
817+ formatter.locale = Locale(identifier: "en_US_POSIX")
818+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
819+ formatter.dateFormat = "u-MM-dd"
820+ formatter.isLenient = false
821+ return formatter.date(from: String(value.prefix(10))) != nil
822+}
823+
815824 func newJSONDecoder() -> JSONDecoder {
816825 let decoder = JSONDecoder()
817826 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
818827 let container = try decoder.singleValueContainer()
819828 let dateStr = try container.decode(String.self).uppercased()
829+ guard isValidDate(dateStr) else {
830+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
831+ }
820832
821833 let formatter = DateFormatter()
822834 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/2d4e2.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -467,11 +467,23 @@ enum Title: String, Codable {
467467
468468 // MARK: - Helper functions for creating encoders and decoders
469469
470+private func isValidDate(_ value: String) -> Bool {
471+ let formatter = DateFormatter()
472+ formatter.locale = Locale(identifier: "en_US_POSIX")
473+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
474+ formatter.dateFormat = "u-MM-dd"
475+ formatter.isLenient = false
476+ return formatter.date(from: String(value.prefix(10))) != nil
477+}
478+
470479 func newJSONDecoder() -> JSONDecoder {
471480 let decoder = JSONDecoder()
472481 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
473482 let container = try decoder.singleValueContainer()
474483 let dateStr = try container.decode(String.self).uppercased()
484+ guard isValidDate(dateStr) else {
485+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
486+ }
475487
476488 let formatter = DateFormatter()
477489 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/2df80.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -296,11 +296,23 @@ extension Array where Element == TopLevel.Element {
296296
297297 // MARK: - Helper functions for creating encoders and decoders
298298
299+private func isValidDate(_ value: String) -> Bool {
300+ let formatter = DateFormatter()
301+ formatter.locale = Locale(identifier: "en_US_POSIX")
302+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
303+ formatter.dateFormat = "u-MM-dd"
304+ formatter.isLenient = false
305+ return formatter.date(from: String(value.prefix(10))) != nil
306+}
307+
299308 func newJSONDecoder() -> JSONDecoder {
300309 let decoder = JSONDecoder()
301310 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
302311 let container = try decoder.singleValueContainer()
303312 let dateStr = try container.decode(String.self).uppercased()
313+ guard isValidDate(dateStr) else {
314+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
315+ }
304316
305317 let formatter = DateFormatter()
306318 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/31189.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -227,11 +227,23 @@ extension Rates {
227227
228228 // MARK: - Helper functions for creating encoders and decoders
229229
230+private func isValidDate(_ value: String) -> Bool {
231+ let formatter = DateFormatter()
232+ formatter.locale = Locale(identifier: "en_US_POSIX")
233+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
234+ formatter.dateFormat = "u-MM-dd"
235+ formatter.isLenient = false
236+ return formatter.date(from: String(value.prefix(10))) != nil
237+}
238+
230239 func newJSONDecoder() -> JSONDecoder {
231240 let decoder = JSONDecoder()
232241 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
233242 let container = try decoder.singleValueContainer()
234243 let dateStr = try container.decode(String.self).uppercased()
244+ guard isValidDate(dateStr) else {
245+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
246+ }
235247
236248 let formatter = DateFormatter()
237249 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/32431.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -398,11 +398,23 @@ extension Metadata {
398398
399399 // MARK: - Helper functions for creating encoders and decoders
400400
401+private func isValidDate(_ value: String) -> Bool {
402+ let formatter = DateFormatter()
403+ formatter.locale = Locale(identifier: "en_US_POSIX")
404+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
405+ formatter.dateFormat = "u-MM-dd"
406+ formatter.isLenient = false
407+ return formatter.date(from: String(value.prefix(10))) != nil
408+}
409+
401410 func newJSONDecoder() -> JSONDecoder {
402411 let decoder = JSONDecoder()
403412 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
404413 let container = try decoder.singleValueContainer()
405414 let dateStr = try container.decode(String.self).uppercased()
415+ guard isValidDate(dateStr) else {
416+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
417+ }
406418
407419 let formatter = DateFormatter()
408420 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/32d5c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -106,11 +106,23 @@ extension Array where Element == TopLevel.Element {
106106
107107 // MARK: - Helper functions for creating encoders and decoders
108108
109+private func isValidDate(_ value: String) -> Bool {
110+ let formatter = DateFormatter()
111+ formatter.locale = Locale(identifier: "en_US_POSIX")
112+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
113+ formatter.dateFormat = "u-MM-dd"
114+ formatter.isLenient = false
115+ return formatter.date(from: String(value.prefix(10))) != nil
116+}
117+
109118 func newJSONDecoder() -> JSONDecoder {
110119 let decoder = JSONDecoder()
111120 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
112121 let container = try decoder.singleValueContainer()
113122 let dateStr = try container.decode(String.self).uppercased()
123+ guard isValidDate(dateStr) else {
124+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
125+ }
114126
115127 let formatter = DateFormatter()
116128 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/337ed.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -374,11 +374,23 @@ enum ResultType: String, Codable {
374374
375375 // MARK: - Helper functions for creating encoders and decoders
376376
377+private func isValidDate(_ value: String) -> Bool {
378+ let formatter = DateFormatter()
379+ formatter.locale = Locale(identifier: "en_US_POSIX")
380+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
381+ formatter.dateFormat = "u-MM-dd"
382+ formatter.isLenient = false
383+ return formatter.date(from: String(value.prefix(10))) != nil
384+}
385+
377386 func newJSONDecoder() -> JSONDecoder {
378387 let decoder = JSONDecoder()
379388 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
380389 let container = try decoder.singleValueContainer()
381390 let dateStr = try container.decode(String.self).uppercased()
391+ guard isValidDate(dateStr) else {
392+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
393+ }
382394
383395 let formatter = DateFormatter()
384396 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/33d2e.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -302,11 +302,23 @@ enum Category: String, Codable {
302302
303303 // MARK: - Helper functions for creating encoders and decoders
304304
305+private func isValidDate(_ value: String) -> Bool {
306+ let formatter = DateFormatter()
307+ formatter.locale = Locale(identifier: "en_US_POSIX")
308+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
309+ formatter.dateFormat = "u-MM-dd"
310+ formatter.isLenient = false
311+ return formatter.date(from: String(value.prefix(10))) != nil
312+}
313+
305314 func newJSONDecoder() -> JSONDecoder {
306315 let decoder = JSONDecoder()
307316 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
308317 let container = try decoder.singleValueContainer()
309318 let dateStr = try container.decode(String.self).uppercased()
319+ guard isValidDate(dateStr) else {
320+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
321+ }
310322
311323 let formatter = DateFormatter()
312324 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/34702.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -414,11 +414,23 @@ enum FeatureType: String, Codable {
414414
415415 // MARK: - Helper functions for creating encoders and decoders
416416
417+private func isValidDate(_ value: String) -> Bool {
418+ let formatter = DateFormatter()
419+ formatter.locale = Locale(identifier: "en_US_POSIX")
420+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
421+ formatter.dateFormat = "u-MM-dd"
422+ formatter.isLenient = false
423+ return formatter.date(from: String(value.prefix(10))) != nil
424+}
425+
417426 func newJSONDecoder() -> JSONDecoder {
418427 let decoder = JSONDecoder()
419428 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
420429 let container = try decoder.singleValueContainer()
421430 let dateStr = try container.decode(String.self).uppercased()
431+ guard isValidDate(dateStr) else {
432+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
433+ }
422434
423435 let formatter = DateFormatter()
424436 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3536b.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -266,11 +266,23 @@ extension Array where Element == TopLevel.Element {
266266
267267 // MARK: - Helper functions for creating encoders and decoders
268268
269+private func isValidDate(_ value: String) -> Bool {
270+ let formatter = DateFormatter()
271+ formatter.locale = Locale(identifier: "en_US_POSIX")
272+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
273+ formatter.dateFormat = "u-MM-dd"
274+ formatter.isLenient = false
275+ return formatter.date(from: String(value.prefix(10))) != nil
276+}
277+
269278 func newJSONDecoder() -> JSONDecoder {
270279 let decoder = JSONDecoder()
271280 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
272281 let container = try decoder.singleValueContainer()
273282 let dateStr = try container.decode(String.self).uppercased()
283+ guard isValidDate(dateStr) else {
284+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
285+ }
274286
275287 let formatter = DateFormatter()
276288 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3659d.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/36d5d.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3a6b3.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3e9a3.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -263,11 +263,23 @@ extension Footnote {
263263
264264 // MARK: - Helper functions for creating encoders and decoders
265265
266+private func isValidDate(_ value: String) -> Bool {
267+ let formatter = DateFormatter()
268+ formatter.locale = Locale(identifier: "en_US_POSIX")
269+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
270+ formatter.dateFormat = "u-MM-dd"
271+ formatter.isLenient = false
272+ return formatter.date(from: String(value.prefix(10))) != nil
273+}
274+
266275 func newJSONDecoder() -> JSONDecoder {
267276 let decoder = JSONDecoder()
268277 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
269278 let container = try decoder.singleValueContainer()
270279 let dateStr = try container.decode(String.self).uppercased()
280+ guard isValidDate(dateStr) else {
281+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
282+ }
271283
272284 let formatter = DateFormatter()
273285 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/3f1ce.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -811,11 +811,23 @@ extension Wind {
811811
812812 // MARK: - Helper functions for creating encoders and decoders
813813
814+private func isValidDate(_ value: String) -> Bool {
815+ let formatter = DateFormatter()
816+ formatter.locale = Locale(identifier: "en_US_POSIX")
817+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
818+ formatter.dateFormat = "u-MM-dd"
819+ formatter.isLenient = false
820+ return formatter.date(from: String(value.prefix(10))) != nil
821+}
822+
814823 func newJSONDecoder() -> JSONDecoder {
815824 let decoder = JSONDecoder()
816825 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
817826 let container = try decoder.singleValueContainer()
818827 let dateStr = try container.decode(String.self).uppercased()
828+ guard isValidDate(dateStr) else {
829+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
830+ }
819831
820832 let formatter = DateFormatter()
821833 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/421d4.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -873,11 +873,23 @@ extension Owner {
873873
874874 // MARK: - Helper functions for creating encoders and decoders
875875
876+private func isValidDate(_ value: String) -> Bool {
877+ let formatter = DateFormatter()
878+ formatter.locale = Locale(identifier: "en_US_POSIX")
879+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
880+ formatter.dateFormat = "u-MM-dd"
881+ formatter.isLenient = false
882+ return formatter.date(from: String(value.prefix(10))) != nil
883+}
884+
876885 func newJSONDecoder() -> JSONDecoder {
877886 let decoder = JSONDecoder()
878887 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
879888 let container = try decoder.singleValueContainer()
880889 let dateStr = try container.decode(String.self).uppercased()
890+ guard isValidDate(dateStr) else {
891+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
892+ }
881893
882894 let formatter = DateFormatter()
883895 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/437e7.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -714,11 +714,23 @@ extension Pagination {
714714
715715 // MARK: - Helper functions for creating encoders and decoders
716716
717+private func isValidDate(_ value: String) -> Bool {
718+ let formatter = DateFormatter()
719+ formatter.locale = Locale(identifier: "en_US_POSIX")
720+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
721+ formatter.dateFormat = "u-MM-dd"
722+ formatter.isLenient = false
723+ return formatter.date(from: String(value.prefix(10))) != nil
724+}
725+
717726 func newJSONDecoder() -> JSONDecoder {
718727 let decoder = JSONDecoder()
719728 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
720729 let container = try decoder.singleValueContainer()
721730 let dateStr = try container.decode(String.self).uppercased()
731+ guard isValidDate(dateStr) else {
732+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
733+ }
722734
723735 let formatter = DateFormatter()
724736 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/43970.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -86,11 +86,23 @@ extension Array where Element == TopLevel.Element {
8686
8787 // MARK: - Helper functions for creating encoders and decoders
8888
89+private func isValidDate(_ value: String) -> Bool {
90+ let formatter = DateFormatter()
91+ formatter.locale = Locale(identifier: "en_US_POSIX")
92+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
93+ formatter.dateFormat = "u-MM-dd"
94+ formatter.isLenient = false
95+ return formatter.date(from: String(value.prefix(10))) != nil
96+}
97+
8998 func newJSONDecoder() -> JSONDecoder {
9099 let decoder = JSONDecoder()
91100 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
92101 let container = try decoder.singleValueContainer()
93102 let dateStr = try container.decode(String.self).uppercased()
103+ guard isValidDate(dateStr) else {
104+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
105+ }
94106
95107 let formatter = DateFormatter()
96108 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/43eaf.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/458db.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -351,11 +351,23 @@ enum Name: String, Codable {
351351
352352 // MARK: - Helper functions for creating encoders and decoders
353353
354+private func isValidDate(_ value: String) -> Bool {
355+ let formatter = DateFormatter()
356+ formatter.locale = Locale(identifier: "en_US_POSIX")
357+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
358+ formatter.dateFormat = "u-MM-dd"
359+ formatter.isLenient = false
360+ return formatter.date(from: String(value.prefix(10))) != nil
361+}
362+
354363 func newJSONDecoder() -> JSONDecoder {
355364 let decoder = JSONDecoder()
356365 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
357366 let container = try decoder.singleValueContainer()
358367 let dateStr = try container.decode(String.self).uppercased()
368+ guard isValidDate(dateStr) else {
369+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
370+ }
359371
360372 let formatter = DateFormatter()
361373 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4961a.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4a0d7.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4a455.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -339,11 +339,23 @@ enum FeatureType: String, Codable {
339339
340340 // MARK: - Helper functions for creating encoders and decoders
341341
342+private func isValidDate(_ value: String) -> Bool {
343+ let formatter = DateFormatter()
344+ formatter.locale = Locale(identifier: "en_US_POSIX")
345+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
346+ formatter.dateFormat = "u-MM-dd"
347+ formatter.isLenient = false
348+ return formatter.date(from: String(value.prefix(10))) != nil
349+}
350+
342351 func newJSONDecoder() -> JSONDecoder {
343352 let decoder = JSONDecoder()
344353 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
345354 let container = try decoder.singleValueContainer()
346355 let dateStr = try container.decode(String.self).uppercased()
356+ guard isValidDate(dateStr) else {
357+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
358+ }
347359
348360 let formatter = DateFormatter()
349361 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4c547.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -807,11 +807,23 @@ extension Wind {
807807
808808 // MARK: - Helper functions for creating encoders and decoders
809809
810+private func isValidDate(_ value: String) -> Bool {
811+ let formatter = DateFormatter()
812+ formatter.locale = Locale(identifier: "en_US_POSIX")
813+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
814+ formatter.dateFormat = "u-MM-dd"
815+ formatter.isLenient = false
816+ return formatter.date(from: String(value.prefix(10))) != nil
817+}
818+
810819 func newJSONDecoder() -> JSONDecoder {
811820 let decoder = JSONDecoder()
812821 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813822 let container = try decoder.singleValueContainer()
814823 let dateStr = try container.decode(String.self).uppercased()
824+ guard isValidDate(dateStr) else {
825+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
826+ }
815827
816828 let formatter = DateFormatter()
817829 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4d6fb.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -875,11 +875,23 @@ enum Kind: String, Codable {
875875
876876 // MARK: - Helper functions for creating encoders and decoders
877877
878+private func isValidDate(_ value: String) -> Bool {
879+ let formatter = DateFormatter()
880+ formatter.locale = Locale(identifier: "en_US_POSIX")
881+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
882+ formatter.dateFormat = "u-MM-dd"
883+ formatter.isLenient = false
884+ return formatter.date(from: String(value.prefix(10))) != nil
885+}
886+
878887 func newJSONDecoder() -> JSONDecoder {
879888 let decoder = JSONDecoder()
880889 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
881890 let container = try decoder.singleValueContainer()
882891 let dateStr = try container.decode(String.self).uppercased()
892+ guard isValidDate(dateStr) else {
893+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
894+ }
883895
884896 let formatter = DateFormatter()
885897 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/4e336.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/54147.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -174,11 +174,23 @@ extension Headers {
174174
175175 // MARK: - Helper functions for creating encoders and decoders
176176
177+private func isValidDate(_ value: String) -> Bool {
178+ let formatter = DateFormatter()
179+ formatter.locale = Locale(identifier: "en_US_POSIX")
180+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
181+ formatter.dateFormat = "u-MM-dd"
182+ formatter.isLenient = false
183+ return formatter.date(from: String(value.prefix(10))) != nil
184+}
185+
177186 func newJSONDecoder() -> JSONDecoder {
178187 let decoder = JSONDecoder()
179188 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
180189 let container = try decoder.singleValueContainer()
181190 let dateStr = try container.decode(String.self).uppercased()
191+ guard isValidDate(dateStr) else {
192+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
193+ }
182194
183195 let formatter = DateFormatter()
184196 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/54d32.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -187,11 +187,23 @@ enum Status: String, Codable {
187187
188188 // MARK: - Helper functions for creating encoders and decoders
189189
190+private func isValidDate(_ value: String) -> Bool {
191+ let formatter = DateFormatter()
192+ formatter.locale = Locale(identifier: "en_US_POSIX")
193+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
194+ formatter.dateFormat = "u-MM-dd"
195+ formatter.isLenient = false
196+ return formatter.date(from: String(value.prefix(10))) != nil
197+}
198+
190199 func newJSONDecoder() -> JSONDecoder {
191200 let decoder = JSONDecoder()
192201 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
193202 let container = try decoder.singleValueContainer()
194203 let dateStr = try container.decode(String.self).uppercased()
204+ guard isValidDate(dateStr) else {
205+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
206+ }
195207
196208 let formatter = DateFormatter()
197209 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/570ec.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -308,11 +308,23 @@ extension Array where Element == TopLevel.Element {
308308
309309 // MARK: - Helper functions for creating encoders and decoders
310310
311+private func isValidDate(_ value: String) -> Bool {
312+ let formatter = DateFormatter()
313+ formatter.locale = Locale(identifier: "en_US_POSIX")
314+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
315+ formatter.dateFormat = "u-MM-dd"
316+ formatter.isLenient = false
317+ return formatter.date(from: String(value.prefix(10))) != nil
318+}
319+
311320 func newJSONDecoder() -> JSONDecoder {
312321 let decoder = JSONDecoder()
313322 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
314323 let container = try decoder.singleValueContainer()
315324 let dateStr = try container.decode(String.self).uppercased()
325+ guard isValidDate(dateStr) else {
326+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
327+ }
316328
317329 let formatter = DateFormatter()
318330 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5dd0d.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5eae5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -90,11 +90,23 @@ extension Array where Element == TopLevel.Element {
9090
9191 // MARK: - Helper functions for creating encoders and decoders
9292
93+private func isValidDate(_ value: String) -> Bool {
94+ let formatter = DateFormatter()
95+ formatter.locale = Locale(identifier: "en_US_POSIX")
96+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
97+ formatter.dateFormat = "u-MM-dd"
98+ formatter.isLenient = false
99+ return formatter.date(from: String(value.prefix(10))) != nil
100+}
101+
93102 func newJSONDecoder() -> JSONDecoder {
94103 let decoder = JSONDecoder()
95104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
96105 let container = try decoder.singleValueContainer()
97106 let dateStr = try container.decode(String.self).uppercased()
107+ guard isValidDate(dateStr) else {
108+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
109+ }
98110
99111 let formatter = DateFormatter()
100112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5eb20.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5f3a1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/5f7fe.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1460,11 +1460,23 @@ extension Expression {
14601460
14611461 // MARK: - Helper functions for creating encoders and decoders
14621462
1463+private func isValidDate(_ value: String) -> Bool {
1464+ let formatter = DateFormatter()
1465+ formatter.locale = Locale(identifier: "en_US_POSIX")
1466+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1467+ formatter.dateFormat = "u-MM-dd"
1468+ formatter.isLenient = false
1469+ return formatter.date(from: String(value.prefix(10))) != nil
1470+}
1471+
14631472 func newJSONDecoder() -> JSONDecoder {
14641473 let decoder = JSONDecoder()
14651474 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14661475 let container = try decoder.singleValueContainer()
14671476 let dateStr = try container.decode(String.self).uppercased()
1477+ guard isValidDate(dateStr) else {
1478+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1479+ }
14681480
14691481 let formatter = DateFormatter()
14701482 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/617e8.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1456,11 +1456,23 @@ extension Expression {
14561456
14571457 // MARK: - Helper functions for creating encoders and decoders
14581458
1459+private func isValidDate(_ value: String) -> Bool {
1460+ let formatter = DateFormatter()
1461+ formatter.locale = Locale(identifier: "en_US_POSIX")
1462+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1463+ formatter.dateFormat = "u-MM-dd"
1464+ formatter.isLenient = false
1465+ return formatter.date(from: String(value.prefix(10))) != nil
1466+}
1467+
14591468 func newJSONDecoder() -> JSONDecoder {
14601469 let decoder = JSONDecoder()
14611470 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14621471 let container = try decoder.singleValueContainer()
14631472 let dateStr = try container.decode(String.self).uppercased()
1473+ guard isValidDate(dateStr) else {
1474+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1475+ }
14641476
14651477 let formatter = DateFormatter()
14661478 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/61b66.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6260a.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/65dec.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -381,11 +381,23 @@ enum TypeElement: String, Codable {
381381
382382 // MARK: - Helper functions for creating encoders and decoders
383383
384+private func isValidDate(_ value: String) -> Bool {
385+ let formatter = DateFormatter()
386+ formatter.locale = Locale(identifier: "en_US_POSIX")
387+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
388+ formatter.dateFormat = "u-MM-dd"
389+ formatter.isLenient = false
390+ return formatter.date(from: String(value.prefix(10))) != nil
391+}
392+
384393 func newJSONDecoder() -> JSONDecoder {
385394 let decoder = JSONDecoder()
386395 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
387396 let container = try decoder.singleValueContainer()
388397 let dateStr = try container.decode(String.self).uppercased()
398+ guard isValidDate(dateStr) else {
399+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
400+ }
389401
390402 let formatter = DateFormatter()
391403 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/66121.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -278,11 +278,23 @@ extension Array where Element == TopLevel.Element {
278278
279279 // MARK: - Helper functions for creating encoders and decoders
280280
281+private func isValidDate(_ value: String) -> Bool {
282+ let formatter = DateFormatter()
283+ formatter.locale = Locale(identifier: "en_US_POSIX")
284+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
285+ formatter.dateFormat = "u-MM-dd"
286+ formatter.isLenient = false
287+ return formatter.date(from: String(value.prefix(10))) != nil
288+}
289+
281290 func newJSONDecoder() -> JSONDecoder {
282291 let decoder = JSONDecoder()
283292 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
284293 let container = try decoder.singleValueContainer()
285294 let dateStr = try container.decode(String.self).uppercased()
295+ guard isValidDate(dateStr) else {
296+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
297+ }
286298
287299 let formatter = DateFormatter()
288300 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6617c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -107,11 +107,23 @@ extension IssPosition {
107107
108108 // MARK: - Helper functions for creating encoders and decoders
109109
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
110119 func newJSONDecoder() -> JSONDecoder {
111120 let decoder = JSONDecoder()
112121 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113122 let container = try decoder.singleValueContainer()
114123 let dateStr = try container.decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
115127
116128 let formatter = DateFormatter()
117129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/67c03.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -107,11 +107,23 @@ extension Person {
107107
108108 // MARK: - Helper functions for creating encoders and decoders
109109
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
110119 func newJSONDecoder() -> JSONDecoder {
111120 let decoder = JSONDecoder()
112121 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113122 let container = try decoder.singleValueContainer()
114123 let dateStr = try container.decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
115127
116128 let formatter = DateFormatter()
117129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/68c30.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -259,11 +259,23 @@ extension Out {
259259
260260 // MARK: - Helper functions for creating encoders and decoders
261261
262+private func isValidDate(_ value: String) -> Bool {
263+ let formatter = DateFormatter()
264+ formatter.locale = Locale(identifier: "en_US_POSIX")
265+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
266+ formatter.dateFormat = "u-MM-dd"
267+ formatter.isLenient = false
268+ return formatter.date(from: String(value.prefix(10))) != nil
269+}
270+
262271 func newJSONDecoder() -> JSONDecoder {
263272 let decoder = JSONDecoder()
264273 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
265274 let container = try decoder.singleValueContainer()
266275 let dateStr = try container.decode(String.self).uppercased()
276+ guard isValidDate(dateStr) else {
277+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
278+ }
267279
268280 let formatter = DateFormatter()
269281 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6c155.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -431,11 +431,23 @@ extension Location {
431431
432432 // MARK: - Helper functions for creating encoders and decoders
433433
434+private func isValidDate(_ value: String) -> Bool {
435+ let formatter = DateFormatter()
436+ formatter.locale = Locale(identifier: "en_US_POSIX")
437+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
438+ formatter.dateFormat = "u-MM-dd"
439+ formatter.isLenient = false
440+ return formatter.date(from: String(value.prefix(10))) != nil
441+}
442+
434443 func newJSONDecoder() -> JSONDecoder {
435444 let decoder = JSONDecoder()
436445 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
437446 let container = try decoder.singleValueContainer()
438447 let dateStr = try container.decode(String.self).uppercased()
448+ guard isValidDate(dateStr) else {
449+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
450+ }
439451
440452 let formatter = DateFormatter()
441453 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6de06.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -921,11 +921,23 @@ enum Kind: String, Codable {
921921
922922 // MARK: - Helper functions for creating encoders and decoders
923923
924+private func isValidDate(_ value: String) -> Bool {
925+ let formatter = DateFormatter()
926+ formatter.locale = Locale(identifier: "en_US_POSIX")
927+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
928+ formatter.dateFormat = "u-MM-dd"
929+ formatter.isLenient = false
930+ return formatter.date(from: String(value.prefix(10))) != nil
931+}
932+
924933 func newJSONDecoder() -> JSONDecoder {
925934 let decoder = JSONDecoder()
926935 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
927936 let container = try decoder.singleValueContainer()
928937 let dateStr = try container.decode(String.self).uppercased()
938+ guard isValidDate(dateStr) else {
939+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
940+ }
929941
930942 let formatter = DateFormatter()
931943 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6dec6.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -813,11 +813,23 @@ extension Wind {
813813
814814 // MARK: - Helper functions for creating encoders and decoders
815815
816+private func isValidDate(_ value: String) -> Bool {
817+ let formatter = DateFormatter()
818+ formatter.locale = Locale(identifier: "en_US_POSIX")
819+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
820+ formatter.dateFormat = "u-MM-dd"
821+ formatter.isLenient = false
822+ return formatter.date(from: String(value.prefix(10))) != nil
823+}
824+
816825 func newJSONDecoder() -> JSONDecoder {
817826 let decoder = JSONDecoder()
818827 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
819828 let container = try decoder.singleValueContainer()
820829 let dateStr = try container.decode(String.self).uppercased()
830+ guard isValidDate(dateStr) else {
831+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
832+ }
821833
822834 let formatter = DateFormatter()
823835 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/6eb00.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -86,11 +86,23 @@ extension Array where Element == TopLevel.Element {
8686
8787 // MARK: - Helper functions for creating encoders and decoders
8888
89+private func isValidDate(_ value: String) -> Bool {
90+ let formatter = DateFormatter()
91+ formatter.locale = Locale(identifier: "en_US_POSIX")
92+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
93+ formatter.dateFormat = "u-MM-dd"
94+ formatter.isLenient = false
95+ return formatter.date(from: String(value.prefix(10))) != nil
96+}
97+
8998 func newJSONDecoder() -> JSONDecoder {
9099 let decoder = JSONDecoder()
91100 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
92101 let container = try decoder.singleValueContainer()
93102 let dateStr = try container.decode(String.self).uppercased()
103+ guard isValidDate(dateStr) else {
104+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
105+ }
94106
95107 let formatter = DateFormatter()
96108 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/70c77.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/734ad.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -395,11 +395,23 @@ enum Status: String, Codable {
395395
396396 // MARK: - Helper functions for creating encoders and decoders
397397
398+private func isValidDate(_ value: String) -> Bool {
399+ let formatter = DateFormatter()
400+ formatter.locale = Locale(identifier: "en_US_POSIX")
401+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
402+ formatter.dateFormat = "u-MM-dd"
403+ formatter.isLenient = false
404+ return formatter.date(from: String(value.prefix(10))) != nil
405+}
406+
398407 func newJSONDecoder() -> JSONDecoder {
399408 let decoder = JSONDecoder()
400409 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
401410 let container = try decoder.singleValueContainer()
402411 let dateStr = try container.decode(String.self).uppercased()
412+ guard isValidDate(dateStr) else {
413+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
414+ }
403415
404416 let formatter = DateFormatter()
405417 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/75912.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7681c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -728,11 +728,23 @@ extension Pagination {
728728
729729 // MARK: - Helper functions for creating encoders and decoders
730730
731+private func isValidDate(_ value: String) -> Bool {
732+ let formatter = DateFormatter()
733+ formatter.locale = Locale(identifier: "en_US_POSIX")
734+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
735+ formatter.dateFormat = "u-MM-dd"
736+ formatter.isLenient = false
737+ return formatter.date(from: String(value.prefix(10))) != nil
738+}
739+
731740 func newJSONDecoder() -> JSONDecoder {
732741 let decoder = JSONDecoder()
733742 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
734743 let container = try decoder.singleValueContainer()
735744 let dateStr = try container.decode(String.self).uppercased()
745+ guard isValidDate(dateStr) else {
746+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
747+ }
736748
737749 let formatter = DateFormatter()
738750 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/76ae1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1435,11 +1435,23 @@ enum SchemaType: String, Codable {
14351435
14361436 // MARK: - Helper functions for creating encoders and decoders
14371437
1438+private func isValidDate(_ value: String) -> Bool {
1439+ let formatter = DateFormatter()
1440+ formatter.locale = Locale(identifier: "en_US_POSIX")
1441+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1442+ formatter.dateFormat = "u-MM-dd"
1443+ formatter.isLenient = false
1444+ return formatter.date(from: String(value.prefix(10))) != nil
1445+}
1446+
14381447 func newJSONDecoder() -> JSONDecoder {
14391448 let decoder = JSONDecoder()
14401449 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
14411450 let container = try decoder.singleValueContainer()
14421451 let dateStr = try container.decode(String.self).uppercased()
1452+ guard isValidDate(dateStr) else {
1453+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1454+ }
14431455
14441456 let formatter = DateFormatter()
14451457 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/77392.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -132,11 +132,23 @@ extension Array where Element == TopLevel.Element {
132132
133133 // MARK: - Helper functions for creating encoders and decoders
134134
135+private func isValidDate(_ value: String) -> Bool {
136+ let formatter = DateFormatter()
137+ formatter.locale = Locale(identifier: "en_US_POSIX")
138+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
139+ formatter.dateFormat = "u-MM-dd"
140+ formatter.isLenient = false
141+ return formatter.date(from: String(value.prefix(10))) != nil
142+}
143+
135144 func newJSONDecoder() -> JSONDecoder {
136145 let decoder = JSONDecoder()
137146 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
138147 let container = try decoder.singleValueContainer()
139148 let dateStr = try container.decode(String.self).uppercased()
149+ guard isValidDate(dateStr) else {
150+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
151+ }
140152
141153 let formatter = DateFormatter()
142154 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7d397.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -671,11 +671,23 @@ extension Items {
671671
672672 // MARK: - Helper functions for creating encoders and decoders
673673
674+private func isValidDate(_ value: String) -> Bool {
675+ let formatter = DateFormatter()
676+ formatter.locale = Locale(identifier: "en_US_POSIX")
677+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
678+ formatter.dateFormat = "u-MM-dd"
679+ formatter.isLenient = false
680+ return formatter.date(from: String(value.prefix(10))) != nil
681+}
682+
674683 func newJSONDecoder() -> JSONDecoder {
675684 let decoder = JSONDecoder()
676685 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
677686 let container = try decoder.singleValueContainer()
678687 let dateStr = try container.decode(String.self).uppercased()
688+ guard isValidDate(dateStr) else {
689+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
690+ }
679691
680692 let formatter = DateFormatter()
681693 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7d722.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7df41.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -119,11 +119,23 @@ extension PC {
119119
120120 // MARK: - Helper functions for creating encoders and decoders
121121
122+private func isValidDate(_ value: String) -> Bool {
123+ let formatter = DateFormatter()
124+ formatter.locale = Locale(identifier: "en_US_POSIX")
125+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
126+ formatter.dateFormat = "u-MM-dd"
127+ formatter.isLenient = false
128+ return formatter.date(from: String(value.prefix(10))) != nil
129+}
130+
122131 func newJSONDecoder() -> JSONDecoder {
123132 let decoder = JSONDecoder()
124133 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
125134 let container = try decoder.singleValueContainer()
126135 let dateStr = try container.decode(String.self).uppercased()
136+ guard isValidDate(dateStr) else {
137+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
138+ }
127139
128140 let formatter = DateFormatter()
129141 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7dfa6.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7eb30.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -237,11 +237,23 @@ enum Tel: String, Codable {
237237
238238 // MARK: - Helper functions for creating encoders and decoders
239239
240+private func isValidDate(_ value: String) -> Bool {
241+ let formatter = DateFormatter()
242+ formatter.locale = Locale(identifier: "en_US_POSIX")
243+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
244+ formatter.dateFormat = "u-MM-dd"
245+ formatter.isLenient = false
246+ return formatter.date(from: String(value.prefix(10))) != nil
247+}
248+
240249 func newJSONDecoder() -> JSONDecoder {
241250 let decoder = JSONDecoder()
242251 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
243252 let container = try decoder.singleValueContainer()
244253 let dateStr = try container.decode(String.self).uppercased()
254+ guard isValidDate(dateStr) else {
255+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
256+ }
245257
246258 let formatter = DateFormatter()
247259 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7f568.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -206,11 +206,23 @@ extension Array where Element == TopLevel.Element {
206206
207207 // MARK: - Helper functions for creating encoders and decoders
208208
209+private func isValidDate(_ value: String) -> Bool {
210+ let formatter = DateFormatter()
211+ formatter.locale = Locale(identifier: "en_US_POSIX")
212+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
213+ formatter.dateFormat = "u-MM-dd"
214+ formatter.isLenient = false
215+ return formatter.date(from: String(value.prefix(10))) != nil
216+}
217+
209218 func newJSONDecoder() -> JSONDecoder {
210219 let decoder = JSONDecoder()
211220 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
212221 let container = try decoder.singleValueContainer()
213222 let dateStr = try container.decode(String.self).uppercased()
223+ guard isValidDate(dateStr) else {
224+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
225+ }
214226
215227 let formatter = DateFormatter()
216228 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/7fbfb.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -236,11 +236,23 @@ extension Array where Element == TopLevel.Element {
236236
237237 // MARK: - Helper functions for creating encoders and decoders
238238
239+private func isValidDate(_ value: String) -> Bool {
240+ let formatter = DateFormatter()
241+ formatter.locale = Locale(identifier: "en_US_POSIX")
242+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
243+ formatter.dateFormat = "u-MM-dd"
244+ formatter.isLenient = false
245+ return formatter.date(from: String(value.prefix(10))) != nil
246+}
247+
239248 func newJSONDecoder() -> JSONDecoder {
240249 let decoder = JSONDecoder()
241250 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242251 let container = try decoder.singleValueContainer()
243252 let dateStr = try container.decode(String.self).uppercased()
253+ guard isValidDate(dateStr) else {
254+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
255+ }
244256
245257 let formatter = DateFormatter()
246258 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/80aff.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -186,11 +186,23 @@ extension Result {
186186
187187 // MARK: - Helper functions for creating encoders and decoders
188188
189+private func isValidDate(_ value: String) -> Bool {
190+ let formatter = DateFormatter()
191+ formatter.locale = Locale(identifier: "en_US_POSIX")
192+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
193+ formatter.dateFormat = "u-MM-dd"
194+ formatter.isLenient = false
195+ return formatter.date(from: String(value.prefix(10))) != nil
196+}
197+
189198 func newJSONDecoder() -> JSONDecoder {
190199 let decoder = JSONDecoder()
191200 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
192201 let container = try decoder.singleValueContainer()
193202 let dateStr = try container.decode(String.self).uppercased()
203+ guard isValidDate(dateStr) else {
204+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
205+ }
194206
195207 let formatter = DateFormatter()
196208 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/82509.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/8592b.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -683,11 +683,23 @@ enum Kind: String, Codable {
683683
684684 // MARK: - Helper functions for creating encoders and decoders
685685
686+private func isValidDate(_ value: String) -> Bool {
687+ let formatter = DateFormatter()
688+ formatter.locale = Locale(identifier: "en_US_POSIX")
689+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
690+ formatter.dateFormat = "u-MM-dd"
691+ formatter.isLenient = false
692+ return formatter.date(from: String(value.prefix(10))) != nil
693+}
694+
686695 func newJSONDecoder() -> JSONDecoder {
687696 let decoder = JSONDecoder()
688697 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
689698 let container = try decoder.singleValueContainer()
690699 let dateStr = try container.decode(String.self).uppercased()
700+ guard isValidDate(dateStr) else {
701+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
702+ }
691703
692704 let formatter = DateFormatter()
693705 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/88130.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -807,11 +807,23 @@ extension Wind {
807807
808808 // MARK: - Helper functions for creating encoders and decoders
809809
810+private func isValidDate(_ value: String) -> Bool {
811+ let formatter = DateFormatter()
812+ formatter.locale = Locale(identifier: "en_US_POSIX")
813+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
814+ formatter.dateFormat = "u-MM-dd"
815+ formatter.isLenient = false
816+ return formatter.date(from: String(value.prefix(10))) != nil
817+}
818+
810819 func newJSONDecoder() -> JSONDecoder {
811820 let decoder = JSONDecoder()
812821 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813822 let container = try decoder.singleValueContainer()
814823 let dateStr = try container.decode(String.self).uppercased()
824+ guard isValidDate(dateStr) else {
825+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
826+ }
815827
816828 let formatter = DateFormatter()
817829 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/8a62c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/908db.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -143,11 +143,23 @@ extension StateState {
143143
144144 // MARK: - Helper functions for creating encoders and decoders
145145
146+private func isValidDate(_ value: String) -> Bool {
147+ let formatter = DateFormatter()
148+ formatter.locale = Locale(identifier: "en_US_POSIX")
149+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
150+ formatter.dateFormat = "u-MM-dd"
151+ formatter.isLenient = false
152+ return formatter.date(from: String(value.prefix(10))) != nil
153+}
154+
146155 func newJSONDecoder() -> JSONDecoder {
147156 let decoder = JSONDecoder()
148157 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
149158 let container = try decoder.singleValueContainer()
150159 let dateStr = try container.decode(String.self).uppercased()
160+ guard isValidDate(dateStr) else {
161+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
162+ }
151163
152164 let formatter = DateFormatter()
153165 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9617f.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/96f7c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -71,11 +71,23 @@ extension TopLevel {
7171
7272 // MARK: - Helper functions for creating encoders and decoders
7373
74+private func isValidDate(_ value: String) -> Bool {
75+ let formatter = DateFormatter()
76+ formatter.locale = Locale(identifier: "en_US_POSIX")
77+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
78+ formatter.dateFormat = "u-MM-dd"
79+ formatter.isLenient = false
80+ return formatter.date(from: String(value.prefix(10))) != nil
81+}
82+
7483 func newJSONDecoder() -> JSONDecoder {
7584 let decoder = JSONDecoder()
7685 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7786 let container = try decoder.singleValueContainer()
7887 let dateStr = try container.decode(String.self).uppercased()
88+ guard isValidDate(dateStr) else {
89+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
90+ }
7991
8092 let formatter = DateFormatter()
8193 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9847b.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -82,11 +82,23 @@ extension Array where Element == TopLevel.Element {
8282
8383 // MARK: - Helper functions for creating encoders and decoders
8484
85+private func isValidDate(_ value: String) -> Bool {
86+ let formatter = DateFormatter()
87+ formatter.locale = Locale(identifier: "en_US_POSIX")
88+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
89+ formatter.dateFormat = "u-MM-dd"
90+ formatter.isLenient = false
91+ return formatter.date(from: String(value.prefix(10))) != nil
92+}
93+
8594 func newJSONDecoder() -> JSONDecoder {
8695 let decoder = JSONDecoder()
8796 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8897 let container = try decoder.singleValueContainer()
8998 let dateStr = try container.decode(String.self).uppercased()
99+ guard isValidDate(dateStr) else {
100+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
101+ }
90102
91103 let formatter = DateFormatter()
92104 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9929c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -807,11 +807,23 @@ extension Wind {
807807
808808 // MARK: - Helper functions for creating encoders and decoders
809809
810+private func isValidDate(_ value: String) -> Bool {
811+ let formatter = DateFormatter()
812+ formatter.locale = Locale(identifier: "en_US_POSIX")
813+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
814+ formatter.dateFormat = "u-MM-dd"
815+ formatter.isLenient = false
816+ return formatter.date(from: String(value.prefix(10))) != nil
817+}
818+
810819 func newJSONDecoder() -> JSONDecoder {
811820 let decoder = JSONDecoder()
812821 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813822 let container = try decoder.singleValueContainer()
814823 let dateStr = try container.decode(String.self).uppercased()
824+ guard isValidDate(dateStr) else {
825+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
826+ }
815827
816828 let formatter = DateFormatter()
817829 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/996bd.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -277,11 +277,23 @@ extension Array where Element == TopLevel.Element {
277277
278278 // MARK: - Helper functions for creating encoders and decoders
279279
280+private func isValidDate(_ value: String) -> Bool {
281+ let formatter = DateFormatter()
282+ formatter.locale = Locale(identifier: "en_US_POSIX")
283+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
284+ formatter.dateFormat = "u-MM-dd"
285+ formatter.isLenient = false
286+ return formatter.date(from: String(value.prefix(10))) != nil
287+}
288+
280289 func newJSONDecoder() -> JSONDecoder {
281290 let decoder = JSONDecoder()
282291 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
283292 let container = try decoder.singleValueContainer()
284293 let dateStr = try container.decode(String.self).uppercased()
294+ guard isValidDate(dateStr) else {
295+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
296+ }
285297
286298 let formatter = DateFormatter()
287299 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9a503.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -260,11 +260,23 @@ extension Array where Element == TopLevel.Element {
260260
261261 // MARK: - Helper functions for creating encoders and decoders
262262
263+private func isValidDate(_ value: String) -> Bool {
264+ let formatter = DateFormatter()
265+ formatter.locale = Locale(identifier: "en_US_POSIX")
266+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
267+ formatter.dateFormat = "u-MM-dd"
268+ formatter.isLenient = false
269+ return formatter.date(from: String(value.prefix(10))) != nil
270+}
271+
263272 func newJSONDecoder() -> JSONDecoder {
264273 let decoder = JSONDecoder()
265274 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
266275 let container = try decoder.singleValueContainer()
267276 let dateStr = try container.decode(String.self).uppercased()
277+ guard isValidDate(dateStr) else {
278+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
279+ }
268280
269281 let formatter = DateFormatter()
270282 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9ac3b.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -212,11 +212,23 @@ enum Title: String, Codable {
212212
213213 // MARK: - Helper functions for creating encoders and decoders
214214
215+private func isValidDate(_ value: String) -> Bool {
216+ let formatter = DateFormatter()
217+ formatter.locale = Locale(identifier: "en_US_POSIX")
218+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
219+ formatter.dateFormat = "u-MM-dd"
220+ formatter.isLenient = false
221+ return formatter.date(from: String(value.prefix(10))) != nil
222+}
223+
215224 func newJSONDecoder() -> JSONDecoder {
216225 let decoder = JSONDecoder()
217226 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
218227 let container = try decoder.singleValueContainer()
219228 let dateStr = try container.decode(String.self).uppercased()
229+ guard isValidDate(dateStr) else {
230+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
231+ }
220232
221233 let formatter = DateFormatter()
222234 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/9eed5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -259,11 +259,23 @@ extension Array where Element == TopLevel.Element {
259259
260260 // MARK: - Helper functions for creating encoders and decoders
261261
262+private func isValidDate(_ value: String) -> Bool {
263+ let formatter = DateFormatter()
264+ formatter.locale = Locale(identifier: "en_US_POSIX")
265+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
266+ formatter.dateFormat = "u-MM-dd"
267+ formatter.isLenient = false
268+ return formatter.date(from: String(value.prefix(10))) != nil
269+}
270+
262271 func newJSONDecoder() -> JSONDecoder {
263272 let decoder = JSONDecoder()
264273 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
265274 let container = try decoder.singleValueContainer()
266275 let dateStr = try container.decode(String.self).uppercased()
276+ guard isValidDate(dateStr) else {
277+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
278+ }
267279
268280 let formatter = DateFormatter()
269281 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a0496.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -193,11 +193,23 @@ extension Errors {
193193
194194 // MARK: - Helper functions for creating encoders and decoders
195195
196+private func isValidDate(_ value: String) -> Bool {
197+ let formatter = DateFormatter()
198+ formatter.locale = Locale(identifier: "en_US_POSIX")
199+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
200+ formatter.dateFormat = "u-MM-dd"
201+ formatter.isLenient = false
202+ return formatter.date(from: String(value.prefix(10))) != nil
203+}
204+
196205 func newJSONDecoder() -> JSONDecoder {
197206 let decoder = JSONDecoder()
198207 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
199208 let container = try decoder.singleValueContainer()
200209 let dateStr = try container.decode(String.self).uppercased()
210+ guard isValidDate(dateStr) else {
211+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
212+ }
201213
202214 let formatter = DateFormatter()
203215 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a1eca.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -807,11 +807,23 @@ extension Wind {
807807
808808 // MARK: - Helper functions for creating encoders and decoders
809809
810+private func isValidDate(_ value: String) -> Bool {
811+ let formatter = DateFormatter()
812+ formatter.locale = Locale(identifier: "en_US_POSIX")
813+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
814+ formatter.dateFormat = "u-MM-dd"
815+ formatter.isLenient = false
816+ return formatter.date(from: String(value.prefix(10))) != nil
817+}
818+
810819 func newJSONDecoder() -> JSONDecoder {
811820 let decoder = JSONDecoder()
812821 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813822 let container = try decoder.singleValueContainer()
814823 let dateStr = try container.decode(String.self).uppercased()
824+ guard isValidDate(dateStr) else {
825+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
826+ }
815827
816828 let formatter = DateFormatter()
817829 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a3d8c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -867,11 +867,23 @@ extension Owner {
867867
868868 // MARK: - Helper functions for creating encoders and decoders
869869
870+private func isValidDate(_ value: String) -> Bool {
871+ let formatter = DateFormatter()
872+ formatter.locale = Locale(identifier: "en_US_POSIX")
873+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
874+ formatter.dateFormat = "u-MM-dd"
875+ formatter.isLenient = false
876+ return formatter.date(from: String(value.prefix(10))) != nil
877+}
878+
870879 func newJSONDecoder() -> JSONDecoder {
871880 let decoder = JSONDecoder()
872881 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
873882 let container = try decoder.singleValueContainer()
874883 let dateStr = try container.decode(String.self).uppercased()
884+ guard isValidDate(dateStr) else {
885+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
886+ }
875887
876888 let formatter = DateFormatter()
877889 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a45b0.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Array where Element == TopLevel.Element {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a71df.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/a9691.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ab0d1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Array where Element == TopLevel.Element {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/abb4b.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ac944.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ad8be.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -344,11 +344,23 @@ extension Array where Element == TopLevel.Element {
344344
345345 // MARK: - Helper functions for creating encoders and decoders
346346
347+private func isValidDate(_ value: String) -> Bool {
348+ let formatter = DateFormatter()
349+ formatter.locale = Locale(identifier: "en_US_POSIX")
350+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
351+ formatter.dateFormat = "u-MM-dd"
352+ formatter.isLenient = false
353+ return formatter.date(from: String(value.prefix(10))) != nil
354+}
355+
347356 func newJSONDecoder() -> JSONDecoder {
348357 let decoder = JSONDecoder()
349358 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
350359 let container = try decoder.singleValueContainer()
351360 let dateStr = try container.decode(String.self).uppercased()
361+ guard isValidDate(dateStr) else {
362+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
363+ }
352364
353365 let formatter = DateFormatter()
354366 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ae7f0.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -506,11 +506,23 @@ enum Kind: String, Codable {
506506
507507 // MARK: - Helper functions for creating encoders and decoders
508508
509+private func isValidDate(_ value: String) -> Bool {
510+ let formatter = DateFormatter()
511+ formatter.locale = Locale(identifier: "en_US_POSIX")
512+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
513+ formatter.dateFormat = "u-MM-dd"
514+ formatter.isLenient = false
515+ return formatter.date(from: String(value.prefix(10))) != nil
516+}
517+
509518 func newJSONDecoder() -> JSONDecoder {
510519 let decoder = JSONDecoder()
511520 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
512521 let container = try decoder.singleValueContainer()
513522 let dateStr = try container.decode(String.self).uppercased()
523+ guard isValidDate(dateStr) else {
524+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
525+ }
514526
515527 let formatter = DateFormatter()
516528 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ae9ca.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -264,11 +264,23 @@ enum FeatureType: String, Codable {
264264
265265 // MARK: - Helper functions for creating encoders and decoders
266266
267+private func isValidDate(_ value: String) -> Bool {
268+ let formatter = DateFormatter()
269+ formatter.locale = Locale(identifier: "en_US_POSIX")
270+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
271+ formatter.dateFormat = "u-MM-dd"
272+ formatter.isLenient = false
273+ return formatter.date(from: String(value.prefix(10))) != nil
274+}
275+
267276 func newJSONDecoder() -> JSONDecoder {
268277 let decoder = JSONDecoder()
269278 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
270279 let container = try decoder.singleValueContainer()
271280 let dateStr = try container.decode(String.self).uppercased()
281+ guard isValidDate(dateStr) else {
282+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
283+ }
272284
273285 let formatter = DateFormatter()
274286 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/af2d1.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -507,11 +507,23 @@ enum FeatureType: String, Codable {
507507
508508 // MARK: - Helper functions for creating encoders and decoders
509509
510+private func isValidDate(_ value: String) -> Bool {
511+ let formatter = DateFormatter()
512+ formatter.locale = Locale(identifier: "en_US_POSIX")
513+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
514+ formatter.dateFormat = "u-MM-dd"
515+ formatter.isLenient = false
516+ return formatter.date(from: String(value.prefix(10))) != nil
517+}
518+
510519 func newJSONDecoder() -> JSONDecoder {
511520 let decoder = JSONDecoder()
512521 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
513522 let container = try decoder.singleValueContainer()
514523 let dateStr = try container.decode(String.self).uppercased()
524+ guard isValidDate(dateStr) else {
525+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
526+ }
515527
516528 let formatter = DateFormatter()
517529 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b4865.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -183,11 +183,23 @@ extension Array where Element == TopLevel.Element {
183183
184184 // MARK: - Helper functions for creating encoders and decoders
185185
186+private func isValidDate(_ value: String) -> Bool {
187+ let formatter = DateFormatter()
188+ formatter.locale = Locale(identifier: "en_US_POSIX")
189+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
190+ formatter.dateFormat = "u-MM-dd"
191+ formatter.isLenient = false
192+ return formatter.date(from: String(value.prefix(10))) != nil
193+}
194+
186195 func newJSONDecoder() -> JSONDecoder {
187196 let decoder = JSONDecoder()
188197 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
189198 let container = try decoder.singleValueContainer()
190199 let dateStr = try container.decode(String.self).uppercased()
200+ guard isValidDate(dateStr) else {
201+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
202+ }
191203
192204 let formatter = DateFormatter()
193205 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b6f2c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b6fe5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -63,11 +63,23 @@ extension TopLevel {
6363
6464 // MARK: - Helper functions for creating encoders and decoders
6565
66+private func isValidDate(_ value: String) -> Bool {
67+ let formatter = DateFormatter()
68+ formatter.locale = Locale(identifier: "en_US_POSIX")
69+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
70+ formatter.dateFormat = "u-MM-dd"
71+ formatter.isLenient = false
72+ return formatter.date(from: String(value.prefix(10))) != nil
73+}
74+
6675 func newJSONDecoder() -> JSONDecoder {
6776 let decoder = JSONDecoder()
6877 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6978 let container = try decoder.singleValueContainer()
7079 let dateStr = try container.decode(String.self).uppercased()
80+ guard isValidDate(dateStr) else {
81+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
82+ }
7183
7284 let formatter = DateFormatter()
7385 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/b9f64.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/bb1ec.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/be234.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -933,11 +933,23 @@ enum Kind: String, Codable {
933933
934934 // MARK: - Helper functions for creating encoders and decoders
935935
936+private func isValidDate(_ value: String) -> Bool {
937+ let formatter = DateFormatter()
938+ formatter.locale = Locale(identifier: "en_US_POSIX")
939+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
940+ formatter.dateFormat = "u-MM-dd"
941+ formatter.isLenient = false
942+ return formatter.date(from: String(value.prefix(10))) != nil
943+}
944+
936945 func newJSONDecoder() -> JSONDecoder {
937946 let decoder = JSONDecoder()
938947 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
939948 let container = try decoder.singleValueContainer()
940949 let dateStr = try container.decode(String.self).uppercased()
950+ guard isValidDate(dateStr) else {
951+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
952+ }
941953
942954 let formatter = DateFormatter()
943955 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c0356.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -155,11 +155,23 @@ extension Description {
155155
156156 // MARK: - Helper functions for creating encoders and decoders
157157
158+private func isValidDate(_ value: String) -> Bool {
159+ let formatter = DateFormatter()
160+ formatter.locale = Locale(identifier: "en_US_POSIX")
161+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
162+ formatter.dateFormat = "u-MM-dd"
163+ formatter.isLenient = false
164+ return formatter.date(from: String(value.prefix(10))) != nil
165+}
166+
158167 func newJSONDecoder() -> JSONDecoder {
159168 let decoder = JSONDecoder()
160169 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
161170 let container = try decoder.singleValueContainer()
162171 let dateStr = try container.decode(String.self).uppercased()
172+ guard isValidDate(dateStr) else {
173+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
174+ }
163175
164176 let formatter = DateFormatter()
165177 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c0a3a.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c3303.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -722,11 +722,23 @@ extension Pagination {
722722
723723 // MARK: - Helper functions for creating encoders and decoders
724724
725+private func isValidDate(_ value: String) -> Bool {
726+ let formatter = DateFormatter()
727+ formatter.locale = Locale(identifier: "en_US_POSIX")
728+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
729+ formatter.dateFormat = "u-MM-dd"
730+ formatter.isLenient = false
731+ return formatter.date(from: String(value.prefix(10))) != nil
732+}
733+
725734 func newJSONDecoder() -> JSONDecoder {
726735 let decoder = JSONDecoder()
727736 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
728737 let container = try decoder.singleValueContainer()
729738 let dateStr = try container.decode(String.self).uppercased()
739+ guard isValidDate(dateStr) else {
740+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
741+ }
730742
731743 let formatter = DateFormatter()
732744 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c6cfd.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension Country {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/c8c7e.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -236,11 +236,23 @@ extension Array where Element == TopLevel.Element {
236236
237237 // MARK: - Helper functions for creating encoders and decoders
238238
239+private func isValidDate(_ value: String) -> Bool {
240+ let formatter = DateFormatter()
241+ formatter.locale = Locale(identifier: "en_US_POSIX")
242+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
243+ formatter.dateFormat = "u-MM-dd"
244+ formatter.isLenient = false
245+ return formatter.date(from: String(value.prefix(10))) != nil
246+}
247+
239248 func newJSONDecoder() -> JSONDecoder {
240249 let decoder = JSONDecoder()
241250 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242251 let container = try decoder.singleValueContainer()
243252 let dateStr = try container.decode(String.self).uppercased()
253+ guard isValidDate(dateStr) else {
254+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
255+ }
244256
245257 let formatter = DateFormatter()
246258 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cb0cc.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -176,11 +176,23 @@ extension Laureate {
176176
177177 // MARK: - Helper functions for creating encoders and decoders
178178
179+private func isValidDate(_ value: String) -> Bool {
180+ let formatter = DateFormatter()
181+ formatter.locale = Locale(identifier: "en_US_POSIX")
182+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
183+ formatter.dateFormat = "u-MM-dd"
184+ formatter.isLenient = false
185+ return formatter.date(from: String(value.prefix(10))) != nil
186+}
187+
179188 func newJSONDecoder() -> JSONDecoder {
180189 let decoder = JSONDecoder()
181190 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
182191 let container = try decoder.singleValueContainer()
183192 let dateStr = try container.decode(String.self).uppercased()
193+ guard isValidDate(dateStr) else {
194+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
195+ }
184196
185197 let formatter = DateFormatter()
186198 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cb81e.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -111,11 +111,23 @@ extension Description {
111111
112112 // MARK: - Helper functions for creating encoders and decoders
113113
114+private func isValidDate(_ value: String) -> Bool {
115+ let formatter = DateFormatter()
116+ formatter.locale = Locale(identifier: "en_US_POSIX")
117+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
118+ formatter.dateFormat = "u-MM-dd"
119+ formatter.isLenient = false
120+ return formatter.date(from: String(value.prefix(10))) != nil
121+}
122+
114123 func newJSONDecoder() -> JSONDecoder {
115124 let decoder = JSONDecoder()
116125 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
117126 let container = try decoder.singleValueContainer()
118127 let dateStr = try container.decode(String.self).uppercased()
128+ guard isValidDate(dateStr) else {
129+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
130+ }
119131
120132 let formatter = DateFormatter()
121133 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ccd18.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cd238.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -267,11 +267,23 @@ extension Meta {
267267
268268 // MARK: - Helper functions for creating encoders and decoders
269269
270+private func isValidDate(_ value: String) -> Bool {
271+ let formatter = DateFormatter()
272+ formatter.locale = Locale(identifier: "en_US_POSIX")
273+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
274+ formatter.dateFormat = "u-MM-dd"
275+ formatter.isLenient = false
276+ return formatter.date(from: String(value.prefix(10))) != nil
277+}
278+
270279 func newJSONDecoder() -> JSONDecoder {
271280 let decoder = JSONDecoder()
272281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
273282 let container = try decoder.singleValueContainer()
274283 let dateStr = try container.decode(String.self).uppercased()
284+ guard isValidDate(dateStr) else {
285+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
286+ }
275287
276288 let formatter = DateFormatter()
277289 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cd463.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cda6c.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -236,11 +236,23 @@ extension Array where Element == TopLevel.Element {
236236
237237 // MARK: - Helper functions for creating encoders and decoders
238238
239+private func isValidDate(_ value: String) -> Bool {
240+ let formatter = DateFormatter()
241+ formatter.locale = Locale(identifier: "en_US_POSIX")
242+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
243+ formatter.dateFormat = "u-MM-dd"
244+ formatter.isLenient = false
245+ return formatter.date(from: String(value.prefix(10))) != nil
246+}
247+
239248 func newJSONDecoder() -> JSONDecoder {
240249 let decoder = JSONDecoder()
241250 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242251 let container = try decoder.singleValueContainer()
243252 let dateStr = try container.decode(String.self).uppercased()
253+ guard isValidDate(dateStr) else {
254+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
255+ }
244256
245257 let formatter = DateFormatter()
246258 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cf0d8.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -807,11 +807,23 @@ extension Wind {
807807
808808 // MARK: - Helper functions for creating encoders and decoders
809809
810+private func isValidDate(_ value: String) -> Bool {
811+ let formatter = DateFormatter()
812+ formatter.locale = Locale(identifier: "en_US_POSIX")
813+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
814+ formatter.dateFormat = "u-MM-dd"
815+ formatter.isLenient = false
816+ return formatter.date(from: String(value.prefix(10))) != nil
817+}
818+
810819 func newJSONDecoder() -> JSONDecoder {
811820 let decoder = JSONDecoder()
812821 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813822 let container = try decoder.singleValueContainer()
814823 let dateStr = try container.decode(String.self).uppercased()
824+ guard isValidDate(dateStr) else {
825+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
826+ }
815827
816828 let formatter = DateFormatter()
817829 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/cfbce.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/d0908.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension TotalPopulation {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/d23d5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -182,11 +182,23 @@ extension Result {
182182
183183 // MARK: - Helper functions for creating encoders and decoders
184184
185+private func isValidDate(_ value: String) -> Bool {
186+ let formatter = DateFormatter()
187+ formatter.locale = Locale(identifier: "en_US_POSIX")
188+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
189+ formatter.dateFormat = "u-MM-dd"
190+ formatter.isLenient = false
191+ return formatter.date(from: String(value.prefix(10))) != nil
192+}
193+
185194 func newJSONDecoder() -> JSONDecoder {
186195 let decoder = JSONDecoder()
187196 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
188197 let container = try decoder.singleValueContainer()
189198 let dateStr = try container.decode(String.self).uppercased()
199+ guard isValidDate(dateStr) else {
200+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
201+ }
190202
191203 let formatter = DateFormatter()
192204 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dbfb3.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -812,11 +812,23 @@ extension Wind {
812812
813813 // MARK: - Helper functions for creating encoders and decoders
814814
815+private func isValidDate(_ value: String) -> Bool {
816+ let formatter = DateFormatter()
817+ formatter.locale = Locale(identifier: "en_US_POSIX")
818+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
819+ formatter.dateFormat = "u-MM-dd"
820+ formatter.isLenient = false
821+ return formatter.date(from: String(value.prefix(10))) != nil
822+}
823+
815824 func newJSONDecoder() -> JSONDecoder {
816825 let decoder = JSONDecoder()
817826 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
818827 let container = try decoder.singleValueContainer()
819828 let dateStr = try container.decode(String.self).uppercased()
829+ guard isValidDate(dateStr) else {
830+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
831+ }
820832
821833 let formatter = DateFormatter()
822834 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dc44f.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -420,11 +420,23 @@ enum TypeElement: String, Codable {
420420
421421 // MARK: - Helper functions for creating encoders and decoders
422422
423+private func isValidDate(_ value: String) -> Bool {
424+ let formatter = DateFormatter()
425+ formatter.locale = Locale(identifier: "en_US_POSIX")
426+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
427+ formatter.dateFormat = "u-MM-dd"
428+ formatter.isLenient = false
429+ return formatter.date(from: String(value.prefix(10))) != nil
430+}
431+
423432 func newJSONDecoder() -> JSONDecoder {
424433 let decoder = JSONDecoder()
425434 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
426435 let container = try decoder.singleValueContainer()
427436 let dateStr = try container.decode(String.self).uppercased()
437+ guard isValidDate(dateStr) else {
438+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
439+ }
428440
429441 let formatter = DateFormatter()
430442 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dd1ce.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -420,11 +420,23 @@ enum TypeElement: String, Codable {
420420
421421 // MARK: - Helper functions for creating encoders and decoders
422422
423+private func isValidDate(_ value: String) -> Bool {
424+ let formatter = DateFormatter()
425+ formatter.locale = Locale(identifier: "en_US_POSIX")
426+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
427+ formatter.dateFormat = "u-MM-dd"
428+ formatter.isLenient = false
429+ return formatter.date(from: String(value.prefix(10))) != nil
430+}
431+
423432 func newJSONDecoder() -> JSONDecoder {
424433 let decoder = JSONDecoder()
425434 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
426435 let container = try decoder.singleValueContainer()
427436 let dateStr = try container.decode(String.self).uppercased()
437+ guard isValidDate(dateStr) else {
438+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
439+ }
428440
429441 let formatter = DateFormatter()
430442 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/dec3a.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -463,11 +463,23 @@ extension Location {
463463
464464 // MARK: - Helper functions for creating encoders and decoders
465465
466+private func isValidDate(_ value: String) -> Bool {
467+ let formatter = DateFormatter()
468+ formatter.locale = Locale(identifier: "en_US_POSIX")
469+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
470+ formatter.dateFormat = "u-MM-dd"
471+ formatter.isLenient = false
472+ return formatter.date(from: String(value.prefix(10))) != nil
473+}
474+
466475 func newJSONDecoder() -> JSONDecoder {
467476 let decoder = JSONDecoder()
468477 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
469478 let container = try decoder.singleValueContainer()
470479 let dateStr = try container.decode(String.self).uppercased()
480+ guard isValidDate(dateStr) else {
481+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
482+ }
471483
472484 let formatter = DateFormatter()
473485 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/df957.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -807,11 +807,23 @@ extension Wind {
807807
808808 // MARK: - Helper functions for creating encoders and decoders
809809
810+private func isValidDate(_ value: String) -> Bool {
811+ let formatter = DateFormatter()
812+ formatter.locale = Locale(identifier: "en_US_POSIX")
813+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
814+ formatter.dateFormat = "u-MM-dd"
815+ formatter.isLenient = false
816+ return formatter.date(from: String(value.prefix(10))) != nil
817+}
818+
810819 func newJSONDecoder() -> JSONDecoder {
811820 let decoder = JSONDecoder()
812821 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
813822 let container = try decoder.singleValueContainer()
814823 let dateStr = try container.decode(String.self).uppercased()
824+ guard isValidDate(dateStr) else {
825+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
826+ }
815827
816828 let formatter = DateFormatter()
817829 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e0ac7.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -721,11 +721,23 @@ extension Pagination {
721721
722722 // MARK: - Helper functions for creating encoders and decoders
723723
724+private func isValidDate(_ value: String) -> Bool {
725+ let formatter = DateFormatter()
726+ formatter.locale = Locale(identifier: "en_US_POSIX")
727+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
728+ formatter.dateFormat = "u-MM-dd"
729+ formatter.isLenient = false
730+ return formatter.date(from: String(value.prefix(10))) != nil
731+}
732+
724733 func newJSONDecoder() -> JSONDecoder {
725734 let decoder = JSONDecoder()
726735 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
727736 let container = try decoder.singleValueContainer()
728737 let dateStr = try container.decode(String.self).uppercased()
738+ guard isValidDate(dateStr) else {
739+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
740+ }
729741
730742 let formatter = DateFormatter()
731743 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e2915.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -811,11 +811,23 @@ extension Wind {
811811
812812 // MARK: - Helper functions for creating encoders and decoders
813813
814+private func isValidDate(_ value: String) -> Bool {
815+ let formatter = DateFormatter()
816+ formatter.locale = Locale(identifier: "en_US_POSIX")
817+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
818+ formatter.dateFormat = "u-MM-dd"
819+ formatter.isLenient = false
820+ return formatter.date(from: String(value.prefix(10))) != nil
821+}
822+
814823 func newJSONDecoder() -> JSONDecoder {
815824 let decoder = JSONDecoder()
816825 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
817826 let container = try decoder.singleValueContainer()
818827 let dateStr = try container.decode(String.self).uppercased()
828+ guard isValidDate(dateStr) else {
829+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
830+ }
819831
820832 let formatter = DateFormatter()
821833 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e2a58.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -82,11 +82,23 @@ extension Array where Element == TopLevel.Element {
8282
8383 // MARK: - Helper functions for creating encoders and decoders
8484
85+private func isValidDate(_ value: String) -> Bool {
86+ let formatter = DateFormatter()
87+ formatter.locale = Locale(identifier: "en_US_POSIX")
88+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
89+ formatter.dateFormat = "u-MM-dd"
90+ formatter.isLenient = false
91+ return formatter.date(from: String(value.prefix(10))) != nil
92+}
93+
8594 func newJSONDecoder() -> JSONDecoder {
8695 let decoder = JSONDecoder()
8796 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8897 let container = try decoder.singleValueContainer()
8998 let dateStr = try container.decode(String.self).uppercased()
99+ guard isValidDate(dateStr) else {
100+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
101+ }
90102
91103 let formatter = DateFormatter()
92104 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e324e.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -667,11 +667,23 @@ extension Items {
667667
668668 // MARK: - Helper functions for creating encoders and decoders
669669
670+private func isValidDate(_ value: String) -> Bool {
671+ let formatter = DateFormatter()
672+ formatter.locale = Locale(identifier: "en_US_POSIX")
673+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
674+ formatter.dateFormat = "u-MM-dd"
675+ formatter.isLenient = false
676+ return formatter.date(from: String(value.prefix(10))) != nil
677+}
678+
670679 func newJSONDecoder() -> JSONDecoder {
671680 let decoder = JSONDecoder()
672681 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
673682 let container = try decoder.singleValueContainer()
674683 let dateStr = try container.decode(String.self).uppercased()
684+ guard isValidDate(dateStr) else {
685+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
686+ }
675687
676688 let formatter = DateFormatter()
677689 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e53b5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -236,11 +236,23 @@ extension Array where Element == TopLevel.Element {
236236
237237 // MARK: - Helper functions for creating encoders and decoders
238238
239+private func isValidDate(_ value: String) -> Bool {
240+ let formatter = DateFormatter()
241+ formatter.locale = Locale(identifier: "en_US_POSIX")
242+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
243+ formatter.dateFormat = "u-MM-dd"
244+ formatter.isLenient = false
245+ return formatter.date(from: String(value.prefix(10))) != nil
246+}
247+
239248 func newJSONDecoder() -> JSONDecoder {
240249 let decoder = JSONDecoder()
241250 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242251 let container = try decoder.singleValueContainer()
243252 let dateStr = try container.decode(String.self).uppercased()
253+ guard isValidDate(dateStr) else {
254+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
255+ }
244256
245257 let formatter = DateFormatter()
246258 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e64a0.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -162,11 +162,23 @@ extension Headers {
162162
163163 // MARK: - Helper functions for creating encoders and decoders
164164
165+private func isValidDate(_ value: String) -> Bool {
166+ let formatter = DateFormatter()
167+ formatter.locale = Locale(identifier: "en_US_POSIX")
168+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
169+ formatter.dateFormat = "u-MM-dd"
170+ formatter.isLenient = false
171+ return formatter.date(from: String(value.prefix(10))) != nil
172+}
173+
165174 func newJSONDecoder() -> JSONDecoder {
166175 let decoder = JSONDecoder()
167176 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
168177 let container = try decoder.singleValueContainer()
169178 let dateStr = try container.decode(String.self).uppercased()
179+ guard isValidDate(dateStr) else {
180+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
181+ }
170182
171183 let formatter = DateFormatter()
172184 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e8a0b.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Array where Element == TopLevel.Element {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/e8b04.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1699,11 +1699,23 @@ extension Array where Element == TopLevel.Element {
16991699
17001700 // MARK: - Helper functions for creating encoders and decoders
17011701
1702+private func isValidDate(_ value: String) -> Bool {
1703+ let formatter = DateFormatter()
1704+ formatter.locale = Locale(identifier: "en_US_POSIX")
1705+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1706+ formatter.dateFormat = "u-MM-dd"
1707+ formatter.isLenient = false
1708+ return formatter.date(from: String(value.prefix(10))) != nil
1709+}
1710+
17021711 func newJSONDecoder() -> JSONDecoder {
17031712 let decoder = JSONDecoder()
17041713 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
17051714 let container = try decoder.singleValueContainer()
17061715 let dateStr = try container.decode(String.self).uppercased()
1716+ guard isValidDate(dateStr) else {
1717+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1718+ }
17071719
17081720 let formatter = DateFormatter()
17091721 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/ed095.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -33,11 +33,23 @@ extension Dictionary where Key == String, Value == String {
3333
3434 // MARK: - Helper functions for creating encoders and decoders
3535
36+private func isValidDate(_ value: String) -> Bool {
37+ let formatter = DateFormatter()
38+ formatter.locale = Locale(identifier: "en_US_POSIX")
39+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
40+ formatter.dateFormat = "u-MM-dd"
41+ formatter.isLenient = false
42+ return formatter.date(from: String(value.prefix(10))) != nil
43+}
44+
3645 func newJSONDecoder() -> JSONDecoder {
3746 let decoder = JSONDecoder()
3847 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3948 let container = try decoder.singleValueContainer()
4049 let dateStr = try container.decode(String.self).uppercased()
50+ guard isValidDate(dateStr) else {
51+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
52+ }
4153
4254 let formatter = DateFormatter()
4355 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f22f5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -502,11 +502,23 @@ enum Kind: String, Codable {
502502
503503 // MARK: - Helper functions for creating encoders and decoders
504504
505+private func isValidDate(_ value: String) -> Bool {
506+ let formatter = DateFormatter()
507+ formatter.locale = Locale(identifier: "en_US_POSIX")
508+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
509+ formatter.dateFormat = "u-MM-dd"
510+ formatter.isLenient = false
511+ return formatter.date(from: String(value.prefix(10))) != nil
512+}
513+
505514 func newJSONDecoder() -> JSONDecoder {
506515 let decoder = JSONDecoder()
507516 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
508517 let container = try decoder.singleValueContainer()
509518 let dateStr = try container.decode(String.self).uppercased()
519+ guard isValidDate(dateStr) else {
520+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
521+ }
510522
511523 let formatter = DateFormatter()
512524 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f3139.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -82,11 +82,23 @@ extension Array where Element == TopLevel.Element {
8282
8383 // MARK: - Helper functions for creating encoders and decoders
8484
85+private func isValidDate(_ value: String) -> Bool {
86+ let formatter = DateFormatter()
87+ formatter.locale = Locale(identifier: "en_US_POSIX")
88+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
89+ formatter.dateFormat = "u-MM-dd"
90+ formatter.isLenient = false
91+ return formatter.date(from: String(value.prefix(10))) != nil
92+}
93+
8594 func newJSONDecoder() -> JSONDecoder {
8695 let decoder = JSONDecoder()
8796 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8897 let container = try decoder.singleValueContainer()
8998 let dateStr = try container.decode(String.self).uppercased()
99+ guard isValidDate(dateStr) else {
100+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
101+ }
90102
91103 let formatter = DateFormatter()
92104 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f3edf.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Array where Element == TopLevel.Element {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f466a.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Array where Element == TopLevel.Element {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f6a65.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -729,11 +729,23 @@ extension Pagination {
729729
730730 // MARK: - Helper functions for creating encoders and decoders
731731
732+private func isValidDate(_ value: String) -> Bool {
733+ let formatter = DateFormatter()
734+ formatter.locale = Locale(identifier: "en_US_POSIX")
735+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
736+ formatter.dateFormat = "u-MM-dd"
737+ formatter.isLenient = false
738+ return formatter.date(from: String(value.prefix(10))) != nil
739+}
740+
732741 func newJSONDecoder() -> JSONDecoder {
733742 let decoder = JSONDecoder()
734743 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
735744 let container = try decoder.singleValueContainer()
736745 let dateStr = try container.decode(String.self).uppercased()
746+ guard isValidDate(dateStr) else {
747+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
748+ }
737749
738750 let formatter = DateFormatter()
739751 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f74d5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -860,11 +860,23 @@ extension Owner {
860860
861861 // MARK: - Helper functions for creating encoders and decoders
862862
863+private func isValidDate(_ value: String) -> Bool {
864+ let formatter = DateFormatter()
865+ formatter.locale = Locale(identifier: "en_US_POSIX")
866+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
867+ formatter.dateFormat = "u-MM-dd"
868+ formatter.isLenient = false
869+ return formatter.date(from: String(value.prefix(10))) != nil
870+}
871+
863872 func newJSONDecoder() -> JSONDecoder {
864873 let decoder = JSONDecoder()
865874 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
866875 let container = try decoder.singleValueContainer()
867876 let dateStr = try container.decode(String.self).uppercased()
877+ guard isValidDate(dateStr) else {
878+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
879+ }
868880
869881 let formatter = DateFormatter()
870882 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f82d9.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -747,11 +747,23 @@ extension Items {
747747
748748 // MARK: - Helper functions for creating encoders and decoders
749749
750+private func isValidDate(_ value: String) -> Bool {
751+ let formatter = DateFormatter()
752+ formatter.locale = Locale(identifier: "en_US_POSIX")
753+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
754+ formatter.dateFormat = "u-MM-dd"
755+ formatter.isLenient = false
756+ return formatter.date(from: String(value.prefix(10))) != nil
757+}
758+
750759 func newJSONDecoder() -> JSONDecoder {
751760 let decoder = JSONDecoder()
752761 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
753762 let container = try decoder.singleValueContainer()
754763 let dateStr = try container.decode(String.self).uppercased()
764+ guard isValidDate(dateStr) else {
765+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
766+ }
755767
756768 let formatter = DateFormatter()
757769 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/f974d.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -67,11 +67,23 @@ extension TopLevel {
6767
6868 // MARK: - Helper functions for creating encoders and decoders
6969
70+private func isValidDate(_ value: String) -> Bool {
71+ let formatter = DateFormatter()
72+ formatter.locale = Locale(identifier: "en_US_POSIX")
73+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
74+ formatter.dateFormat = "u-MM-dd"
75+ formatter.isLenient = false
76+ return formatter.date(from: String(value.prefix(10))) != nil
77+}
78+
7079 func newJSONDecoder() -> JSONDecoder {
7180 let decoder = JSONDecoder()
7281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7382 let container = try decoder.singleValueContainer()
7483 let dateStr = try container.decode(String.self).uppercased()
84+ guard isValidDate(dateStr) else {
85+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
86+ }
7587
7688 let formatter = DateFormatter()
7789 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/faff5.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension Response {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/fcca3.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1672,11 +1672,23 @@ extension Expression {
16721672
16731673 // MARK: - Helper functions for creating encoders and decoders
16741674
1675+private func isValidDate(_ value: String) -> Bool {
1676+ let formatter = DateFormatter()
1677+ formatter.locale = Locale(identifier: "en_US_POSIX")
1678+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1679+ formatter.dateFormat = "u-MM-dd"
1680+ formatter.isLenient = false
1681+ return formatter.date(from: String(value.prefix(10))) != nil
1682+}
1683+
16751684 func newJSONDecoder() -> JSONDecoder {
16761685 let decoder = JSONDecoder()
16771686 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
16781687 let container = try decoder.singleValueContainer()
16791688 let dateStr = try container.decode(String.self).uppercased()
1689+ guard isValidDate(dateStr) else {
1690+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1691+ }
16801692
16811693 let formatter = DateFormatter()
16821694 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/misc/fd329.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -159,11 +159,23 @@ extension Description {
159159
160160 // MARK: - Helper functions for creating encoders and decoders
161161
162+private func isValidDate(_ value: String) -> Bool {
163+ let formatter = DateFormatter()
164+ formatter.locale = Locale(identifier: "en_US_POSIX")
165+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
166+ formatter.dateFormat = "u-MM-dd"
167+ formatter.isLenient = false
168+ return formatter.date(from: String(value.prefix(10))) != nil
169+}
170+
162171 func newJSONDecoder() -> JSONDecoder {
163172 let decoder = JSONDecoder()
164173 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165174 let container = try decoder.singleValueContainer()
166175 let dateStr = try container.decode(String.self).uppercased()
176+ guard isValidDate(dateStr) else {
177+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
178+ }
167179
168180 let formatter = DateFormatter()
169181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/blns-object.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -2515,11 +2515,23 @@ extension C {
25152515
25162516 // MARK: - Helper functions for creating encoders and decoders
25172517
2518+private func isValidDate(_ value: String) -> Bool {
2519+ let formatter = DateFormatter()
2520+ formatter.locale = Locale(identifier: "en_US_POSIX")
2521+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2522+ formatter.dateFormat = "u-MM-dd"
2523+ formatter.isLenient = false
2524+ return formatter.date(from: String(value.prefix(10))) != nil
2525+}
2526+
25182527 func newJSONDecoder() -> JSONDecoder {
25192528 let decoder = JSONDecoder()
25202529 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25212530 let container = try decoder.singleValueContainer()
25222531 let dateStr = try container.decode(String.self).uppercased()
2532+ guard isValidDate(dateStr) else {
2533+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2534+ }
25232535
25242536 let formatter = DateFormatter()
25252537 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2037.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -182,11 +182,23 @@ extension Reward {
182182
183183 // MARK: - Helper functions for creating encoders and decoders
184184
185+private func isValidDate(_ value: String) -> Bool {
186+ let formatter = DateFormatter()
187+ formatter.locale = Locale(identifier: "en_US_POSIX")
188+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
189+ formatter.dateFormat = "u-MM-dd"
190+ formatter.isLenient = false
191+ return formatter.date(from: String(value.prefix(10))) != nil
192+}
193+
185194 func newJSONDecoder() -> JSONDecoder {
186195 let decoder = JSONDecoder()
187196 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
188197 let container = try decoder.singleValueContainer()
189198 let dateStr = try container.decode(String.self).uppercased()
199+ guard isValidDate(dateStr) else {
200+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
201+ }
190202
191203 let formatter = DateFormatter()
192204 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2521.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension Option {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2590.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -103,11 +103,23 @@ extension Invoice {
103103
104104 // MARK: - Helper functions for creating encoders and decoders
105105
106+private func isValidDate(_ value: String) -> Bool {
107+ let formatter = DateFormatter()
108+ formatter.locale = Locale(identifier: "en_US_POSIX")
109+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
110+ formatter.dateFormat = "u-MM-dd"
111+ formatter.isLenient = false
112+ return formatter.date(from: String(value.prefix(10))) != nil
113+}
114+
106115 func newJSONDecoder() -> JSONDecoder {
107116 let decoder = JSONDecoder()
108117 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109118 let container = try decoder.singleValueContainer()
110119 let dateStr = try container.decode(String.self).uppercased()
120+ guard isValidDate(dateStr) else {
121+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
122+ }
111123
112124 let formatter = DateFormatter()
113125 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2663.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug2793.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -146,11 +146,23 @@ extension Labels {
146146
147147 // MARK: - Helper functions for creating encoders and decoders
148148
149+private func isValidDate(_ value: String) -> Bool {
150+ let formatter = DateFormatter()
151+ formatter.locale = Locale(identifier: "en_US_POSIX")
152+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
153+ formatter.dateFormat = "u-MM-dd"
154+ formatter.isLenient = false
155+ return formatter.date(from: String(value.prefix(10))) != nil
156+}
157+
149158 func newJSONDecoder() -> JSONDecoder {
150159 let decoder = JSONDecoder()
151160 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
152161 let container = try decoder.singleValueContainer()
153162 let dateStr = try container.decode(String.self).uppercased()
163+ guard isValidDate(dateStr) else {
164+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
165+ }
154166
155167 let formatter = DateFormatter()
156168 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug427.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -4012,11 +4012,23 @@ enum TentacledKindString: String, Codable {
40124012
40134013 // MARK: - Helper functions for creating encoders and decoders
40144014
4015+private func isValidDate(_ value: String) -> Bool {
4016+ let formatter = DateFormatter()
4017+ formatter.locale = Locale(identifier: "en_US_POSIX")
4018+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
4019+ formatter.dateFormat = "u-MM-dd"
4020+ formatter.isLenient = false
4021+ return formatter.date(from: String(value.prefix(10))) != nil
4022+}
4023+
40154024 func newJSONDecoder() -> JSONDecoder {
40164025 let decoder = JSONDecoder()
40174026 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40184027 let container = try decoder.singleValueContainer()
40194028 let dateStr = try container.decode(String.self).uppercased()
4029+ guard isValidDate(dateStr) else {
4030+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
4031+ }
40204032
40214033 let formatter = DateFormatter()
40224034 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug790.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -79,11 +79,23 @@ extension TopLevel {
7979
8080 // MARK: - Helper functions for creating encoders and decoders
8181
82+private func isValidDate(_ value: String) -> Bool {
83+ let formatter = DateFormatter()
84+ formatter.locale = Locale(identifier: "en_US_POSIX")
85+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
86+ formatter.dateFormat = "u-MM-dd"
87+ formatter.isLenient = false
88+ return formatter.date(from: String(value.prefix(10))) != nil
89+}
90+
8291 func newJSONDecoder() -> JSONDecoder {
8392 let decoder = JSONDecoder()
8493 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8594 let container = try decoder.singleValueContainer()
8695 let dateStr = try container.decode(String.self).uppercased()
96+ guard isValidDate(dateStr) else {
97+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
98+ }
8799
88100 let formatter = DateFormatter()
89101 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug855-short.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -94,11 +94,23 @@ extension Dictionary where Key == String, Value == TopLevelValue {
9494
9595 // MARK: - Helper functions for creating encoders and decoders
9696
97+private func isValidDate(_ value: String) -> Bool {
98+ let formatter = DateFormatter()
99+ formatter.locale = Locale(identifier: "en_US_POSIX")
100+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
101+ formatter.dateFormat = "u-MM-dd"
102+ formatter.isLenient = false
103+ return formatter.date(from: String(value.prefix(10))) != nil
104+}
105+
97106 func newJSONDecoder() -> JSONDecoder {
98107 let decoder = JSONDecoder()
99108 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
100109 let container = try decoder.singleValueContainer()
101110 let dateStr = try container.decode(String.self).uppercased()
111+ guard isValidDate(dateStr) else {
112+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
113+ }
102114
103115 let formatter = DateFormatter()
104116 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/bug863.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -391,11 +391,23 @@ extension Array where Element == TopLevel.Element {
391391
392392 // MARK: - Helper functions for creating encoders and decoders
393393
394+private func isValidDate(_ value: String) -> Bool {
395+ let formatter = DateFormatter()
396+ formatter.locale = Locale(identifier: "en_US_POSIX")
397+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
398+ formatter.dateFormat = "u-MM-dd"
399+ formatter.isLenient = false
400+ return formatter.date(from: String(value.prefix(10))) != nil
401+}
402+
394403 func newJSONDecoder() -> JSONDecoder {
395404 let decoder = JSONDecoder()
396405 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
397406 let container = try decoder.singleValueContainer()
398407 let dateStr = try container.decode(String.self).uppercased()
408+ guard isValidDate(dateStr) else {
409+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
410+ }
399411
400412 let formatter = DateFormatter()
401413 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/coin-pairs.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -127,11 +127,23 @@ extension Pair {
127127
128128 // MARK: - Helper functions for creating encoders and decoders
129129
130+private func isValidDate(_ value: String) -> Bool {
131+ let formatter = DateFormatter()
132+ formatter.locale = Locale(identifier: "en_US_POSIX")
133+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
134+ formatter.dateFormat = "u-MM-dd"
135+ formatter.isLenient = false
136+ return formatter.date(from: String(value.prefix(10))) != nil
137+}
138+
130139 func newJSONDecoder() -> JSONDecoder {
131140 let decoder = JSONDecoder()
132141 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
133142 let container = try decoder.singleValueContainer()
134143 let dateStr = try container.decode(String.self).uppercased()
144+ guard isValidDate(dateStr) else {
145+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
146+ }
135147
136148 let formatter = DateFormatter()
137149 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/combinations1.json

15 generated files · +180 −0
Mswift-sendable-objective-cdefault / quicktype.swift+12 −0
@@ -3120,11 +3120,23 @@ enum Jacutinga: Codable, Sendable {
31203120
31213121 // MARK: - Helper functions for creating encoders and decoders
31223122
3123+private func isValidDate(_ value: String) -> Bool {
3124+ let formatter = DateFormatter()
3125+ formatter.locale = Locale(identifier: "en_US_POSIX")
3126+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3127+ formatter.dateFormat = "u-MM-dd"
3128+ formatter.isLenient = false
3129+ return formatter.date(from: String(value.prefix(10))) != nil
3130+}
3131+
31233132 func newJSONDecoder() -> JSONDecoder {
31243133 let decoder = JSONDecoder()
31253134 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263135 let container = try decoder.singleValueContainer()
31273136 let dateStr = try container.decode(String.self).uppercased()
3137+ guard isValidDate(dateStr) else {
3138+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3139+ }
31283140
31293141 let formatter = DateFormatter()
31303142 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+12 −0
@@ -2776,11 +2776,23 @@ enum Jacutinga: Codable {
27762776
27772777 // MARK: - Helper functions for creating encoders and decoders
27782778
2779+private func isValidDate(_ value: String) -> Bool {
2780+ let formatter = DateFormatter()
2781+ formatter.locale = Locale(identifier: "en_US_POSIX")
2782+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2783+ formatter.dateFormat = "u-MM-dd"
2784+ formatter.isLenient = false
2785+ return formatter.date(from: String(value.prefix(10))) != nil
2786+}
2787+
27792788 func newJSONDecoder() -> JSONDecoder {
27802789 let decoder = JSONDecoder()
27812790 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822791 let container = try decoder.singleValueContainer()
27832792 let dateStr = try container.decode(String.self).uppercased()
2793+ guard isValidDate(dateStr) else {
2794+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2795+ }
27842796
27852797 let formatter = DateFormatter()
27862798 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+12 −0
@@ -3106,11 +3106,23 @@ public enum Jacutinga: Codable {
31063106
31073107 // MARK: - Helper functions for creating encoders and decoders
31083108
3109+private func isValidDate(_ value: String) -> Bool {
3110+ let formatter = DateFormatter()
3111+ formatter.locale = Locale(identifier: "en_US_POSIX")
3112+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3113+ formatter.dateFormat = "u-MM-dd"
3114+ formatter.isLenient = false
3115+ return formatter.date(from: String(value.prefix(10))) != nil
3116+}
3117+
31093118 func newJSONDecoder() -> JSONDecoder {
31103119 let decoder = JSONDecoder()
31113120 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31123121 let container = try decoder.singleValueContainer()
31133122 let dateStr = try container.decode(String.self).uppercased()
3123+ guard isValidDate(dateStr) else {
3124+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3125+ }
31143126
31153127 let formatter = DateFormatter()
31163128 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+12 −0
@@ -2776,11 +2776,23 @@ enum Jacutinga: Codable {
27762776
27772777 // MARK: - Helper functions for creating encoders and decoders
27782778
2779+private func isValidDate(_ value: String) -> Bool {
2780+ let formatter = DateFormatter()
2781+ formatter.locale = Locale(identifier: "en_US_POSIX")
2782+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2783+ formatter.dateFormat = "u-MM-dd"
2784+ formatter.isLenient = false
2785+ return formatter.date(from: String(value.prefix(10))) != nil
2786+}
2787+
27792788 func newJSONDecoder() -> JSONDecoder {
27802789 let decoder = JSONDecoder()
27812790 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822791 let container = try decoder.singleValueContainer()
27832792 let dateStr = try container.decode(String.self).uppercased()
2793+ guard isValidDate(dateStr) else {
2794+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2795+ }
27842796
27852797 let formatter = DateFormatter()
27862798 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+12 −0
@@ -2776,11 +2776,23 @@ enum Jacutinga: Codable {
27762776
27772777 // MARK: - Helper functions for creating encoders and decoders
27782778
2779+private func isValidDate(_ value: String) -> Bool {
2780+ let formatter = DateFormatter()
2781+ formatter.locale = Locale(identifier: "en_US_POSIX")
2782+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2783+ formatter.dateFormat = "u-MM-dd"
2784+ formatter.isLenient = false
2785+ return formatter.date(from: String(value.prefix(10))) != nil
2786+}
2787+
27792788 func newJSONDecoder() -> JSONDecoder {
27802789 let decoder = JSONDecoder()
27812790 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822791 let container = try decoder.singleValueContainer()
27832792 let dateStr = try container.decode(String.self).uppercased()
2793+ guard isValidDate(dateStr) else {
2794+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2795+ }
27842796
27852797 let formatter = DateFormatter()
27862798 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+12 −0
@@ -2776,11 +2776,23 @@ enum Jacutinga: Codable {
27762776
27772777 // MARK: - Helper functions for creating encoders and decoders
27782778
2779+private func isValidDate(_ value: String) -> Bool {
2780+ let formatter = DateFormatter()
2781+ formatter.locale = Locale(identifier: "en_US_POSIX")
2782+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2783+ formatter.dateFormat = "u-MM-dd"
2784+ formatter.isLenient = false
2785+ return formatter.date(from: String(value.prefix(10))) != nil
2786+}
2787+
27792788 func newJSONDecoder() -> JSONDecoder {
27802789 let decoder = JSONDecoder()
27812790 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822791 let container = try decoder.singleValueContainer()
27832792 let dateStr = try container.decode(String.self).uppercased()
2793+ guard isValidDate(dateStr) else {
2794+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2795+ }
27842796
27852797 let formatter = DateFormatter()
27862798 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+12 −0
@@ -2390,11 +2390,23 @@ enum Jacutinga: Codable {
23902390
23912391 // MARK: - Helper functions for creating encoders and decoders
23922392
2393+private func isValidDate(_ value: String) -> Bool {
2394+ let formatter = DateFormatter()
2395+ formatter.locale = Locale(identifier: "en_US_POSIX")
2396+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2397+ formatter.dateFormat = "u-MM-dd"
2398+ formatter.isLenient = false
2399+ return formatter.date(from: String(value.prefix(10))) != nil
2400+}
2401+
23932402 func newJSONDecoder() -> JSONDecoder {
23942403 let decoder = JSONDecoder()
23952404 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
23962405 let container = try decoder.singleValueContainer()
23972406 let dateStr = try container.decode(String.self).uppercased()
2407+ guard isValidDate(dateStr) else {
2408+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2409+ }
23982410
23992411 let formatter = DateFormatter()
24002412 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+12 −0
@@ -3120,11 +3120,23 @@ enum Jacutinga: Codable {
31203120
31213121 // MARK: - Helper functions for creating encoders and decoders
31223122
3123+private func isValidDate(_ value: String) -> Bool {
3124+ let formatter = DateFormatter()
3125+ formatter.locale = Locale(identifier: "en_US_POSIX")
3126+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3127+ formatter.dateFormat = "u-MM-dd"
3128+ formatter.isLenient = false
3129+ return formatter.date(from: String(value.prefix(10))) != nil
3130+}
3131+
31233132 func newJSONDecoder() -> JSONDecoder {
31243133 let decoder = JSONDecoder()
31253134 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263135 let container = try decoder.singleValueContainer()
31273136 let dateStr = try container.decode(String.self).uppercased()
3137+ guard isValidDate(dateStr) else {
3138+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3139+ }
31283140
31293141 let formatter = DateFormatter()
31303142 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+12 −0
@@ -2776,11 +2776,23 @@ enum Jacutinga: Codable {
27762776
27772777 // MARK: - Helper functions for creating encoders and decoders
27782778
2779+private func isValidDate(_ value: String) -> Bool {
2780+ let formatter = DateFormatter()
2781+ formatter.locale = Locale(identifier: "en_US_POSIX")
2782+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2783+ formatter.dateFormat = "u-MM-dd"
2784+ formatter.isLenient = false
2785+ return formatter.date(from: String(value.prefix(10))) != nil
2786+}
2787+
27792788 func newJSONDecoder() -> JSONDecoder {
27802789 let decoder = JSONDecoder()
27812790 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822791 let container = try decoder.singleValueContainer()
27832792 let dateStr = try container.decode(String.self).uppercased()
2793+ guard isValidDate(dateStr) else {
2794+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2795+ }
27842796
27852797 let formatter = DateFormatter()
27862798 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+12 −0
@@ -2860,11 +2860,23 @@ enum Jacutinga: Codable, Equatable {
28602860
28612861 // MARK: - Helper functions for creating encoders and decoders
28622862
2863+private func isValidDate(_ value: String) -> Bool {
2864+ let formatter = DateFormatter()
2865+ formatter.locale = Locale(identifier: "en_US_POSIX")
2866+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2867+ formatter.dateFormat = "u-MM-dd"
2868+ formatter.isLenient = false
2869+ return formatter.date(from: String(value.prefix(10))) != nil
2870+}
2871+
28632872 func newJSONDecoder() -> JSONDecoder {
28642873 let decoder = JSONDecoder()
28652874 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28662875 let container = try decoder.singleValueContainer()
28672876 let dateStr = try container.decode(String.self).uppercased()
2877+ guard isValidDate(dateStr) else {
2878+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2879+ }
28682880
28692881 let formatter = DateFormatter()
28702882 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+12 −0
@@ -2860,11 +2860,23 @@ enum Jacutinga: Codable, Hashable {
28602860
28612861 // MARK: - Helper functions for creating encoders and decoders
28622862
2863+private func isValidDate(_ value: String) -> Bool {
2864+ let formatter = DateFormatter()
2865+ formatter.locale = Locale(identifier: "en_US_POSIX")
2866+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2867+ formatter.dateFormat = "u-MM-dd"
2868+ formatter.isLenient = false
2869+ return formatter.date(from: String(value.prefix(10))) != nil
2870+}
2871+
28632872 func newJSONDecoder() -> JSONDecoder {
28642873 let decoder = JSONDecoder()
28652874 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28662875 let container = try decoder.singleValueContainer()
28672876 let dateStr = try container.decode(String.self).uppercased()
2877+ guard isValidDate(dateStr) else {
2878+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2879+ }
28682880
28692881 let formatter = DateFormatter()
28702882 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+12 −0
@@ -3120,11 +3120,23 @@ enum Jacutinga: Codable, Sendable {
31203120
31213121 // MARK: - Helper functions for creating encoders and decoders
31223122
3123+private func isValidDate(_ value: String) -> Bool {
3124+ let formatter = DateFormatter()
3125+ formatter.locale = Locale(identifier: "en_US_POSIX")
3126+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3127+ formatter.dateFormat = "u-MM-dd"
3128+ formatter.isLenient = false
3129+ return formatter.date(from: String(value.prefix(10))) != nil
3130+}
3131+
31233132 func newJSONDecoder() -> JSONDecoder {
31243133 let decoder = JSONDecoder()
31253134 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263135 let container = try decoder.singleValueContainer()
31273136 let dateStr = try container.decode(String.self).uppercased()
3137+ guard isValidDate(dateStr) else {
3138+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3139+ }
31283140
31293141 let formatter = DateFormatter()
31303142 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+12 −0
@@ -2776,11 +2776,23 @@ enum Jacutinga: Codable, Sendable {
27762776
27772777 // MARK: - Helper functions for creating encoders and decoders
27782778
2779+private func isValidDate(_ value: String) -> Bool {
2780+ let formatter = DateFormatter()
2781+ formatter.locale = Locale(identifier: "en_US_POSIX")
2782+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2783+ formatter.dateFormat = "u-MM-dd"
2784+ formatter.isLenient = false
2785+ return formatter.date(from: String(value.prefix(10))) != nil
2786+}
2787+
27792788 func newJSONDecoder() -> JSONDecoder {
27802789 let decoder = JSONDecoder()
27812790 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
27822791 let container = try decoder.singleValueContainer()
27832792 let dateStr = try container.decode(String.self).uppercased()
2793+ guard isValidDate(dateStr) else {
2794+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2795+ }
27842796
27852797 let formatter = DateFormatter()
27862798 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+12 −0
@@ -3120,11 +3120,23 @@ enum Jacutinga: Codable {
31203120
31213121 // MARK: - Helper functions for creating encoders and decoders
31223122
3123+private func isValidDate(_ value: String) -> Bool {
3124+ let formatter = DateFormatter()
3125+ formatter.locale = Locale(identifier: "en_US_POSIX")
3126+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3127+ formatter.dateFormat = "u-MM-dd"
3128+ formatter.isLenient = false
3129+ return formatter.date(from: String(value.prefix(10))) != nil
3130+}
3131+
31233132 func newJSONDecoder() -> JSONDecoder {
31243133 let decoder = JSONDecoder()
31253134 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31263135 let container = try decoder.singleValueContainer()
31273136 let dateStr = try container.decode(String.self).uppercased()
3137+ guard isValidDate(dateStr) else {
3138+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3139+ }
31283140
31293141 let formatter = DateFormatter()
31303142 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+12 −0
@@ -2776,11 +2776,23 @@ enum Jacutinga: Codable {
27762776
27772777 // MARK: - Helper functions for creating encoders and decoders
27782778
2779+private func isValidDate(_ value: String) -> Bool {
2780+ let formatter = DateFormatter()
2781+ formatter.locale = Locale(identifier: "en_US_POSIX")
2782+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2783+ formatter.dateFormat = "u-MM-dd"
2784+ formatter.isLenient = false
2785+ return formatter.date(from: String(value.prefix(10))) != nil
2786+}
2787+
27792788 func newJSONDecoder() -> JSONDecoder {
27802789 let decoder = JSONDecoder()
27812790 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
27822791 decoder.dateDecodingStrategy = .custom { decoder in
27832792 let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
2793+ guard isValidDate(dateStr) else {
2794+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2795+ }
27842796 let dateData = try JSONEncoder().encode(dateStr)
27852797 let dateDecoder = JSONDecoder()
27862798 dateDecoder.dateDecodingStrategy = .iso8601
Test case

test/inputs/json/priority/combinations2.json

14 generated files · +168 −0
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+12 −0
@@ -2540,11 +2540,23 @@ enum Shakespearolater: Codable {
25402540
25412541 // MARK: - Helper functions for creating encoders and decoders
25422542
2543+private func isValidDate(_ value: String) -> Bool {
2544+ let formatter = DateFormatter()
2545+ formatter.locale = Locale(identifier: "en_US_POSIX")
2546+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2547+ formatter.dateFormat = "u-MM-dd"
2548+ formatter.isLenient = false
2549+ return formatter.date(from: String(value.prefix(10))) != nil
2550+}
2551+
25432552 func newJSONDecoder() -> JSONDecoder {
25442553 let decoder = JSONDecoder()
25452554 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462555 let container = try decoder.singleValueContainer()
25472556 let dateStr = try container.decode(String.self).uppercased()
2557+ guard isValidDate(dateStr) else {
2558+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2559+ }
25482560
25492561 let formatter = DateFormatter()
25502562 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+12 −0
@@ -2818,11 +2818,23 @@ public enum Shakespearolater: Codable {
28182818
28192819 // MARK: - Helper functions for creating encoders and decoders
28202820
2821+private func isValidDate(_ value: String) -> Bool {
2822+ let formatter = DateFormatter()
2823+ formatter.locale = Locale(identifier: "en_US_POSIX")
2824+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2825+ formatter.dateFormat = "u-MM-dd"
2826+ formatter.isLenient = false
2827+ return formatter.date(from: String(value.prefix(10))) != nil
2828+}
2829+
28212830 func newJSONDecoder() -> JSONDecoder {
28222831 let decoder = JSONDecoder()
28232832 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28242833 let container = try decoder.singleValueContainer()
28252834 let dateStr = try container.decode(String.self).uppercased()
2835+ guard isValidDate(dateStr) else {
2836+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2837+ }
28262838
28272839 let formatter = DateFormatter()
28282840 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+12 −0
@@ -2540,11 +2540,23 @@ enum Shakespearolater: Codable {
25402540
25412541 // MARK: - Helper functions for creating encoders and decoders
25422542
2543+private func isValidDate(_ value: String) -> Bool {
2544+ let formatter = DateFormatter()
2545+ formatter.locale = Locale(identifier: "en_US_POSIX")
2546+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2547+ formatter.dateFormat = "u-MM-dd"
2548+ formatter.isLenient = false
2549+ return formatter.date(from: String(value.prefix(10))) != nil
2550+}
2551+
25432552 func newJSONDecoder() -> JSONDecoder {
25442553 let decoder = JSONDecoder()
25452554 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462555 let container = try decoder.singleValueContainer()
25472556 let dateStr = try container.decode(String.self).uppercased()
2557+ guard isValidDate(dateStr) else {
2558+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2559+ }
25482560
25492561 let formatter = DateFormatter()
25502562 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+12 −0
@@ -2540,11 +2540,23 @@ enum Shakespearolater: Codable {
25402540
25412541 // MARK: - Helper functions for creating encoders and decoders
25422542
2543+private func isValidDate(_ value: String) -> Bool {
2544+ let formatter = DateFormatter()
2545+ formatter.locale = Locale(identifier: "en_US_POSIX")
2546+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2547+ formatter.dateFormat = "u-MM-dd"
2548+ formatter.isLenient = false
2549+ return formatter.date(from: String(value.prefix(10))) != nil
2550+}
2551+
25432552 func newJSONDecoder() -> JSONDecoder {
25442553 let decoder = JSONDecoder()
25452554 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462555 let container = try decoder.singleValueContainer()
25472556 let dateStr = try container.decode(String.self).uppercased()
2557+ guard isValidDate(dateStr) else {
2558+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2559+ }
25482560
25492561 let formatter = DateFormatter()
25502562 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+12 −0
@@ -2540,11 +2540,23 @@ enum Shakespearolater: Codable {
25402540
25412541 // MARK: - Helper functions for creating encoders and decoders
25422542
2543+private func isValidDate(_ value: String) -> Bool {
2544+ let formatter = DateFormatter()
2545+ formatter.locale = Locale(identifier: "en_US_POSIX")
2546+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2547+ formatter.dateFormat = "u-MM-dd"
2548+ formatter.isLenient = false
2549+ return formatter.date(from: String(value.prefix(10))) != nil
2550+}
2551+
25432552 func newJSONDecoder() -> JSONDecoder {
25442553 let decoder = JSONDecoder()
25452554 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462555 let container = try decoder.singleValueContainer()
25472556 let dateStr = try container.decode(String.self).uppercased()
2557+ guard isValidDate(dateStr) else {
2558+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2559+ }
25482560
25492561 let formatter = DateFormatter()
25502562 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+12 −0
@@ -2242,11 +2242,23 @@ enum Shakespearolater: Codable {
22422242
22432243 // MARK: - Helper functions for creating encoders and decoders
22442244
2245+private func isValidDate(_ value: String) -> Bool {
2246+ let formatter = DateFormatter()
2247+ formatter.locale = Locale(identifier: "en_US_POSIX")
2248+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2249+ formatter.dateFormat = "u-MM-dd"
2250+ formatter.isLenient = false
2251+ return formatter.date(from: String(value.prefix(10))) != nil
2252+}
2253+
22452254 func newJSONDecoder() -> JSONDecoder {
22462255 let decoder = JSONDecoder()
22472256 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
22482257 let container = try decoder.singleValueContainer()
22492258 let dateStr = try container.decode(String.self).uppercased()
2259+ guard isValidDate(dateStr) else {
2260+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2261+ }
22502262
22512263 let formatter = DateFormatter()
22522264 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+12 −0
@@ -2829,11 +2829,23 @@ enum Shakespearolater: Codable {
28292829
28302830 // MARK: - Helper functions for creating encoders and decoders
28312831
2832+private func isValidDate(_ value: String) -> Bool {
2833+ let formatter = DateFormatter()
2834+ formatter.locale = Locale(identifier: "en_US_POSIX")
2835+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2836+ formatter.dateFormat = "u-MM-dd"
2837+ formatter.isLenient = false
2838+ return formatter.date(from: String(value.prefix(10))) != nil
2839+}
2840+
28322841 func newJSONDecoder() -> JSONDecoder {
28332842 let decoder = JSONDecoder()
28342843 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28352844 let container = try decoder.singleValueContainer()
28362845 let dateStr = try container.decode(String.self).uppercased()
2846+ guard isValidDate(dateStr) else {
2847+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2848+ }
28372849
28382850 let formatter = DateFormatter()
28392851 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+12 −0
@@ -2540,11 +2540,23 @@ enum Shakespearolater: Codable {
25402540
25412541 // MARK: - Helper functions for creating encoders and decoders
25422542
2543+private func isValidDate(_ value: String) -> Bool {
2544+ let formatter = DateFormatter()
2545+ formatter.locale = Locale(identifier: "en_US_POSIX")
2546+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2547+ formatter.dateFormat = "u-MM-dd"
2548+ formatter.isLenient = false
2549+ return formatter.date(from: String(value.prefix(10))) != nil
2550+}
2551+
25432552 func newJSONDecoder() -> JSONDecoder {
25442553 let decoder = JSONDecoder()
25452554 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462555 let container = try decoder.singleValueContainer()
25472556 let dateStr = try container.decode(String.self).uppercased()
2557+ guard isValidDate(dateStr) else {
2558+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2559+ }
25482560
25492561 let formatter = DateFormatter()
25502562 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+12 −0
@@ -2606,11 +2606,23 @@ enum Shakespearolater: Codable, Equatable {
26062606
26072607 // MARK: - Helper functions for creating encoders and decoders
26082608
2609+private func isValidDate(_ value: String) -> Bool {
2610+ let formatter = DateFormatter()
2611+ formatter.locale = Locale(identifier: "en_US_POSIX")
2612+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2613+ formatter.dateFormat = "u-MM-dd"
2614+ formatter.isLenient = false
2615+ return formatter.date(from: String(value.prefix(10))) != nil
2616+}
2617+
26092618 func newJSONDecoder() -> JSONDecoder {
26102619 let decoder = JSONDecoder()
26112620 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
26122621 let container = try decoder.singleValueContainer()
26132622 let dateStr = try container.decode(String.self).uppercased()
2623+ guard isValidDate(dateStr) else {
2624+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2625+ }
26142626
26152627 let formatter = DateFormatter()
26162628 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+12 −0
@@ -2606,11 +2606,23 @@ enum Shakespearolater: Codable, Hashable {
26062606
26072607 // MARK: - Helper functions for creating encoders and decoders
26082608
2609+private func isValidDate(_ value: String) -> Bool {
2610+ let formatter = DateFormatter()
2611+ formatter.locale = Locale(identifier: "en_US_POSIX")
2612+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2613+ formatter.dateFormat = "u-MM-dd"
2614+ formatter.isLenient = false
2615+ return formatter.date(from: String(value.prefix(10))) != nil
2616+}
2617+
26092618 func newJSONDecoder() -> JSONDecoder {
26102619 let decoder = JSONDecoder()
26112620 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
26122621 let container = try decoder.singleValueContainer()
26132622 let dateStr = try container.decode(String.self).uppercased()
2623+ guard isValidDate(dateStr) else {
2624+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2625+ }
26142626
26152627 let formatter = DateFormatter()
26162628 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+12 −0
@@ -2829,11 +2829,23 @@ enum Shakespearolater: Codable, Sendable {
28292829
28302830 // MARK: - Helper functions for creating encoders and decoders
28312831
2832+private func isValidDate(_ value: String) -> Bool {
2833+ let formatter = DateFormatter()
2834+ formatter.locale = Locale(identifier: "en_US_POSIX")
2835+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2836+ formatter.dateFormat = "u-MM-dd"
2837+ formatter.isLenient = false
2838+ return formatter.date(from: String(value.prefix(10))) != nil
2839+}
2840+
28322841 func newJSONDecoder() -> JSONDecoder {
28332842 let decoder = JSONDecoder()
28342843 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28352844 let container = try decoder.singleValueContainer()
28362845 let dateStr = try container.decode(String.self).uppercased()
2846+ guard isValidDate(dateStr) else {
2847+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2848+ }
28372849
28382850 let formatter = DateFormatter()
28392851 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+12 −0
@@ -2540,11 +2540,23 @@ enum Shakespearolater: Codable, Sendable {
25402540
25412541 // MARK: - Helper functions for creating encoders and decoders
25422542
2543+private func isValidDate(_ value: String) -> Bool {
2544+ let formatter = DateFormatter()
2545+ formatter.locale = Locale(identifier: "en_US_POSIX")
2546+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2547+ formatter.dateFormat = "u-MM-dd"
2548+ formatter.isLenient = false
2549+ return formatter.date(from: String(value.prefix(10))) != nil
2550+}
2551+
25432552 func newJSONDecoder() -> JSONDecoder {
25442553 let decoder = JSONDecoder()
25452554 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
25462555 let container = try decoder.singleValueContainer()
25472556 let dateStr = try container.decode(String.self).uppercased()
2557+ guard isValidDate(dateStr) else {
2558+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2559+ }
25482560
25492561 let formatter = DateFormatter()
25502562 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+12 −0
@@ -2829,11 +2829,23 @@ enum Shakespearolater: Codable {
28292829
28302830 // MARK: - Helper functions for creating encoders and decoders
28312831
2832+private func isValidDate(_ value: String) -> Bool {
2833+ let formatter = DateFormatter()
2834+ formatter.locale = Locale(identifier: "en_US_POSIX")
2835+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2836+ formatter.dateFormat = "u-MM-dd"
2837+ formatter.isLenient = false
2838+ return formatter.date(from: String(value.prefix(10))) != nil
2839+}
2840+
28322841 func newJSONDecoder() -> JSONDecoder {
28332842 let decoder = JSONDecoder()
28342843 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
28352844 let container = try decoder.singleValueContainer()
28362845 let dateStr = try container.decode(String.self).uppercased()
2846+ guard isValidDate(dateStr) else {
2847+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2848+ }
28372849
28382850 let formatter = DateFormatter()
28392851 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+12 −0
@@ -2540,11 +2540,23 @@ enum Shakespearolater: Codable {
25402540
25412541 // MARK: - Helper functions for creating encoders and decoders
25422542
2543+private func isValidDate(_ value: String) -> Bool {
2544+ let formatter = DateFormatter()
2545+ formatter.locale = Locale(identifier: "en_US_POSIX")
2546+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2547+ formatter.dateFormat = "u-MM-dd"
2548+ formatter.isLenient = false
2549+ return formatter.date(from: String(value.prefix(10))) != nil
2550+}
2551+
25432552 func newJSONDecoder() -> JSONDecoder {
25442553 let decoder = JSONDecoder()
25452554 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
25462555 decoder.dateDecodingStrategy = .custom { decoder in
25472556 let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
2557+ guard isValidDate(dateStr) else {
2558+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2559+ }
25482560 let dateData = try JSONEncoder().encode(dateStr)
25492561 let dateDecoder = JSONDecoder()
25502562 dateDecoder.dateDecodingStrategy = .iso8601
Test case

test/inputs/json/priority/combinations3.json

14 generated files · +168 −0
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+12 −0
@@ -3075,11 +3075,23 @@ enum Protext: Codable {
30753075
30763076 // MARK: - Helper functions for creating encoders and decoders
30773077
3078+private func isValidDate(_ value: String) -> Bool {
3079+ let formatter = DateFormatter()
3080+ formatter.locale = Locale(identifier: "en_US_POSIX")
3081+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3082+ formatter.dateFormat = "u-MM-dd"
3083+ formatter.isLenient = false
3084+ return formatter.date(from: String(value.prefix(10))) != nil
3085+}
3086+
30783087 func newJSONDecoder() -> JSONDecoder {
30793088 let decoder = JSONDecoder()
30803089 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813090 let container = try decoder.singleValueContainer()
30823091 let dateStr = try container.decode(String.self).uppercased()
3092+ guard isValidDate(dateStr) else {
3093+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3094+ }
30833095
30843096 let formatter = DateFormatter()
30853097 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+12 −0
@@ -3457,11 +3457,23 @@ public enum Protext: Codable {
34573457
34583458 // MARK: - Helper functions for creating encoders and decoders
34593459
3460+private func isValidDate(_ value: String) -> Bool {
3461+ let formatter = DateFormatter()
3462+ formatter.locale = Locale(identifier: "en_US_POSIX")
3463+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3464+ formatter.dateFormat = "u-MM-dd"
3465+ formatter.isLenient = false
3466+ return formatter.date(from: String(value.prefix(10))) != nil
3467+}
3468+
34603469 func newJSONDecoder() -> JSONDecoder {
34613470 let decoder = JSONDecoder()
34623471 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34633472 let container = try decoder.singleValueContainer()
34643473 let dateStr = try container.decode(String.self).uppercased()
3474+ guard isValidDate(dateStr) else {
3475+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3476+ }
34653477
34663478 let formatter = DateFormatter()
34673479 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+12 −0
@@ -3075,11 +3075,23 @@ enum Protext: Codable {
30753075
30763076 // MARK: - Helper functions for creating encoders and decoders
30773077
3078+private func isValidDate(_ value: String) -> Bool {
3079+ let formatter = DateFormatter()
3080+ formatter.locale = Locale(identifier: "en_US_POSIX")
3081+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3082+ formatter.dateFormat = "u-MM-dd"
3083+ formatter.isLenient = false
3084+ return formatter.date(from: String(value.prefix(10))) != nil
3085+}
3086+
30783087 func newJSONDecoder() -> JSONDecoder {
30793088 let decoder = JSONDecoder()
30803089 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813090 let container = try decoder.singleValueContainer()
30823091 let dateStr = try container.decode(String.self).uppercased()
3092+ guard isValidDate(dateStr) else {
3093+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3094+ }
30833095
30843096 let formatter = DateFormatter()
30853097 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+12 −0
@@ -3075,11 +3075,23 @@ enum Protext: Codable {
30753075
30763076 // MARK: - Helper functions for creating encoders and decoders
30773077
3078+private func isValidDate(_ value: String) -> Bool {
3079+ let formatter = DateFormatter()
3080+ formatter.locale = Locale(identifier: "en_US_POSIX")
3081+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3082+ formatter.dateFormat = "u-MM-dd"
3083+ formatter.isLenient = false
3084+ return formatter.date(from: String(value.prefix(10))) != nil
3085+}
3086+
30783087 func newJSONDecoder() -> JSONDecoder {
30793088 let decoder = JSONDecoder()
30803089 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813090 let container = try decoder.singleValueContainer()
30823091 let dateStr = try container.decode(String.self).uppercased()
3092+ guard isValidDate(dateStr) else {
3093+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3094+ }
30833095
30843096 let formatter = DateFormatter()
30853097 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+12 −0
@@ -3075,11 +3075,23 @@ enum Protext: Codable {
30753075
30763076 // MARK: - Helper functions for creating encoders and decoders
30773077
3078+private func isValidDate(_ value: String) -> Bool {
3079+ let formatter = DateFormatter()
3080+ formatter.locale = Locale(identifier: "en_US_POSIX")
3081+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3082+ formatter.dateFormat = "u-MM-dd"
3083+ formatter.isLenient = false
3084+ return formatter.date(from: String(value.prefix(10))) != nil
3085+}
3086+
30783087 func newJSONDecoder() -> JSONDecoder {
30793088 let decoder = JSONDecoder()
30803089 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813090 let container = try decoder.singleValueContainer()
30823091 let dateStr = try container.decode(String.self).uppercased()
3092+ guard isValidDate(dateStr) else {
3093+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3094+ }
30833095
30843096 let formatter = DateFormatter()
30853097 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+12 −0
@@ -2622,11 +2622,23 @@ enum Protext: Codable {
26222622
26232623 // MARK: - Helper functions for creating encoders and decoders
26242624
2625+private func isValidDate(_ value: String) -> Bool {
2626+ let formatter = DateFormatter()
2627+ formatter.locale = Locale(identifier: "en_US_POSIX")
2628+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
2629+ formatter.dateFormat = "u-MM-dd"
2630+ formatter.isLenient = false
2631+ return formatter.date(from: String(value.prefix(10))) != nil
2632+}
2633+
26252634 func newJSONDecoder() -> JSONDecoder {
26262635 let decoder = JSONDecoder()
26272636 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
26282637 let container = try decoder.singleValueContainer()
26292638 let dateStr = try container.decode(String.self).uppercased()
2639+ guard isValidDate(dateStr) else {
2640+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
2641+ }
26302642
26312643 let formatter = DateFormatter()
26322644 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+12 −0
@@ -3472,11 +3472,23 @@ enum Protext: Codable {
34723472
34733473 // MARK: - Helper functions for creating encoders and decoders
34743474
3475+private func isValidDate(_ value: String) -> Bool {
3476+ let formatter = DateFormatter()
3477+ formatter.locale = Locale(identifier: "en_US_POSIX")
3478+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3479+ formatter.dateFormat = "u-MM-dd"
3480+ formatter.isLenient = false
3481+ return formatter.date(from: String(value.prefix(10))) != nil
3482+}
3483+
34753484 func newJSONDecoder() -> JSONDecoder {
34763485 let decoder = JSONDecoder()
34773486 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34783487 let container = try decoder.singleValueContainer()
34793488 let dateStr = try container.decode(String.self).uppercased()
3489+ guard isValidDate(dateStr) else {
3490+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3491+ }
34803492
34813493 let formatter = DateFormatter()
34823494 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+12 −0
@@ -3075,11 +3075,23 @@ enum Protext: Codable {
30753075
30763076 // MARK: - Helper functions for creating encoders and decoders
30773077
3078+private func isValidDate(_ value: String) -> Bool {
3079+ let formatter = DateFormatter()
3080+ formatter.locale = Locale(identifier: "en_US_POSIX")
3081+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3082+ formatter.dateFormat = "u-MM-dd"
3083+ formatter.isLenient = false
3084+ return formatter.date(from: String(value.prefix(10))) != nil
3085+}
3086+
30783087 func newJSONDecoder() -> JSONDecoder {
30793088 let decoder = JSONDecoder()
30803089 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813090 let container = try decoder.singleValueContainer()
30823091 let dateStr = try container.decode(String.self).uppercased()
3092+ guard isValidDate(dateStr) else {
3093+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3094+ }
30833095
30843096 let formatter = DateFormatter()
30853097 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+12 −0
@@ -3165,11 +3165,23 @@ enum Protext: Codable, Equatable {
31653165
31663166 // MARK: - Helper functions for creating encoders and decoders
31673167
3168+private func isValidDate(_ value: String) -> Bool {
3169+ let formatter = DateFormatter()
3170+ formatter.locale = Locale(identifier: "en_US_POSIX")
3171+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3172+ formatter.dateFormat = "u-MM-dd"
3173+ formatter.isLenient = false
3174+ return formatter.date(from: String(value.prefix(10))) != nil
3175+}
3176+
31683177 func newJSONDecoder() -> JSONDecoder {
31693178 let decoder = JSONDecoder()
31703179 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31713180 let container = try decoder.singleValueContainer()
31723181 let dateStr = try container.decode(String.self).uppercased()
3182+ guard isValidDate(dateStr) else {
3183+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3184+ }
31733185
31743186 let formatter = DateFormatter()
31753187 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+12 −0
@@ -3165,11 +3165,23 @@ enum Protext: Codable, Hashable {
31653165
31663166 // MARK: - Helper functions for creating encoders and decoders
31673167
3168+private func isValidDate(_ value: String) -> Bool {
3169+ let formatter = DateFormatter()
3170+ formatter.locale = Locale(identifier: "en_US_POSIX")
3171+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3172+ formatter.dateFormat = "u-MM-dd"
3173+ formatter.isLenient = false
3174+ return formatter.date(from: String(value.prefix(10))) != nil
3175+}
3176+
31683177 func newJSONDecoder() -> JSONDecoder {
31693178 let decoder = JSONDecoder()
31703179 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
31713180 let container = try decoder.singleValueContainer()
31723181 let dateStr = try container.decode(String.self).uppercased()
3182+ guard isValidDate(dateStr) else {
3183+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3184+ }
31733185
31743186 let formatter = DateFormatter()
31753187 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+12 −0
@@ -3472,11 +3472,23 @@ enum Protext: Codable, Sendable {
34723472
34733473 // MARK: - Helper functions for creating encoders and decoders
34743474
3475+private func isValidDate(_ value: String) -> Bool {
3476+ let formatter = DateFormatter()
3477+ formatter.locale = Locale(identifier: "en_US_POSIX")
3478+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3479+ formatter.dateFormat = "u-MM-dd"
3480+ formatter.isLenient = false
3481+ return formatter.date(from: String(value.prefix(10))) != nil
3482+}
3483+
34753484 func newJSONDecoder() -> JSONDecoder {
34763485 let decoder = JSONDecoder()
34773486 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34783487 let container = try decoder.singleValueContainer()
34793488 let dateStr = try container.decode(String.self).uppercased()
3489+ guard isValidDate(dateStr) else {
3490+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3491+ }
34803492
34813493 let formatter = DateFormatter()
34823494 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+12 −0
@@ -3075,11 +3075,23 @@ enum Protext: Codable, Sendable {
30753075
30763076 // MARK: - Helper functions for creating encoders and decoders
30773077
3078+private func isValidDate(_ value: String) -> Bool {
3079+ let formatter = DateFormatter()
3080+ formatter.locale = Locale(identifier: "en_US_POSIX")
3081+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3082+ formatter.dateFormat = "u-MM-dd"
3083+ formatter.isLenient = false
3084+ return formatter.date(from: String(value.prefix(10))) != nil
3085+}
3086+
30783087 func newJSONDecoder() -> JSONDecoder {
30793088 let decoder = JSONDecoder()
30803089 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30813090 let container = try decoder.singleValueContainer()
30823091 let dateStr = try container.decode(String.self).uppercased()
3092+ guard isValidDate(dateStr) else {
3093+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3094+ }
30833095
30843096 let formatter = DateFormatter()
30853097 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+12 −0
@@ -3472,11 +3472,23 @@ enum Protext: Codable {
34723472
34733473 // MARK: - Helper functions for creating encoders and decoders
34743474
3475+private func isValidDate(_ value: String) -> Bool {
3476+ let formatter = DateFormatter()
3477+ formatter.locale = Locale(identifier: "en_US_POSIX")
3478+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3479+ formatter.dateFormat = "u-MM-dd"
3480+ formatter.isLenient = false
3481+ return formatter.date(from: String(value.prefix(10))) != nil
3482+}
3483+
34753484 func newJSONDecoder() -> JSONDecoder {
34763485 let decoder = JSONDecoder()
34773486 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
34783487 let container = try decoder.singleValueContainer()
34793488 let dateStr = try container.decode(String.self).uppercased()
3489+ guard isValidDate(dateStr) else {
3490+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3491+ }
34803492
34813493 let formatter = DateFormatter()
34823494 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+12 −0
@@ -3075,11 +3075,23 @@ enum Protext: Codable {
30753075
30763076 // MARK: - Helper functions for creating encoders and decoders
30773077
3078+private func isValidDate(_ value: String) -> Bool {
3079+ let formatter = DateFormatter()
3080+ formatter.locale = Locale(identifier: "en_US_POSIX")
3081+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3082+ formatter.dateFormat = "u-MM-dd"
3083+ formatter.isLenient = false
3084+ return formatter.date(from: String(value.prefix(10))) != nil
3085+}
3086+
30783087 func newJSONDecoder() -> JSONDecoder {
30793088 let decoder = JSONDecoder()
30803089 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
30813090 decoder.dateDecodingStrategy = .custom { decoder in
30823091 let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
3092+ guard isValidDate(dateStr) else {
3093+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3094+ }
30833095 let dateData = try JSONEncoder().encode(dateStr)
30843096 let dateDecoder = JSONDecoder()
30853097 dateDecoder.dateDecodingStrategy = .iso8601
Test case

test/inputs/json/priority/combinations4.json

14 generated files · +168 −0
Mswiftaccess-level-internal--a653a863c206 / quicktype.swift+12 −0
@@ -3579,11 +3579,23 @@ extension WrothyClass {
35793579
35803580 // MARK: - Helper functions for creating encoders and decoders
35813581
3582+private func isValidDate(_ value: String) -> Bool {
3583+ let formatter = DateFormatter()
3584+ formatter.locale = Locale(identifier: "en_US_POSIX")
3585+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3586+ formatter.dateFormat = "u-MM-dd"
3587+ formatter.isLenient = false
3588+ return formatter.date(from: String(value.prefix(10))) != nil
3589+}
3590+
35823591 func newJSONDecoder() -> JSONDecoder {
35833592 let decoder = JSONDecoder()
35843593 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853594 let container = try decoder.singleValueContainer()
35863595 let dateStr = try container.decode(String.self).uppercased()
3596+ guard isValidDate(dateStr) else {
3597+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3598+ }
35873599
35883600 let formatter = DateFormatter()
35893601 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftaccess-level-public--bc6fc37ec004 / quicktype.swift+12 −0
@@ -4017,11 +4017,23 @@ public extension WrothyClass {
40174017
40184018 // MARK: - Helper functions for creating encoders and decoders
40194019
4020+private func isValidDate(_ value: String) -> Bool {
4021+ let formatter = DateFormatter()
4022+ formatter.locale = Locale(identifier: "en_US_POSIX")
4023+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
4024+ formatter.dateFormat = "u-MM-dd"
4025+ formatter.isLenient = false
4026+ return formatter.date(from: String(value.prefix(10))) != nil
4027+}
4028+
40204029 func newJSONDecoder() -> JSONDecoder {
40214030 let decoder = JSONDecoder()
40224031 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40234032 let container = try decoder.singleValueContainer()
40244033 let dateStr = try container.decode(String.self).uppercased()
4034+ guard isValidDate(dateStr) else {
4035+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
4036+ }
40254037
40264038 let formatter = DateFormatter()
40274039 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-false--33058e42a49b / quicktype.swift+12 −0
@@ -3579,11 +3579,23 @@ extension WrothyClass {
35793579
35803580 // MARK: - Helper functions for creating encoders and decoders
35813581
3582+private func isValidDate(_ value: String) -> Bool {
3583+ let formatter = DateFormatter()
3584+ formatter.locale = Locale(identifier: "en_US_POSIX")
3585+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3586+ formatter.dateFormat = "u-MM-dd"
3587+ formatter.isLenient = false
3588+ return formatter.date(from: String(value.prefix(10))) != nil
3589+}
3590+
35823591 func newJSONDecoder() -> JSONDecoder {
35833592 let decoder = JSONDecoder()
35843593 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853594 let container = try decoder.singleValueContainer()
35863595 let dateStr = try container.decode(String.self).uppercased()
3596+ guard isValidDate(dateStr) else {
3597+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3598+ }
35873599
35883600 let formatter = DateFormatter()
35893601 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftcoding-keys-protocol-CaseIterable--169323764eaa / quicktype.swift+12 −0
@@ -3579,11 +3579,23 @@ extension WrothyClass {
35793579
35803580 // MARK: - Helper functions for creating encoders and decoders
35813581
3582+private func isValidDate(_ value: String) -> Bool {
3583+ let formatter = DateFormatter()
3584+ formatter.locale = Locale(identifier: "en_US_POSIX")
3585+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3586+ formatter.dateFormat = "u-MM-dd"
3587+ formatter.isLenient = false
3588+ return formatter.date(from: String(value.prefix(10))) != nil
3589+}
3590+
35823591 func newJSONDecoder() -> JSONDecoder {
35833592 let decoder = JSONDecoder()
35843593 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853594 let container = try decoder.singleValueContainer()
35863595 let dateStr = try container.decode(String.self).uppercased()
3596+ guard isValidDate(dateStr) else {
3597+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3598+ }
35873599
35883600 let formatter = DateFormatter()
35893601 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+12 −0
@@ -3579,11 +3579,23 @@ extension WrothyClass {
35793579
35803580 // MARK: - Helper functions for creating encoders and decoders
35813581
3582+private func isValidDate(_ value: String) -> Bool {
3583+ let formatter = DateFormatter()
3584+ formatter.locale = Locale(identifier: "en_US_POSIX")
3585+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3586+ formatter.dateFormat = "u-MM-dd"
3587+ formatter.isLenient = false
3588+ return formatter.date(from: String(value.prefix(10))) != nil
3589+}
3590+
35823591 func newJSONDecoder() -> JSONDecoder {
35833592 let decoder = JSONDecoder()
35843593 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853594 let container = try decoder.singleValueContainer()
35863595 let dateStr = try container.decode(String.self).uppercased()
3596+ guard isValidDate(dateStr) else {
3597+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3598+ }
35873599
35883600 let formatter = DateFormatter()
35893601 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdensity-dense--3bfb4c22cfd0 / quicktype.swift+12 −0
@@ -3049,11 +3049,23 @@ extension WrothyClass {
30493049
30503050 // MARK: - Helper functions for creating encoders and decoders
30513051
3052+private func isValidDate(_ value: String) -> Bool {
3053+ let formatter = DateFormatter()
3054+ formatter.locale = Locale(identifier: "en_US_POSIX")
3055+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3056+ formatter.dateFormat = "u-MM-dd"
3057+ formatter.isLenient = false
3058+ return formatter.date(from: String(value.prefix(10))) != nil
3059+}
3060+
30523061 func newJSONDecoder() -> JSONDecoder {
30533062 let decoder = JSONDecoder()
30543063 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
30553064 let container = try decoder.singleValueContainer()
30563065 let dateStr = try container.decode(String.self).uppercased()
3066+ guard isValidDate(dateStr) else {
3067+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3068+ }
30573069
30583070 let formatter = DateFormatter()
30593071 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+12 −0
@@ -4034,11 +4034,23 @@ extension WrothyClass {
40344034
40354035 // MARK: - Helper functions for creating encoders and decoders
40364036
4037+private func isValidDate(_ value: String) -> Bool {
4038+ let formatter = DateFormatter()
4039+ formatter.locale = Locale(identifier: "en_US_POSIX")
4040+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
4041+ formatter.dateFormat = "u-MM-dd"
4042+ formatter.isLenient = false
4043+ return formatter.date(from: String(value.prefix(10))) != nil
4044+}
4045+
40374046 func newJSONDecoder() -> JSONDecoder {
40384047 let decoder = JSONDecoder()
40394048 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40404049 let container = try decoder.singleValueContainer()
40414050 let dateStr = try container.decode(String.self).uppercased()
4051+ guard isValidDate(dateStr) else {
4052+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
4053+ }
40424054
40434055 let formatter = DateFormatter()
40444056 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftmutable-properties-true--a9feb4120f94 / quicktype.swift+12 −0
@@ -3579,11 +3579,23 @@ extension WrothyClass {
35793579
35803580 // MARK: - Helper functions for creating encoders and decoders
35813581
3582+private func isValidDate(_ value: String) -> Bool {
3583+ let formatter = DateFormatter()
3584+ formatter.locale = Locale(identifier: "en_US_POSIX")
3585+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3586+ formatter.dateFormat = "u-MM-dd"
3587+ formatter.isLenient = false
3588+ return formatter.date(from: String(value.prefix(10))) != nil
3589+}
3590+
35823591 func newJSONDecoder() -> JSONDecoder {
35833592 let decoder = JSONDecoder()
35843593 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853594 let container = try decoder.singleValueContainer()
35863595 let dateStr = try container.decode(String.self).uppercased()
3596+ guard isValidDate(dateStr) else {
3597+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3598+ }
35873599
35883600 let formatter = DateFormatter()
35893601 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+12 −0
@@ -3681,11 +3681,23 @@ extension WrothyClass {
36813681
36823682 // MARK: - Helper functions for creating encoders and decoders
36833683
3684+private func isValidDate(_ value: String) -> Bool {
3685+ let formatter = DateFormatter()
3686+ formatter.locale = Locale(identifier: "en_US_POSIX")
3687+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3688+ formatter.dateFormat = "u-MM-dd"
3689+ formatter.isLenient = false
3690+ return formatter.date(from: String(value.prefix(10))) != nil
3691+}
3692+
36843693 func newJSONDecoder() -> JSONDecoder {
36853694 let decoder = JSONDecoder()
36863695 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
36873696 let container = try decoder.singleValueContainer()
36883697 let dateStr = try container.decode(String.self).uppercased()
3698+ guard isValidDate(dateStr) else {
3699+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3700+ }
36893701
36903702 let formatter = DateFormatter()
36913703 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+12 −0
@@ -3681,11 +3681,23 @@ extension WrothyClass {
36813681
36823682 // MARK: - Helper functions for creating encoders and decoders
36833683
3684+private func isValidDate(_ value: String) -> Bool {
3685+ let formatter = DateFormatter()
3686+ formatter.locale = Locale(identifier: "en_US_POSIX")
3687+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3688+ formatter.dateFormat = "u-MM-dd"
3689+ formatter.isLenient = false
3690+ return formatter.date(from: String(value.prefix(10))) != nil
3691+}
3692+
36843693 func newJSONDecoder() -> JSONDecoder {
36853694 let decoder = JSONDecoder()
36863695 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
36873696 let container = try decoder.singleValueContainer()
36883697 let dateStr = try container.decode(String.self).uppercased()
3698+ guard isValidDate(dateStr) else {
3699+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3700+ }
36893701
36903702 let formatter = DateFormatter()
36913703 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true__struct-or-class-class--265b1fe2e96e / quicktype.swift+12 −0
@@ -4034,11 +4034,23 @@ extension WrothyClass {
40344034
40354035 // MARK: - Helper functions for creating encoders and decoders
40364036
4037+private func isValidDate(_ value: String) -> Bool {
4038+ let formatter = DateFormatter()
4039+ formatter.locale = Locale(identifier: "en_US_POSIX")
4040+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
4041+ formatter.dateFormat = "u-MM-dd"
4042+ formatter.isLenient = false
4043+ return formatter.date(from: String(value.prefix(10))) != nil
4044+}
4045+
40374046 func newJSONDecoder() -> JSONDecoder {
40384047 let decoder = JSONDecoder()
40394048 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40404049 let container = try decoder.singleValueContainer()
40414050 let dateStr = try container.decode(String.self).uppercased()
4051+ guard isValidDate(dateStr) else {
4052+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
4053+ }
40424054
40434055 let formatter = DateFormatter()
40444056 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+12 −0
@@ -3579,11 +3579,23 @@ extension WrothyClass {
35793579
35803580 // MARK: - Helper functions for creating encoders and decoders
35813581
3582+private func isValidDate(_ value: String) -> Bool {
3583+ let formatter = DateFormatter()
3584+ formatter.locale = Locale(identifier: "en_US_POSIX")
3585+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3586+ formatter.dateFormat = "u-MM-dd"
3587+ formatter.isLenient = false
3588+ return formatter.date(from: String(value.prefix(10))) != nil
3589+}
3590+
35823591 func newJSONDecoder() -> JSONDecoder {
35833592 let decoder = JSONDecoder()
35843593 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
35853594 let container = try decoder.singleValueContainer()
35863595 let dateStr = try container.decode(String.self).uppercased()
3596+ guard isValidDate(dateStr) else {
3597+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3598+ }
35873599
35883600 let formatter = DateFormatter()
35893601 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftstruct-or-class-class--238d6c8a12d4 / quicktype.swift+12 −0
@@ -4034,11 +4034,23 @@ extension WrothyClass {
40344034
40354035 // MARK: - Helper functions for creating encoders and decoders
40364036
4037+private func isValidDate(_ value: String) -> Bool {
4038+ let formatter = DateFormatter()
4039+ formatter.locale = Locale(identifier: "en_US_POSIX")
4040+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
4041+ formatter.dateFormat = "u-MM-dd"
4042+ formatter.isLenient = false
4043+ return formatter.date(from: String(value.prefix(10))) != nil
4044+}
4045+
40374046 func newJSONDecoder() -> JSONDecoder {
40384047 let decoder = JSONDecoder()
40394048 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
40404049 let container = try decoder.singleValueContainer()
40414050 let dateStr = try container.decode(String.self).uppercased()
4051+ guard isValidDate(dateStr) else {
4052+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
4053+ }
40424054
40434055 let formatter = DateFormatter()
40444056 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsupport-linux-false--4bd8c552e09a / quicktype.swift+12 −0
@@ -3579,11 +3579,23 @@ extension WrothyClass {
35793579
35803580 // MARK: - Helper functions for creating encoders and decoders
35813581
3582+private func isValidDate(_ value: String) -> Bool {
3583+ let formatter = DateFormatter()
3584+ formatter.locale = Locale(identifier: "en_US_POSIX")
3585+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
3586+ formatter.dateFormat = "u-MM-dd"
3587+ formatter.isLenient = false
3588+ return formatter.date(from: String(value.prefix(10))) != nil
3589+}
3590+
35823591 func newJSONDecoder() -> JSONDecoder {
35833592 let decoder = JSONDecoder()
35843593 if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
35853594 decoder.dateDecodingStrategy = .custom { decoder in
35863595 let dateStr = try decoder.singleValueContainer().decode(String.self).uppercased()
3596+ guard isValidDate(dateStr) else {
3597+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
3598+ }
35873599 let dateData = try JSONEncoder().encode(dateStr)
35883600 let dateDecoder = JSONDecoder()
35893601 dateDecoder.dateDecodingStrategy = .iso8601
Test case

test/inputs/json/priority/combined-enum.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -105,11 +105,23 @@ enum X: String, Codable {
105105
106106 // MARK: - Helper functions for creating encoders and decoders
107107
108+private func isValidDate(_ value: String) -> Bool {
109+ let formatter = DateFormatter()
110+ formatter.locale = Locale(identifier: "en_US_POSIX")
111+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
112+ formatter.dateFormat = "u-MM-dd"
113+ formatter.isLenient = false
114+ return formatter.date(from: String(value.prefix(10))) != nil
115+}
116+
108117 func newJSONDecoder() -> JSONDecoder {
109118 let decoder = JSONDecoder()
110119 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
111120 let container = try decoder.singleValueContainer()
112121 let dateStr = try container.decode(String.self).uppercased()
122+ guard isValidDate(dateStr) else {
123+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
124+ }
113125
114126 let formatter = DateFormatter()
115127 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/direct-recursive.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -76,11 +76,23 @@ extension TopLevel {
7676
7777 // MARK: - Helper functions for creating encoders and decoders
7878
79+private func isValidDate(_ value: String) -> Bool {
80+ let formatter = DateFormatter()
81+ formatter.locale = Locale(identifier: "en_US_POSIX")
82+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
83+ formatter.dateFormat = "u-MM-dd"
84+ formatter.isLenient = false
85+ return formatter.date(from: String(value.prefix(10))) != nil
86+}
87+
7988 func newJSONDecoder() -> JSONDecoder {
8089 let decoder = JSONDecoder()
8190 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8291 let container = try decoder.singleValueContainer()
8392 let dateStr = try container.decode(String.self).uppercased()
93+ guard isValidDate(dateStr) else {
94+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
95+ }
8496
8597 let formatter = DateFormatter()
8698 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/empty-enum.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -95,11 +95,23 @@ extension Foo {
9595
9696 // MARK: - Helper functions for creating encoders and decoders
9797
98+private func isValidDate(_ value: String) -> Bool {
99+ let formatter = DateFormatter()
100+ formatter.locale = Locale(identifier: "en_US_POSIX")
101+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
102+ formatter.dateFormat = "u-MM-dd"
103+ formatter.isLenient = false
104+ return formatter.date(from: String(value.prefix(10))) != nil
105+}
106+
98107 func newJSONDecoder() -> JSONDecoder {
99108 let decoder = JSONDecoder()
100109 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
101110 let container = try decoder.singleValueContainer()
102111 let dateStr = try container.decode(String.self).uppercased()
112+ guard isValidDate(dateStr) else {
113+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
114+ }
103115
104116 let formatter = DateFormatter()
105117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/identifiers.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -346,11 +346,23 @@ extension EmptyClass {
346346
347347 // MARK: - Helper functions for creating encoders and decoders
348348
349+private func isValidDate(_ value: String) -> Bool {
350+ let formatter = DateFormatter()
351+ formatter.locale = Locale(identifier: "en_US_POSIX")
352+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
353+ formatter.dateFormat = "u-MM-dd"
354+ formatter.isLenient = false
355+ return formatter.date(from: String(value.prefix(10))) != nil
356+}
357+
349358 func newJSONDecoder() -> JSONDecoder {
350359 let decoder = JSONDecoder()
351360 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
352361 let container = try decoder.singleValueContainer()
353362 let dateStr = try container.decode(String.self).uppercased()
363+ guard isValidDate(dateStr) else {
364+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
365+ }
354366
355367 let formatter = DateFormatter()
356368 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/issue2680-object-array.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -78,11 +78,23 @@ extension Array where Element == TopLevel.Element {
7878
7979 // MARK: - Helper functions for creating encoders and decoders
8080
81+private func isValidDate(_ value: String) -> Bool {
82+ let formatter = DateFormatter()
83+ formatter.locale = Locale(identifier: "en_US_POSIX")
84+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
85+ formatter.dateFormat = "u-MM-dd"
86+ formatter.isLenient = false
87+ return formatter.date(from: String(value.prefix(10))) != nil
88+}
89+
8190 func newJSONDecoder() -> JSONDecoder {
8291 let decoder = JSONDecoder()
8392 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8493 let container = try decoder.singleValueContainer()
8594 let dateStr = try container.decode(String.self).uppercased()
95+ guard isValidDate(dateStr) else {
96+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
97+ }
8698
8799 let formatter = DateFormatter()
88100 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/issue2680-scalar-array.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -33,11 +33,23 @@ extension Array where Element == TopLevel.Element {
3333
3434 // MARK: - Helper functions for creating encoders and decoders
3535
36+private func isValidDate(_ value: String) -> Bool {
37+ let formatter = DateFormatter()
38+ formatter.locale = Locale(identifier: "en_US_POSIX")
39+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
40+ formatter.dateFormat = "u-MM-dd"
41+ formatter.isLenient = false
42+ return formatter.date(from: String(value.prefix(10))) != nil
43+}
44+
3645 func newJSONDecoder() -> JSONDecoder {
3746 let decoder = JSONDecoder()
3847 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3948 let container = try decoder.singleValueContainer()
4049 let dateStr = try container.decode(String.self).uppercased()
50+ guard isValidDate(dateStr) else {
51+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
52+ }
4153
4254 let formatter = DateFormatter()
4355 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/keywords.json

4 generated files · +48 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -16280,11 +16280,23 @@ extension Yield {
1628016280
1628116281 // MARK: - Helper functions for creating encoders and decoders
1628216282
16283+private func isValidDate(_ value: String) -> Bool {
16284+ let formatter = DateFormatter()
16285+ formatter.locale = Locale(identifier: "en_US_POSIX")
16286+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
16287+ formatter.dateFormat = "u-MM-dd"
16288+ formatter.isLenient = false
16289+ return formatter.date(from: String(value.prefix(10))) != nil
16290+}
16291+
1628316292 func newJSONDecoder() -> JSONDecoder {
1628416293 let decoder = JSONDecoder()
1628516294 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1628616295 let container = try decoder.singleValueContainer()
1628716296 let dateStr = try container.decode(String.self).uppercased()
16297+ guard isValidDate(dateStr) else {
16298+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
16299+ }
1628816300
1628916301 let formatter = DateFormatter()
1629016302 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftobjective-c-support-true__struct-or-class-class--f14372afa3e4 / quicktype.swift+12 −0
@@ -18313,11 +18313,23 @@ extension Yield {
1831318313
1831418314 // MARK: - Helper functions for creating encoders and decoders
1831518315
18316+private func isValidDate(_ value: String) -> Bool {
18317+ let formatter = DateFormatter()
18318+ formatter.locale = Locale(identifier: "en_US_POSIX")
18319+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
18320+ formatter.dateFormat = "u-MM-dd"
18321+ formatter.isLenient = false
18322+ return formatter.date(from: String(value.prefix(10))) != nil
18323+}
18324+
1831618325 func newJSONDecoder() -> JSONDecoder {
1831718326 let decoder = JSONDecoder()
1831818327 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1831918328 let container = try decoder.singleValueContainer()
1832018329 let dateStr = try container.decode(String.self).uppercased()
18330+ guard isValidDate(dateStr) else {
18331+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
18332+ }
1832118333
1832218334 let formatter = DateFormatter()
1832318335 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-equatable--bd9068f466c1 / quicktype.swift+12 −0
@@ -18314,11 +18314,23 @@ extension Yield {
1831418314
1831518315 // MARK: - Helper functions for creating encoders and decoders
1831618316
18317+private func isValidDate(_ value: String) -> Bool {
18318+ let formatter = DateFormatter()
18319+ formatter.locale = Locale(identifier: "en_US_POSIX")
18320+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
18321+ formatter.dateFormat = "u-MM-dd"
18322+ formatter.isLenient = false
18323+ return formatter.date(from: String(value.prefix(10))) != nil
18324+}
18325+
1831718326 func newJSONDecoder() -> JSONDecoder {
1831818327 let decoder = JSONDecoder()
1831918328 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1832018329 let container = try decoder.singleValueContainer()
1832118330 let dateStr = try container.decode(String.self).uppercased()
18331+ guard isValidDate(dateStr) else {
18332+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
18333+ }
1832218334
1832318335 let formatter = DateFormatter()
1832418336 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftsendable-true--1c3982c78639 / quicktype.swift+12 −0
@@ -16280,11 +16280,23 @@ extension Yield {
1628016280
1628116281 // MARK: - Helper functions for creating encoders and decoders
1628216282
16283+private func isValidDate(_ value: String) -> Bool {
16284+ let formatter = DateFormatter()
16285+ formatter.locale = Locale(identifier: "en_US_POSIX")
16286+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
16287+ formatter.dateFormat = "u-MM-dd"
16288+ formatter.isLenient = false
16289+ return formatter.date(from: String(value.prefix(10))) != nil
16290+}
16291+
1628316292 func newJSONDecoder() -> JSONDecoder {
1628416293 let decoder = JSONDecoder()
1628516294 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1628616295 let container = try decoder.singleValueContainer()
1628716296 let dateStr = try container.decode(String.self).uppercased()
16297+ guard isValidDate(dateStr) else {
16298+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
16299+ }
1628816300
1628916301 let formatter = DateFormatter()
1629016302 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/kotlin-enum-class-case-collision.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -83,11 +83,23 @@ extension Array where Element == TopLevel.Element {
8383
8484 // MARK: - Helper functions for creating encoders and decoders
8585
86+private func isValidDate(_ value: String) -> Bool {
87+ let formatter = DateFormatter()
88+ formatter.locale = Locale(identifier: "en_US_POSIX")
89+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
90+ formatter.dateFormat = "u-MM-dd"
91+ formatter.isLenient = false
92+ return formatter.date(from: String(value.prefix(10))) != nil
93+}
94+
8695 func newJSONDecoder() -> JSONDecoder {
8796 let decoder = JSONDecoder()
8897 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8998 let container = try decoder.singleValueContainer()
9099 let dateStr = try container.decode(String.self).uppercased()
100+ guard isValidDate(dateStr) else {
101+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
102+ }
91103
92104 let formatter = DateFormatter()
93105 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/list.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -61,11 +61,23 @@ extension TopLevel {
6161
6262 // MARK: - Helper functions for creating encoders and decoders
6363
64+private func isValidDate(_ value: String) -> Bool {
65+ let formatter = DateFormatter()
66+ formatter.locale = Locale(identifier: "en_US_POSIX")
67+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
68+ formatter.dateFormat = "u-MM-dd"
69+ formatter.isLenient = false
70+ return formatter.date(from: String(value.prefix(10))) != nil
71+}
72+
6473 func newJSONDecoder() -> JSONDecoder {
6574 let decoder = JSONDecoder()
6675 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6776 let container = try decoder.singleValueContainer()
6877 let dateStr = try container.decode(String.self).uppercased()
78+ guard isValidDate(dateStr) else {
79+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
80+ }
6981
7082 let formatter = DateFormatter()
7183 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/name-style.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -75,11 +75,23 @@ extension TopLevel {
7575
7676 // MARK: - Helper functions for creating encoders and decoders
7777
78+private func isValidDate(_ value: String) -> Bool {
79+ let formatter = DateFormatter()
80+ formatter.locale = Locale(identifier: "en_US_POSIX")
81+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
82+ formatter.dateFormat = "u-MM-dd"
83+ formatter.isLenient = false
84+ return formatter.date(from: String(value.prefix(10))) != nil
85+}
86+
7887 func newJSONDecoder() -> JSONDecoder {
7988 let decoder = JSONDecoder()
8089 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8190 let container = try decoder.singleValueContainer()
8291 let dateStr = try container.decode(String.self).uppercased()
92+ guard isValidDate(dateStr) else {
93+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
94+ }
8395
8496 let formatter = DateFormatter()
8597 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/nbl-stats.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1555,11 +1555,23 @@ extension Totallds {
15551555
15561556 // MARK: - Helper functions for creating encoders and decoders
15571557
1558+private func isValidDate(_ value: String) -> Bool {
1559+ let formatter = DateFormatter()
1560+ formatter.locale = Locale(identifier: "en_US_POSIX")
1561+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1562+ formatter.dateFormat = "u-MM-dd"
1563+ formatter.isLenient = false
1564+ return formatter.date(from: String(value.prefix(10))) != nil
1565+}
1566+
15581567 func newJSONDecoder() -> JSONDecoder {
15591568 let decoder = JSONDecoder()
15601569 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
15611570 let container = try decoder.singleValueContainer()
15621571 let dateStr = try container.decode(String.self).uppercased()
1572+ guard isValidDate(dateStr) else {
1573+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1574+ }
15631575
15641576 let formatter = DateFormatter()
15651577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/nested-objects.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/no-classes.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -8,11 +8,23 @@ typealias TopLevel = Int
88
99 // MARK: - Helper functions for creating encoders and decoders
1010
11+private func isValidDate(_ value: String) -> Bool {
12+ let formatter = DateFormatter()
13+ formatter.locale = Locale(identifier: "en_US_POSIX")
14+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
15+ formatter.dateFormat = "u-MM-dd"
16+ formatter.isLenient = false
17+ return formatter.date(from: String(value.prefix(10))) != nil
18+}
19+
1120 func newJSONDecoder() -> JSONDecoder {
1221 let decoder = JSONDecoder()
1322 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1423 let container = try decoder.singleValueContainer()
1524 let dateStr = try container.decode(String.self).uppercased()
25+ guard isValidDate(dateStr) else {
26+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
27+ }
1628
1729 let formatter = DateFormatter()
1830 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/number-map.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/omit-empty.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension Result {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/optional-union.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -106,11 +106,23 @@ extension Array where Element == TopLevel.Element {
106106
107107 // MARK: - Helper functions for creating encoders and decoders
108108
109+private func isValidDate(_ value: String) -> Bool {
110+ let formatter = DateFormatter()
111+ formatter.locale = Locale(identifier: "en_US_POSIX")
112+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
113+ formatter.dateFormat = "u-MM-dd"
114+ formatter.isLenient = false
115+ return formatter.date(from: String(value.prefix(10))) != nil
116+}
117+
109118 func newJSONDecoder() -> JSONDecoder {
110119 let decoder = JSONDecoder()
111120 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
112121 let container = try decoder.singleValueContainer()
113122 let dateStr = try container.decode(String.self).uppercased()
123+ guard isValidDate(dateStr) else {
124+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
125+ }
114126
115127 let formatter = DateFormatter()
116128 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/php-mixed-union.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -144,11 +144,23 @@ extension MixedClass {
144144
145145 // MARK: - Helper functions for creating encoders and decoders
146146
147+private func isValidDate(_ value: String) -> Bool {
148+ let formatter = DateFormatter()
149+ formatter.locale = Locale(identifier: "en_US_POSIX")
150+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
151+ formatter.dateFormat = "u-MM-dd"
152+ formatter.isLenient = false
153+ return formatter.date(from: String(value.prefix(10))) != nil
154+}
155+
147156 func newJSONDecoder() -> JSONDecoder {
148157 let decoder = JSONDecoder()
149158 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
150159 let container = try decoder.singleValueContainer()
151160 let dateStr = try container.decode(String.self).uppercased()
161+ guard isValidDate(dateStr) else {
162+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
163+ }
152164
153165 let formatter = DateFormatter()
154166 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/php-validation.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -67,11 +67,23 @@ extension TopLevel {
6767
6868 // MARK: - Helper functions for creating encoders and decoders
6969
70+private func isValidDate(_ value: String) -> Bool {
71+ let formatter = DateFormatter()
72+ formatter.locale = Locale(identifier: "en_US_POSIX")
73+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
74+ formatter.dateFormat = "u-MM-dd"
75+ formatter.isLenient = false
76+ return formatter.date(from: String(value.prefix(10))) != nil
77+}
78+
7079 func newJSONDecoder() -> JSONDecoder {
7180 let decoder = JSONDecoder()
7281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7382 let container = try decoder.singleValueContainer()
7483 let dateStr = try container.decode(String.self).uppercased()
84+ guard isValidDate(dateStr) else {
85+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
86+ }
7587
7688 let formatter = DateFormatter()
7789 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/recursive.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -975,11 +975,23 @@ extension FormatsClass {
975975
976976 // MARK: - Helper functions for creating encoders and decoders
977977
978+private func isValidDate(_ value: String) -> Bool {
979+ let formatter = DateFormatter()
980+ formatter.locale = Locale(identifier: "en_US_POSIX")
981+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
982+ formatter.dateFormat = "u-MM-dd"
983+ formatter.isLenient = false
984+ return formatter.date(from: String(value.prefix(10))) != nil
985+}
986+
978987 func newJSONDecoder() -> JSONDecoder {
979988 let decoder = JSONDecoder()
980989 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
981990 let container = try decoder.singleValueContainer()
982991 let dateStr = try container.decode(String.self).uppercased()
992+ guard isValidDate(dateStr) else {
993+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
994+ }
983995
984996 let formatter = DateFormatter()
985997 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/simple-identifiers.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -83,11 +83,23 @@ extension TopLevel {
8383
8484 // MARK: - Helper functions for creating encoders and decoders
8585
86+private func isValidDate(_ value: String) -> Bool {
87+ let formatter = DateFormatter()
88+ formatter.locale = Locale(identifier: "en_US_POSIX")
89+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
90+ formatter.dateFormat = "u-MM-dd"
91+ formatter.isLenient = false
92+ return formatter.date(from: String(value.prefix(10))) != nil
93+}
94+
8695 func newJSONDecoder() -> JSONDecoder {
8796 let decoder = JSONDecoder()
8897 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8998 let container = try decoder.singleValueContainer()
9099 let dateStr = try container.decode(String.self).uppercased()
100+ guard isValidDate(dateStr) else {
101+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
102+ }
91103
92104 let formatter = DateFormatter()
93105 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/union-constructor-clash.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -127,11 +127,23 @@ enum Union: Codable {
127127
128128 // MARK: - Helper functions for creating encoders and decoders
129129
130+private func isValidDate(_ value: String) -> Bool {
131+ let formatter = DateFormatter()
132+ formatter.locale = Locale(identifier: "en_US_POSIX")
133+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
134+ formatter.dateFormat = "u-MM-dd"
135+ formatter.isLenient = false
136+ return formatter.date(from: String(value.prefix(10))) != nil
137+}
138+
130139 func newJSONDecoder() -> JSONDecoder {
131140 let decoder = JSONDecoder()
132141 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
133142 let container = try decoder.singleValueContainer()
134143 let dateStr = try container.decode(String.self).uppercased()
144+ guard isValidDate(dateStr) else {
145+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
146+ }
135147
136148 let formatter = DateFormatter()
137149 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/unions.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -173,11 +173,23 @@ extension ZClass {
173173
174174 // MARK: - Helper functions for creating encoders and decoders
175175
176+private func isValidDate(_ value: String) -> Bool {
177+ let formatter = DateFormatter()
178+ formatter.locale = Locale(identifier: "en_US_POSIX")
179+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
180+ formatter.dateFormat = "u-MM-dd"
181+ formatter.isLenient = false
182+ return formatter.date(from: String(value.prefix(10))) != nil
183+}
184+
176185 func newJSONDecoder() -> JSONDecoder {
177186 let decoder = JSONDecoder()
178187 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
179188 let container = try decoder.singleValueContainer()
180189 let dateStr = try container.decode(String.self).uppercased()
190+ guard isValidDate(dateStr) else {
191+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
192+ }
181193
182194 let formatter = DateFormatter()
183195 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/url.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/priority/uuids.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -71,11 +71,23 @@ extension TopLevel {
7171
7272 // MARK: - Helper functions for creating encoders and decoders
7373
74+private func isValidDate(_ value: String) -> Bool {
75+ let formatter = DateFormatter()
76+ formatter.locale = Locale(identifier: "en_US_POSIX")
77+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
78+ formatter.dateFormat = "u-MM-dd"
79+ formatter.isLenient = false
80+ return formatter.date(from: String(value.prefix(10))) != nil
81+}
82+
7483 func newJSONDecoder() -> JSONDecoder {
7584 let decoder = JSONDecoder()
7685 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7786 let container = try decoder.singleValueContainer()
7887 let dateStr = try container.decode(String.self).uppercased()
88+ guard isValidDate(dateStr) else {
89+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
90+ }
7991
8092 let formatter = DateFormatter()
8193 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/bitcoin-block.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -67,11 +67,23 @@ extension TopLevel {
6767
6868 // MARK: - Helper functions for creating encoders and decoders
6969
70+private func isValidDate(_ value: String) -> Bool {
71+ let formatter = DateFormatter()
72+ formatter.locale = Locale(identifier: "en_US_POSIX")
73+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
74+ formatter.dateFormat = "u-MM-dd"
75+ formatter.isLenient = false
76+ return formatter.date(from: String(value.prefix(10))) != nil
77+}
78+
7079 func newJSONDecoder() -> JSONDecoder {
7180 let decoder = JSONDecoder()
7281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7382 let container = try decoder.singleValueContainer()
7483 let dateStr = try container.decode(String.self).uppercased()
84+ guard isValidDate(dateStr) else {
85+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
86+ }
7587
7688 let formatter = DateFormatter()
7789 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/copy-with-property.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/getting-started.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/github-events.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -1659,11 +1659,23 @@ extension Array where Element == TopLevel.Element {
16591659
16601660 // MARK: - Helper functions for creating encoders and decoders
16611661
1662+private func isValidDate(_ value: String) -> Bool {
1663+ let formatter = DateFormatter()
1664+ formatter.locale = Locale(identifier: "en_US_POSIX")
1665+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
1666+ formatter.dateFormat = "u-MM-dd"
1667+ formatter.isLenient = false
1668+ return formatter.date(from: String(value.prefix(10))) != nil
1669+}
1670+
16621671 func newJSONDecoder() -> JSONDecoder {
16631672 let decoder = JSONDecoder()
16641673 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
16651674 let container = try decoder.singleValueContainer()
16661675 let dateStr = try container.decode(String.self).uppercased()
1676+ guard isValidDate(dateStr) else {
1677+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
1678+ }
16671679
16681680 let formatter = DateFormatter()
16691681 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/kitchen-sink.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -310,11 +310,23 @@ extension PurplePerson {
310310
311311 // MARK: - Helper functions for creating encoders and decoders
312312
313+private func isValidDate(_ value: String) -> Bool {
314+ let formatter = DateFormatter()
315+ formatter.locale = Locale(identifier: "en_US_POSIX")
316+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
317+ formatter.dateFormat = "u-MM-dd"
318+ formatter.isLenient = false
319+ return formatter.date(from: String(value.prefix(10))) != nil
320+}
321+
313322 func newJSONDecoder() -> JSONDecoder {
314323 let decoder = JSONDecoder()
315324 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
316325 let container = try decoder.singleValueContainer()
317326 let dateStr = try container.decode(String.self).uppercased()
327+ guard isValidDate(dateStr) else {
328+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
329+ }
318330
319331 let formatter = DateFormatter()
320332 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/null-safe.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -159,11 +159,23 @@ extension Address {
159159
160160 // MARK: - Helper functions for creating encoders and decoders
161161
162+private func isValidDate(_ value: String) -> Bool {
163+ let formatter = DateFormatter()
164+ formatter.locale = Locale(identifier: "en_US_POSIX")
165+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
166+ formatter.dateFormat = "u-MM-dd"
167+ formatter.isLenient = false
168+ return formatter.date(from: String(value.prefix(10))) != nil
169+}
170+
162171 func newJSONDecoder() -> JSONDecoder {
163172 let decoder = JSONDecoder()
164173 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165174 let container = try decoder.singleValueContainer()
166175 let dateStr = try container.decode(String.self).uppercased()
176+ guard isValidDate(dateStr) else {
177+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
178+ }
167179
168180 let formatter = DateFormatter()
169181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/objc-control-characters.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -64,11 +64,23 @@ enum Value: String, Codable {
6464
6565 // MARK: - Helper functions for creating encoders and decoders
6666
67+private func isValidDate(_ value: String) -> Bool {
68+ let formatter = DateFormatter()
69+ formatter.locale = Locale(identifier: "en_US_POSIX")
70+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
71+ formatter.dateFormat = "u-MM-dd"
72+ formatter.isLenient = false
73+ return formatter.date(from: String(value.prefix(10))) != nil
74+}
75+
6776 func newJSONDecoder() -> JSONDecoder {
6877 let decoder = JSONDecoder()
6978 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7079 let container = try decoder.singleValueContainer()
7180 let dateStr = try container.decode(String.self).uppercased()
81+ guard isValidDate(dateStr) else {
82+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
83+ }
7284
7385 let formatter = DateFormatter()
7486 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/pokedex.json

3 generated files · +36 −0
Mswift-sendable-objective-cdefault / quicktype.swift+12 −0
@@ -268,11 +268,23 @@ enum TypeElement: String, Codable, Sendable {
268268
269269 // MARK: - Helper functions for creating encoders and decoders
270270
271+private func isValidDate(_ value: String) -> Bool {
272+ let formatter = DateFormatter()
273+ formatter.locale = Locale(identifier: "en_US_POSIX")
274+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
275+ formatter.dateFormat = "u-MM-dd"
276+ formatter.isLenient = false
277+ return formatter.date(from: String(value.prefix(10))) != nil
278+}
279+
271280 func newJSONDecoder() -> JSONDecoder {
272281 let decoder = JSONDecoder()
273282 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
274283 let container = try decoder.singleValueContainer()
275284 let dateStr = try container.decode(String.self).uppercased()
285+ guard isValidDate(dateStr) else {
286+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
287+ }
276288
277289 let formatter = DateFormatter()
278290 formatter.calendar = Calendar(identifier: .iso8601)
Mswift-sendable-objective-cstruct-or-class-struct--aa0cc2601d8a / quicktype.swift+12 −0
@@ -236,11 +236,23 @@ enum TypeElement: String, Codable, Sendable {
236236
237237 // MARK: - Helper functions for creating encoders and decoders
238238
239+private func isValidDate(_ value: String) -> Bool {
240+ let formatter = DateFormatter()
241+ formatter.locale = Locale(identifier: "en_US_POSIX")
242+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
243+ formatter.dateFormat = "u-MM-dd"
244+ formatter.isLenient = false
245+ return formatter.date(from: String(value.prefix(10))) != nil
246+}
247+
239248 func newJSONDecoder() -> JSONDecoder {
240249 let decoder = JSONDecoder()
241250 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242251 let container = try decoder.singleValueContainer()
243252 let dateStr = try container.decode(String.self).uppercased()
253+ guard isValidDate(dateStr) else {
254+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
255+ }
244256
245257 let formatter = DateFormatter()
246258 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftdefault / quicktype.swift+12 −0
@@ -236,11 +236,23 @@ enum TypeElement: String, Codable {
236236
237237 // MARK: - Helper functions for creating encoders and decoders
238238
239+private func isValidDate(_ value: String) -> Bool {
240+ let formatter = DateFormatter()
241+ formatter.locale = Locale(identifier: "en_US_POSIX")
242+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
243+ formatter.dateFormat = "u-MM-dd"
244+ formatter.isLenient = false
245+ return formatter.date(from: String(value.prefix(10))) != nil
246+}
247+
239248 func newJSONDecoder() -> JSONDecoder {
240249 let decoder = JSONDecoder()
241250 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
242251 let container = try decoder.singleValueContainer()
243252 let dateStr = try container.decode(String.self).uppercased()
253+ guard isValidDate(dateStr) else {
254+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
255+ }
244256
245257 let formatter = DateFormatter()
246258 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/reddit.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -794,11 +794,23 @@ enum Kind: String, Codable {
794794
795795 // MARK: - Helper functions for creating encoders and decoders
796796
797+private func isValidDate(_ value: String) -> Bool {
798+ let formatter = DateFormatter()
799+ formatter.locale = Locale(identifier: "en_US_POSIX")
800+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
801+ formatter.dateFormat = "u-MM-dd"
802+ formatter.isLenient = false
803+ return formatter.date(from: String(value.prefix(10))) != nil
804+}
805+
797806 func newJSONDecoder() -> JSONDecoder {
798807 let decoder = JSONDecoder()
799808 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
800809 let container = try decoder.singleValueContainer()
801810 let dateStr = try container.decode(String.self).uppercased()
811+ guard isValidDate(dateStr) else {
812+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
813+ }
802814
803815 let formatter = DateFormatter()
804816 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/simple-object.json

3 generated files · +36 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftfinal-classes-true__struct-or-class-class--d3c62ec7414d / quicktype.swift+12 −0
@@ -66,11 +66,23 @@ extension TopLevel {
6666
6767 // MARK: - Helper functions for creating encoders and decoders
6868
69+private func isValidDate(_ value: String) -> Bool {
70+ let formatter = DateFormatter()
71+ formatter.locale = Locale(identifier: "en_US_POSIX")
72+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
73+ formatter.dateFormat = "u-MM-dd"
74+ formatter.isLenient = false
75+ return formatter.date(from: String(value.prefix(10))) != nil
76+}
77+
6978 func newJSONDecoder() -> JSONDecoder {
7079 let decoder = JSONDecoder()
7180 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7281 let container = try decoder.singleValueContainer()
7382 let dateStr = try container.decode(String.self).uppercased()
83+ guard isValidDate(dateStr) else {
84+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
85+ }
7486
7587 let formatter = DateFormatter()
7688 formatter.calendar = Calendar(identifier: .iso8601)
Mswiftprotocol-hashable--739b516c7897 / quicktype.swift+12 −0
@@ -65,11 +65,23 @@ extension TopLevel {
6565
6666 // MARK: - Helper functions for creating encoders and decoders
6767
68+private func isValidDate(_ value: String) -> Bool {
69+ let formatter = DateFormatter()
70+ formatter.locale = Locale(identifier: "en_US_POSIX")
71+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
72+ formatter.dateFormat = "u-MM-dd"
73+ formatter.isLenient = false
74+ return formatter.date(from: String(value.prefix(10))) != nil
75+}
76+
6877 func newJSONDecoder() -> JSONDecoder {
6978 let decoder = JSONDecoder()
7079 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7180 let container = try decoder.singleValueContainer()
7281 let dateStr = try container.decode(String.self).uppercased()
82+ guard isValidDate(dateStr) else {
83+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
84+ }
7385
7486 let formatter = DateFormatter()
7587 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/spotify-album.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -527,11 +527,23 @@ extension Item {
527527
528528 // MARK: - Helper functions for creating encoders and decoders
529529
530+private func isValidDate(_ value: String) -> Bool {
531+ let formatter = DateFormatter()
532+ formatter.locale = Locale(identifier: "en_US_POSIX")
533+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
534+ formatter.dateFormat = "u-MM-dd"
535+ formatter.isLenient = false
536+ return formatter.date(from: String(value.prefix(10))) != nil
537+}
538+
530539 func newJSONDecoder() -> JSONDecoder {
531540 let decoder = JSONDecoder()
532541 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
533542 let container = try decoder.singleValueContainer()
534543 let dateStr = try container.decode(String.self).uppercased()
544+ guard isValidDate(dateStr) else {
545+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
546+ }
535547
536548 let formatter = DateFormatter()
537549 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/us-avg-temperatures.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -159,11 +159,23 @@ extension Description {
159159
160160 // MARK: - Helper functions for creating encoders and decoders
161161
162+private func isValidDate(_ value: String) -> Bool {
163+ let formatter = DateFormatter()
164+ formatter.locale = Locale(identifier: "en_US_POSIX")
165+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
166+ formatter.dateFormat = "u-MM-dd"
167+ formatter.isLenient = false
168+ return formatter.date(from: String(value.prefix(10))) != nil
169+}
170+
162171 func newJSONDecoder() -> JSONDecoder {
163172 let decoder = JSONDecoder()
164173 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
165174 let container = try decoder.singleValueContainer()
166175 let dateStr = try container.decode(String.self).uppercased()
176+ guard isValidDate(dateStr) else {
177+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
178+ }
167179
168180 let formatter = DateFormatter()
169181 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/json/samples/us-senators.json

1 generated file · +12 −0
Mswiftdefault / quicktype.swift+12 −0
@@ -459,11 +459,23 @@ enum Title: String, Codable {
459459
460460 // MARK: - Helper functions for creating encoders and decoders
461461
462+private func isValidDate(_ value: String) -> Bool {
463+ let formatter = DateFormatter()
464+ formatter.locale = Locale(identifier: "en_US_POSIX")
465+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
466+ formatter.dateFormat = "u-MM-dd"
467+ formatter.isLenient = false
468+ return formatter.date(from: String(value.prefix(10))) != nil
469+}
470+
462471 func newJSONDecoder() -> JSONDecoder {
463472 let decoder = JSONDecoder()
464473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
465474 let container = try decoder.singleValueContainer()
466475 let dateStr = try container.decode(String.self).uppercased()
476+ guard isValidDate(dateStr) else {
477+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
478+ }
467479
468480 let formatter = DateFormatter()
469481 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/accessors.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -97,11 +97,23 @@ enum Union: Codable {
9797
9898 // MARK: - Helper functions for creating encoders and decoders
9999
100+private func isValidDate(_ value: String) -> Bool {
101+ let formatter = DateFormatter()
102+ formatter.locale = Locale(identifier: "en_US_POSIX")
103+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
104+ formatter.dateFormat = "u-MM-dd"
105+ formatter.isLenient = false
106+ return formatter.date(from: String(value.prefix(10))) != nil
107+}
108+
100109 func newJSONDecoder() -> JSONDecoder {
101110 let decoder = JSONDecoder()
102111 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
103112 let container = try decoder.singleValueContainer()
104113 let dateStr = try container.decode(String.self).uppercased()
114+ guard isValidDate(dateStr) else {
115+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
116+ }
105117
106118 let formatter = DateFormatter()
107119 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/all-of-additional-properties-false.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -74,11 +74,23 @@ enum TypeEnum: String, Codable {
7474
7575 // MARK: - Helper functions for creating encoders and decoders
7676
77+private func isValidDate(_ value: String) -> Bool {
78+ let formatter = DateFormatter()
79+ formatter.locale = Locale(identifier: "en_US_POSIX")
80+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
81+ formatter.dateFormat = "u-MM-dd"
82+ formatter.isLenient = false
83+ return formatter.date(from: String(value.prefix(10))) != nil
84+}
85+
7786 func newJSONDecoder() -> JSONDecoder {
7887 let decoder = JSONDecoder()
7988 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8089 let container = try decoder.singleValueContainer()
8190 let dateStr = try container.decode(String.self).uppercased()
91+ guard isValidDate(dateStr) else {
92+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
93+ }
8294
8395 let formatter = DateFormatter()
8496 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/any.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/bool-string.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -103,11 +103,23 @@ enum UnionWithBool: Codable {
103103
104104 // MARK: - Helper functions for creating encoders and decoders
105105
106+private func isValidDate(_ value: String) -> Bool {
107+ let formatter = DateFormatter()
108+ formatter.locale = Locale(identifier: "en_US_POSIX")
109+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
110+ formatter.dateFormat = "u-MM-dd"
111+ formatter.isLenient = false
112+ return formatter.date(from: String(value.prefix(10))) != nil
113+}
114+
106115 func newJSONDecoder() -> JSONDecoder {
107116 let decoder = JSONDecoder()
108117 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109118 let container = try decoder.singleValueContainer()
110119 let dateStr = try container.decode(String.self).uppercased()
120+ guard isValidDate(dateStr) else {
121+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
122+ }
111123
112124 let formatter = DateFormatter()
113125 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/boolean-subschema.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -63,11 +63,23 @@ extension TopLevel {
6363
6464 // MARK: - Helper functions for creating encoders and decoders
6565
66+private func isValidDate(_ value: String) -> Bool {
67+ let formatter = DateFormatter()
68+ formatter.locale = Locale(identifier: "en_US_POSIX")
69+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
70+ formatter.dateFormat = "u-MM-dd"
71+ formatter.isLenient = false
72+ return formatter.date(from: String(value.prefix(10))) != nil
73+}
74+
6675 func newJSONDecoder() -> JSONDecoder {
6776 let decoder = JSONDecoder()
6877 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6978 let container = try decoder.singleValueContainer()
7079 let dateStr = try container.decode(String.self).uppercased()
80+ guard isValidDate(dateStr) else {
81+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
82+ }
7183
7284 let formatter = DateFormatter()
7385 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/camelCase.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/class-map-union.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -137,11 +137,23 @@ extension UnionClass {
137137
138138 // MARK: - Helper functions for creating encoders and decoders
139139
140+private func isValidDate(_ value: String) -> Bool {
141+ let formatter = DateFormatter()
142+ formatter.locale = Locale(identifier: "en_US_POSIX")
143+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
144+ formatter.dateFormat = "u-MM-dd"
145+ formatter.isLenient = false
146+ return formatter.date(from: String(value.prefix(10))) != nil
147+}
148+
140149 func newJSONDecoder() -> JSONDecoder {
141150 let decoder = JSONDecoder()
142151 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
143152 let container = try decoder.singleValueContainer()
144153 let dateStr = try container.decode(String.self).uppercased()
154+ guard isValidDate(dateStr) else {
155+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
156+ }
145157
146158 let formatter = DateFormatter()
147159 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/class-with-additional.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -79,11 +79,23 @@ enum Map: Codable {
7979
8080 // MARK: - Helper functions for creating encoders and decoders
8181
82+private func isValidDate(_ value: String) -> Bool {
83+ let formatter = DateFormatter()
84+ formatter.locale = Locale(identifier: "en_US_POSIX")
85+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
86+ formatter.dateFormat = "u-MM-dd"
87+ formatter.isLenient = false
88+ return formatter.date(from: String(value.prefix(10))) != nil
89+}
90+
8291 func newJSONDecoder() -> JSONDecoder {
8392 let decoder = JSONDecoder()
8493 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8594 let container = try decoder.singleValueContainer()
8695 let dateStr = try container.decode(String.self).uppercased()
96+ guard isValidDate(dateStr) else {
97+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
98+ }
8799
88100 let formatter = DateFormatter()
89101 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection-enum-nested-comment.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -63,11 +63,23 @@ enum Kind: String, Codable {
6363
6464 // MARK: - Helper functions for creating encoders and decoders
6565
66+private func isValidDate(_ value: String) -> Bool {
67+ let formatter = DateFormatter()
68+ formatter.locale = Locale(identifier: "en_US_POSIX")
69+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
70+ formatter.dateFormat = "u-MM-dd"
71+ formatter.isLenient = false
72+ return formatter.date(from: String(value.prefix(10))) != nil
73+}
74+
6675 func newJSONDecoder() -> JSONDecoder {
6776 let decoder = JSONDecoder()
6877 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6978 let container = try decoder.singleValueContainer()
7079 let dateStr = try container.decode(String.self).uppercased()
80+ guard isValidDate(dateStr) else {
81+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
82+ }
7183
7284 let formatter = DateFormatter()
7385 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection-enum.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -69,11 +69,23 @@ enum Kind: String, Codable {
6969
7070 // MARK: - Helper functions for creating encoders and decoders
7171
72+private func isValidDate(_ value: String) -> Bool {
73+ let formatter = DateFormatter()
74+ formatter.locale = Locale(identifier: "en_US_POSIX")
75+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
76+ formatter.dateFormat = "u-MM-dd"
77+ formatter.isLenient = false
78+ return formatter.date(from: String(value.prefix(10))) != nil
79+}
80+
7281 func newJSONDecoder() -> JSONDecoder {
7382 let decoder = JSONDecoder()
7483 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7584 let container = try decoder.singleValueContainer()
7685 let dateStr = try container.decode(String.self).uppercased()
86+ guard isValidDate(dateStr) else {
87+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
88+ }
7789
7890 let formatter = DateFormatter()
7991 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection-nested-comment.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/comment-injection.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -90,11 +90,23 @@ extension TopLevel {
9090
9191 // MARK: - Helper functions for creating encoders and decoders
9292
93+private func isValidDate(_ value: String) -> Bool {
94+ let formatter = DateFormatter()
95+ formatter.locale = Locale(identifier: "en_US_POSIX")
96+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
97+ formatter.dateFormat = "u-MM-dd"
98+ formatter.isLenient = false
99+ return formatter.date(from: String(value.prefix(10))) != nil
100+}
101+
93102 func newJSONDecoder() -> JSONDecoder {
94103 let decoder = JSONDecoder()
95104 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
96105 let container = try decoder.singleValueContainer()
97106 let dateStr = try container.decode(String.self).uppercased()
107+ guard isValidDate(dateStr) else {
108+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
109+ }
98110
99111 let formatter = DateFormatter()
100112 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/const-non-string.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -71,11 +71,23 @@ enum Kind: String, Codable {
7171
7272 // MARK: - Helper functions for creating encoders and decoders
7373
74+private func isValidDate(_ value: String) -> Bool {
75+ let formatter = DateFormatter()
76+ formatter.locale = Locale(identifier: "en_US_POSIX")
77+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
78+ formatter.dateFormat = "u-MM-dd"
79+ formatter.isLenient = false
80+ return formatter.date(from: String(value.prefix(10))) != nil
81+}
82+
7483 func newJSONDecoder() -> JSONDecoder {
7584 let decoder = JSONDecoder()
7685 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7786 let container = try decoder.singleValueContainer()
7887 let dateStr = try container.decode(String.self).uppercased()
88+ guard isValidDate(dateStr) else {
89+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
90+ }
7991
8092 let formatter = DateFormatter()
8193 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/constructor.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -122,11 +122,23 @@ extension Constructor {
122122
123123 // MARK: - Helper functions for creating encoders and decoders
124124
125+private func isValidDate(_ value: String) -> Bool {
126+ let formatter = DateFormatter()
127+ formatter.locale = Locale(identifier: "en_US_POSIX")
128+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
129+ formatter.dateFormat = "u-MM-dd"
130+ formatter.isLenient = false
131+ return formatter.date(from: String(value.prefix(10))) != nil
132+}
133+
125134 func newJSONDecoder() -> JSONDecoder {
126135 let decoder = JSONDecoder()
127136 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
128137 let container = try decoder.singleValueContainer()
129138 let dateStr = try container.decode(String.self).uppercased()
139+ guard isValidDate(dateStr) else {
140+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
141+ }
130142
131143 let formatter = DateFormatter()
132144 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/cut-enum.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/date-time-or-string.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -87,11 +87,23 @@ enum BarEnum: String, Codable {
8787
8888 // MARK: - Helper functions for creating encoders and decoders
8989
90+private func isValidDate(_ value: String) -> Bool {
91+ let formatter = DateFormatter()
92+ formatter.locale = Locale(identifier: "en_US_POSIX")
93+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
94+ formatter.dateFormat = "u-MM-dd"
95+ formatter.isLenient = false
96+ return formatter.date(from: String(value.prefix(10))) != nil
97+}
98+
9099 func newJSONDecoder() -> JSONDecoder {
91100 let decoder = JSONDecoder()
92101 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
93102 let container = try decoder.singleValueContainer()
94103 let dateStr = try container.decode(String.self).uppercased()
104+ guard isValidDate(dateStr) else {
105+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
106+ }
95107
96108 let formatter = DateFormatter()
97109 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/date-time.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -107,11 +107,23 @@ enum ComplexUnionArrayEnum: String, Codable {
107107
108108 // MARK: - Helper functions for creating encoders and decoders
109109
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
110119 func newJSONDecoder() -> JSONDecoder {
111120 let decoder = JSONDecoder()
112121 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113122 let container = try decoder.singleValueContainer()
114123 let dateStr = try container.decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
115127
116128 let formatter = DateFormatter()
117129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/default-value.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -52,11 +52,23 @@ extension TopLevel {
5252
5353 // MARK: - Helper functions for creating encoders and decoders
5454
55+private func isValidDate(_ value: String) -> Bool {
56+ let formatter = DateFormatter()
57+ formatter.locale = Locale(identifier: "en_US_POSIX")
58+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
59+ formatter.dateFormat = "u-MM-dd"
60+ formatter.isLenient = false
61+ return formatter.date(from: String(value.prefix(10))) != nil
62+}
63+
5564 func newJSONDecoder() -> JSONDecoder {
5665 let decoder = JSONDecoder()
5766 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5867 let container = try decoder.singleValueContainer()
5968 let dateStr = try container.decode(String.self).uppercased()
69+ guard isValidDate(dateStr) else {
70+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
71+ }
6072
6173 let formatter = DateFormatter()
6274 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/description-with-double-quotes.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -52,11 +52,23 @@ extension TopLevel {
5252
5353 // MARK: - Helper functions for creating encoders and decoders
5454
55+private func isValidDate(_ value: String) -> Bool {
56+ let formatter = DateFormatter()
57+ formatter.locale = Locale(identifier: "en_US_POSIX")
58+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
59+ formatter.dateFormat = "u-MM-dd"
60+ formatter.isLenient = false
61+ return formatter.date(from: String(value.prefix(10))) != nil
62+}
63+
5564 func newJSONDecoder() -> JSONDecoder {
5665 let decoder = JSONDecoder()
5766 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5867 let container = try decoder.singleValueContainer()
5968 let dateStr = try container.decode(String.self).uppercased()
69+ guard isValidDate(dateStr) else {
70+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
71+ }
6072
6173 let formatter = DateFormatter()
6274 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/description.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -180,11 +180,23 @@ enum Union: Codable {
180180
181181 // MARK: - Helper functions for creating encoders and decoders
182182
183+private func isValidDate(_ value: String) -> Bool {
184+ let formatter = DateFormatter()
185+ formatter.locale = Locale(identifier: "en_US_POSIX")
186+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
187+ formatter.dateFormat = "u-MM-dd"
188+ formatter.isLenient = false
189+ return formatter.date(from: String(value.prefix(10))) != nil
190+}
191+
183192 func newJSONDecoder() -> JSONDecoder {
184193 let decoder = JSONDecoder()
185194 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
186195 let container = try decoder.singleValueContainer()
187196 let dateStr = try container.decode(String.self).uppercased()
197+ guard isValidDate(dateStr) else {
198+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
199+ }
188200
189201 let formatter = DateFormatter()
190202 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/direct-union.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -162,11 +162,23 @@ enum Anything: Codable {
162162
163163 // MARK: - Helper functions for creating encoders and decoders
164164
165+private func isValidDate(_ value: String) -> Bool {
166+ let formatter = DateFormatter()
167+ formatter.locale = Locale(identifier: "en_US_POSIX")
168+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
169+ formatter.dateFormat = "u-MM-dd"
170+ formatter.isLenient = false
171+ return formatter.date(from: String(value.prefix(10))) != nil
172+}
173+
165174 func newJSONDecoder() -> JSONDecoder {
166175 let decoder = JSONDecoder()
167176 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
168177 let container = try decoder.singleValueContainer()
169178 let dateStr = try container.decode(String.self).uppercased()
179+ guard isValidDate(dateStr) else {
180+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
181+ }
170182
171183 let formatter = DateFormatter()
172184 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/empty-object.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -33,11 +33,23 @@ extension Dictionary where Key == String, Value == JSONAny {
3333
3434 // MARK: - Helper functions for creating encoders and decoders
3535
36+private func isValidDate(_ value: String) -> Bool {
37+ let formatter = DateFormatter()
38+ formatter.locale = Locale(identifier: "en_US_POSIX")
39+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
40+ formatter.dateFormat = "u-MM-dd"
41+ formatter.isLenient = false
42+ return formatter.date(from: String(value.prefix(10))) != nil
43+}
44+
3645 func newJSONDecoder() -> JSONDecoder {
3746 let decoder = JSONDecoder()
3847 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3948 let container = try decoder.singleValueContainer()
4049 let dateStr = try container.decode(String.self).uppercased()
50+ guard isValidDate(dateStr) else {
51+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
52+ }
4153
4254 let formatter = DateFormatter()
4355 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum-large.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -84,11 +84,23 @@ enum Priority: String, Codable {
8484
8585 // MARK: - Helper functions for creating encoders and decoders
8686
87+private func isValidDate(_ value: String) -> Bool {
88+ let formatter = DateFormatter()
89+ formatter.locale = Locale(identifier: "en_US_POSIX")
90+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
91+ formatter.dateFormat = "u-MM-dd"
92+ formatter.isLenient = false
93+ return formatter.date(from: String(value.prefix(10))) != nil
94+}
95+
8796 func newJSONDecoder() -> JSONDecoder {
8897 let decoder = JSONDecoder()
8998 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
9099 let container = try decoder.singleValueContainer()
91100 let dateStr = try container.decode(String.self).uppercased()
101+ guard isValidDate(dateStr) else {
102+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
103+ }
92104
93105 let formatter = DateFormatter()
94106 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum-with-null.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -56,11 +56,23 @@ enum Enum: String, Codable {
5656
5757 // MARK: - Helper functions for creating encoders and decoders
5858
59+private func isValidDate(_ value: String) -> Bool {
60+ let formatter = DateFormatter()
61+ formatter.locale = Locale(identifier: "en_US_POSIX")
62+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
63+ formatter.dateFormat = "u-MM-dd"
64+ formatter.isLenient = false
65+ return formatter.date(from: String(value.prefix(10))) != nil
66+}
67+
5968 func newJSONDecoder() -> JSONDecoder {
6069 let decoder = JSONDecoder()
6170 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6271 let container = try decoder.singleValueContainer()
6372 let dateStr = try container.decode(String.self).uppercased()
73+ guard isValidDate(dateStr) else {
74+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
75+ }
6476
6577 let formatter = DateFormatter()
6678 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum-with-values.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -61,11 +61,23 @@ enum Weekdays: String, Codable {
6161
6262 // MARK: - Helper functions for creating encoders and decoders
6363
64+private func isValidDate(_ value: String) -> Bool {
65+ let formatter = DateFormatter()
66+ formatter.locale = Locale(identifier: "en_US_POSIX")
67+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
68+ formatter.dateFormat = "u-MM-dd"
69+ formatter.isLenient = false
70+ return formatter.date(from: String(value.prefix(10))) != nil
71+}
72+
6473 func newJSONDecoder() -> JSONDecoder {
6574 let decoder = JSONDecoder()
6675 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6776 let container = try decoder.singleValueContainer()
6877 let dateStr = try container.decode(String.self).uppercased()
78+ guard isValidDate(dateStr) else {
79+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
80+ }
6981
7082 let formatter = DateFormatter()
7183 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/enum.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -113,11 +113,23 @@ enum Lvc: String, Codable {
113113
114114 // MARK: - Helper functions for creating encoders and decoders
115115
116+private func isValidDate(_ value: String) -> Bool {
117+ let formatter = DateFormatter()
118+ formatter.locale = Locale(identifier: "en_US_POSIX")
119+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
120+ formatter.dateFormat = "u-MM-dd"
121+ formatter.isLenient = false
122+ return formatter.date(from: String(value.prefix(10))) != nil
123+}
124+
116125 func newJSONDecoder() -> JSONDecoder {
117126 let decoder = JSONDecoder()
118127 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
119128 let container = try decoder.singleValueContainer()
120129 let dateStr = try container.decode(String.self).uppercased()
130+ guard isValidDate(dateStr) else {
131+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
132+ }
121133
122134 let formatter = DateFormatter()
123135 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/fractional-bounds.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/go-schema-pattern-properties.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/haskell-enum-forbidden.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -56,11 +56,23 @@ enum Health: String, Codable {
5656
5757 // MARK: - Helper functions for creating encoders and decoders
5858
59+private func isValidDate(_ value: String) -> Bool {
60+ let formatter = DateFormatter()
61+ formatter.locale = Locale(identifier: "en_US_POSIX")
62+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
63+ formatter.dateFormat = "u-MM-dd"
64+ formatter.isLenient = false
65+ return formatter.date(from: String(value.prefix(10))) != nil
66+}
67+
5968 func newJSONDecoder() -> JSONDecoder {
6069 let decoder = JSONDecoder()
6170 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6271 let container = try decoder.singleValueContainer()
6372 let dateStr = try container.decode(String.self).uppercased()
73+ guard isValidDate(dateStr) else {
74+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
75+ }
6476
6577 let formatter = DateFormatter()
6678 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/id-no-address.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/id-root.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/ie-suffix-singularization.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension Cookie {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/implicit-all-of.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/implicit-class-array-union.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -158,11 +158,23 @@ extension FooClass {
158158
159159 // MARK: - Helper functions for creating encoders and decoders
160160
161+private func isValidDate(_ value: String) -> Bool {
162+ let formatter = DateFormatter()
163+ formatter.locale = Locale(identifier: "en_US_POSIX")
164+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
165+ formatter.dateFormat = "u-MM-dd"
166+ formatter.isLenient = false
167+ return formatter.date(from: String(value.prefix(10))) != nil
168+}
169+
161170 func newJSONDecoder() -> JSONDecoder {
162171 let decoder = JSONDecoder()
163172 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
164173 let container = try decoder.singleValueContainer()
165174 let dateStr = try container.decode(String.self).uppercased()
175+ guard isValidDate(dateStr) else {
176+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
177+ }
166178
167179 let formatter = DateFormatter()
168180 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/implicit-one-of.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-before-number.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -36,11 +36,23 @@ enum TopLevel: Codable {
3636
3737 // MARK: - Helper functions for creating encoders and decoders
3838
39+private func isValidDate(_ value: String) -> Bool {
40+ let formatter = DateFormatter()
41+ formatter.locale = Locale(identifier: "en_US_POSIX")
42+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
43+ formatter.dateFormat = "u-MM-dd"
44+ formatter.isLenient = false
45+ return formatter.date(from: String(value.prefix(10))) != nil
46+}
47+
3948 func newJSONDecoder() -> JSONDecoder {
4049 let decoder = JSONDecoder()
4150 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
4251 let container = try decoder.singleValueContainer()
4352 let dateStr = try container.decode(String.self).uppercased()
53+ guard isValidDate(dateStr) else {
54+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
55+ }
4456
4557 let formatter = DateFormatter()
4658 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-float-union.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -79,11 +79,23 @@ enum Number: Codable {
7979
8080 // MARK: - Helper functions for creating encoders and decoders
8181
82+private func isValidDate(_ value: String) -> Bool {
83+ let formatter = DateFormatter()
84+ formatter.locale = Locale(identifier: "en_US_POSIX")
85+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
86+ formatter.dateFormat = "u-MM-dd"
87+ formatter.isLenient = false
88+ return formatter.date(from: String(value.prefix(10))) != nil
89+}
90+
8291 func newJSONDecoder() -> JSONDecoder {
8392 let decoder = JSONDecoder()
8493 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8594 let container = try decoder.singleValueContainer()
8695 let dateStr = try container.decode(String.self).uppercased()
96+ guard isValidDate(dateStr) else {
97+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
98+ }
8799
88100 let formatter = DateFormatter()
89101 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-string.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -103,11 +103,23 @@ enum UnionWithInt: Codable {
103103
104104 // MARK: - Helper functions for creating encoders and decoders
105105
106+private func isValidDate(_ value: String) -> Bool {
107+ let formatter = DateFormatter()
108+ formatter.locale = Locale(identifier: "en_US_POSIX")
109+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
110+ formatter.dateFormat = "u-MM-dd"
111+ formatter.isLenient = false
112+ return formatter.date(from: String(value.prefix(10))) != nil
113+}
114+
106115 func newJSONDecoder() -> JSONDecoder {
107116 let decoder = JSONDecoder()
108117 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109118 let container = try decoder.singleValueContainer()
110119 let dateStr = try container.decode(String.self).uppercased()
120+ guard isValidDate(dateStr) else {
121+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
122+ }
111123
112124 let formatter = DateFormatter()
113125 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/integer-type.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -83,11 +83,23 @@ extension TopLevel {
8383
8484 // MARK: - Helper functions for creating encoders and decoders
8585
86+private func isValidDate(_ value: String) -> Bool {
87+ let formatter = DateFormatter()
88+ formatter.locale = Locale(identifier: "en_US_POSIX")
89+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
90+ formatter.dateFormat = "u-MM-dd"
91+ formatter.isLenient = false
92+ return formatter.date(from: String(value.prefix(10))) != nil
93+}
94+
8695 func newJSONDecoder() -> JSONDecoder {
8796 let decoder = JSONDecoder()
8897 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8998 let container = try decoder.singleValueContainer()
9099 let dateStr = try container.decode(String.self).uppercased()
100+ guard isValidDate(dateStr) else {
101+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
102+ }
91103
92104 let formatter = DateFormatter()
93105 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/intersection-nested.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/intersection.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ extension Intersection {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/issue2680-top-level-array.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -33,11 +33,23 @@ extension Array where Element == TopLevel.Element {
3333
3434 // MARK: - Helper functions for creating encoders and decoders
3535
36+private func isValidDate(_ value: String) -> Bool {
37+ let formatter = DateFormatter()
38+ formatter.locale = Locale(identifier: "en_US_POSIX")
39+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
40+ formatter.dateFormat = "u-MM-dd"
41+ formatter.isLenient = false
42+ return formatter.date(from: String(value.prefix(10))) != nil
43+}
44+
3645 func newJSONDecoder() -> JSONDecoder {
3746 let decoder = JSONDecoder()
3847 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3948 let container = try decoder.singleValueContainer()
4049 let dateStr = try container.decode(String.self).uppercased()
50+ guard isValidDate(dateStr) else {
51+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
52+ }
4153
4254 let formatter = DateFormatter()
4355 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/keyword-enum.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -387,11 +387,23 @@ enum Enum: String, Codable {
387387
388388 // MARK: - Helper functions for creating encoders and decoders
389389
390+private func isValidDate(_ value: String) -> Bool {
391+ let formatter = DateFormatter()
392+ formatter.locale = Locale(identifier: "en_US_POSIX")
393+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
394+ formatter.dateFormat = "u-MM-dd"
395+ formatter.isLenient = false
396+ return formatter.date(from: String(value.prefix(10))) != nil
397+}
398+
390399 func newJSONDecoder() -> JSONDecoder {
391400 let decoder = JSONDecoder()
392401 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
393402 let container = try decoder.singleValueContainer()
394403 let dateStr = try container.decode(String.self).uppercased()
404+ guard isValidDate(dateStr) else {
405+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
406+ }
395407
396408 let formatter = DateFormatter()
397409 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/keyword-unions.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -24951,11 +24951,23 @@ extension Yield {
2495124951
2495224952 // MARK: - Helper functions for creating encoders and decoders
2495324953
24954+private func isValidDate(_ value: String) -> Bool {
24955+ let formatter = DateFormatter()
24956+ formatter.locale = Locale(identifier: "en_US_POSIX")
24957+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
24958+ formatter.dateFormat = "u-MM-dd"
24959+ formatter.isLenient = false
24960+ return formatter.date(from: String(value.prefix(10))) != nil
24961+}
24962+
2495424963 func newJSONDecoder() -> JSONDecoder {
2495524964 let decoder = JSONDecoder()
2495624965 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
2495724966 let container = try decoder.singleValueContainer()
2495824967 let dateStr = try container.decode(String.self).uppercased()
24968+ guard isValidDate(dateStr) else {
24969+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
24970+ }
2495924971
2496024972 let formatter = DateFormatter()
2496124973 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/light.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -103,11 +103,23 @@ extension LightParams {
103103
104104 // MARK: - Helper functions for creating encoders and decoders
105105
106+private func isValidDate(_ value: String) -> Bool {
107+ let formatter = DateFormatter()
108+ formatter.locale = Locale(identifier: "en_US_POSIX")
109+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
110+ formatter.dateFormat = "u-MM-dd"
111+ formatter.isLenient = false
112+ return formatter.date(from: String(value.prefix(10))) != nil
113+}
114+
106115 func newJSONDecoder() -> JSONDecoder {
107116 let decoder = JSONDecoder()
108117 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109118 let container = try decoder.singleValueContainer()
110119 let dateStr = try container.decode(String.self).uppercased()
120+ guard isValidDate(dateStr) else {
121+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
122+ }
111123
112124 let formatter = DateFormatter()
113125 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/list.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -57,11 +57,23 @@ extension TopLevel {
5757
5858 // MARK: - Helper functions for creating encoders and decoders
5959
60+private func isValidDate(_ value: String) -> Bool {
61+ let formatter = DateFormatter()
62+ formatter.locale = Locale(identifier: "en_US_POSIX")
63+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
64+ formatter.dateFormat = "u-MM-dd"
65+ formatter.isLenient = false
66+ return formatter.date(from: String(value.prefix(10))) != nil
67+}
68+
6069 func newJSONDecoder() -> JSONDecoder {
6170 let decoder = JSONDecoder()
6271 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6372 let container = try decoder.singleValueContainer()
6473 let dateStr = try container.decode(String.self).uppercased()
74+ guard isValidDate(dateStr) else {
75+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
76+ }
6577
6678 let formatter = DateFormatter()
6779 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/min-max-items.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -95,11 +95,23 @@ enum UnionItem: Codable {
9595
9696 // MARK: - Helper functions for creating encoders and decoders
9797
98+private func isValidDate(_ value: String) -> Bool {
99+ let formatter = DateFormatter()
100+ formatter.locale = Locale(identifier: "en_US_POSIX")
101+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
102+ formatter.dateFormat = "u-MM-dd"
103+ formatter.isLenient = false
104+ return formatter.date(from: String(value.prefix(10))) != nil
105+}
106+
98107 func newJSONDecoder() -> JSONDecoder {
99108 let decoder = JSONDecoder()
100109 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
101110 let container = try decoder.singleValueContainer()
102111 let dateStr = try container.decode(String.self).uppercased()
112+ guard isValidDate(dateStr) else {
113+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
114+ }
103115
104116 let formatter = DateFormatter()
105117 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/minmax-integer.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -79,11 +79,23 @@ extension TopLevel {
7979
8080 // MARK: - Helper functions for creating encoders and decoders
8181
82+private func isValidDate(_ value: String) -> Bool {
83+ let formatter = DateFormatter()
84+ formatter.locale = Locale(identifier: "en_US_POSIX")
85+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
86+ formatter.dateFormat = "u-MM-dd"
87+ formatter.isLenient = false
88+ return formatter.date(from: String(value.prefix(10))) != nil
89+}
90+
8291 func newJSONDecoder() -> JSONDecoder {
8392 let decoder = JSONDecoder()
8493 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8594 let container = try decoder.singleValueContainer()
8695 let dateStr = try container.decode(String.self).uppercased()
96+ guard isValidDate(dateStr) else {
97+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
98+ }
8799
88100 let formatter = DateFormatter()
89101 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/minmax.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -79,11 +79,23 @@ extension TopLevel {
7979
8080 // MARK: - Helper functions for creating encoders and decoders
8181
82+private func isValidDate(_ value: String) -> Bool {
83+ let formatter = DateFormatter()
84+ formatter.locale = Locale(identifier: "en_US_POSIX")
85+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
86+ formatter.dateFormat = "u-MM-dd"
87+ formatter.isLenient = false
88+ return formatter.date(from: String(value.prefix(10))) != nil
89+}
90+
8291 func newJSONDecoder() -> JSONDecoder {
8392 let decoder = JSONDecoder()
8493 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8594 let container = try decoder.singleValueContainer()
8695 let dateStr = try container.decode(String.self).uppercased()
96+ guard isValidDate(dateStr) else {
97+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
98+ }
8799
88100 let formatter = DateFormatter()
89101 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/minmaxlength.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -107,11 +107,23 @@ enum InUnion: Codable {
107107
108108 // MARK: - Helper functions for creating encoders and decoders
109109
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
110119 func newJSONDecoder() -> JSONDecoder {
111120 let decoder = JSONDecoder()
112121 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113122 let container = try decoder.singleValueContainer()
114123 let dateStr = try container.decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
115127
116128 let formatter = DateFormatter()
117129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/multi-type-enum.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -99,11 +99,23 @@ enum FooEnum: String, Codable {
9999
100100 // MARK: - Helper functions for creating encoders and decoders
101101
102+private func isValidDate(_ value: String) -> Bool {
103+ let formatter = DateFormatter()
104+ formatter.locale = Locale(identifier: "en_US_POSIX")
105+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
106+ formatter.dateFormat = "u-MM-dd"
107+ formatter.isLenient = false
108+ return formatter.date(from: String(value.prefix(10))) != nil
109+}
110+
102111 func newJSONDecoder() -> JSONDecoder {
103112 let decoder = JSONDecoder()
104113 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
105114 let container = try decoder.singleValueContainer()
106115 let dateStr = try container.decode(String.self).uppercased()
116+ guard isValidDate(dateStr) else {
117+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
118+ }
107119
108120 let formatter = DateFormatter()
109121 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/mutually-recursive.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -128,11 +128,23 @@ extension TopLevel {
128128
129129 // MARK: - Helper functions for creating encoders and decoders
130130
131+private func isValidDate(_ value: String) -> Bool {
132+ let formatter = DateFormatter()
133+ formatter.locale = Locale(identifier: "en_US_POSIX")
134+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
135+ formatter.dateFormat = "u-MM-dd"
136+ formatter.isLenient = false
137+ return formatter.date(from: String(value.prefix(10))) != nil
138+}
139+
131140 func newJSONDecoder() -> JSONDecoder {
132141 let decoder = JSONDecoder()
133142 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
134143 let container = try decoder.singleValueContainer()
135144 let dateStr = try container.decode(String.self).uppercased()
145+ guard isValidDate(dateStr) else {
146+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
147+ }
136148
137149 let formatter = DateFormatter()
138150 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/nested-intersection-union.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -107,11 +107,23 @@ extension Item {
107107
108108 // MARK: - Helper functions for creating encoders and decoders
109109
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
110119 func newJSONDecoder() -> JSONDecoder {
111120 let decoder = JSONDecoder()
112121 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113122 let container = try decoder.singleValueContainer()
114123 let dateStr = try container.decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
115127
116128 let formatter = DateFormatter()
117129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/non-standard-ref.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/nullable-optional-one-of.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -60,11 +60,23 @@ enum Kind: String, Codable {
6060
6161 // MARK: - Helper functions for creating encoders and decoders
6262
63+private func isValidDate(_ value: String) -> Bool {
64+ let formatter = DateFormatter()
65+ formatter.locale = Locale(identifier: "en_US_POSIX")
66+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
67+ formatter.dateFormat = "u-MM-dd"
68+ formatter.isLenient = false
69+ return formatter.date(from: String(value.prefix(10))) != nil
70+}
71+
6372 func newJSONDecoder() -> JSONDecoder {
6473 let decoder = JSONDecoder()
6574 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6675 let container = try decoder.singleValueContainer()
6776 let dateStr = try container.decode(String.self).uppercased()
77+ guard isValidDate(dateStr) else {
78+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
79+ }
6880
6981 let formatter = DateFormatter()
7082 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/object-type-required.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -102,11 +102,23 @@ extension Empty {
102102
103103 // MARK: - Helper functions for creating encoders and decoders
104104
105+private func isValidDate(_ value: String) -> Bool {
106+ let formatter = DateFormatter()
107+ formatter.locale = Locale(identifier: "en_US_POSIX")
108+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
109+ formatter.dateFormat = "u-MM-dd"
110+ formatter.isLenient = false
111+ return formatter.date(from: String(value.prefix(10))) != nil
112+}
113+
105114 func newJSONDecoder() -> JSONDecoder {
106115 let decoder = JSONDecoder()
107116 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
108117 let container = try decoder.singleValueContainer()
109118 let dateStr = try container.decode(String.self).uppercased()
119+ guard isValidDate(dateStr) else {
120+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
121+ }
110122
111123 let formatter = DateFormatter()
112124 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-any.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-const-ref.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -123,11 +123,23 @@ extension Coordinate {
123123
124124 // MARK: - Helper functions for creating encoders and decoders
125125
126+private func isValidDate(_ value: String) -> Bool {
127+ let formatter = DateFormatter()
128+ formatter.locale = Locale(identifier: "en_US_POSIX")
129+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
130+ formatter.dateFormat = "u-MM-dd"
131+ formatter.isLenient = false
132+ return formatter.date(from: String(value.prefix(10))) != nil
133+}
134+
126135 func newJSONDecoder() -> JSONDecoder {
127136 let decoder = JSONDecoder()
128137 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
129138 let container = try decoder.singleValueContainer()
130139 let dateStr = try container.decode(String.self).uppercased()
140+ guard isValidDate(dateStr) else {
141+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
142+ }
131143
132144 let formatter = DateFormatter()
133145 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-constraints.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -67,11 +67,23 @@ extension TopLevel {
6767
6868 // MARK: - Helper functions for creating encoders and decoders
6969
70+private func isValidDate(_ value: String) -> Bool {
71+ let formatter = DateFormatter()
72+ formatter.locale = Locale(identifier: "en_US_POSIX")
73+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
74+ formatter.dateFormat = "u-MM-dd"
75+ formatter.isLenient = false
76+ return formatter.date(from: String(value.prefix(10))) != nil
77+}
78+
7079 func newJSONDecoder() -> JSONDecoder {
7180 let decoder = JSONDecoder()
7281 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7382 let container = try decoder.singleValueContainer()
7483 let dateStr = try container.decode(String.self).uppercased()
84+ guard isValidDate(dateStr) else {
85+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
86+ }
7587
7688 let formatter = DateFormatter()
7789 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-date-time.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -71,11 +71,23 @@ extension TopLevel {
7171
7272 // MARK: - Helper functions for creating encoders and decoders
7373
74+private func isValidDate(_ value: String) -> Bool {
75+ let formatter = DateFormatter()
76+ formatter.locale = Locale(identifier: "en_US_POSIX")
77+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
78+ formatter.dateFormat = "u-MM-dd"
79+ formatter.isLenient = false
80+ return formatter.date(from: String(value.prefix(10))) != nil
81+}
82+
7483 func newJSONDecoder() -> JSONDecoder {
7584 let decoder = JSONDecoder()
7685 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
7786 let container = try decoder.singleValueContainer()
7887 let dateStr = try container.decode(String.self).uppercased()
88+ guard isValidDate(dateStr) else {
89+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
90+ }
7991
8092 let formatter = DateFormatter()
8193 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/optional-enum.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -60,11 +60,23 @@ enum Shortcut: String, Codable {
6060
6161 // MARK: - Helper functions for creating encoders and decoders
6262
63+private func isValidDate(_ value: String) -> Bool {
64+ let formatter = DateFormatter()
65+ formatter.locale = Locale(identifier: "en_US_POSIX")
66+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
67+ formatter.dateFormat = "u-MM-dd"
68+ formatter.isLenient = false
69+ return formatter.date(from: String(value.prefix(10))) != nil
70+}
71+
6372 func newJSONDecoder() -> JSONDecoder {
6473 let decoder = JSONDecoder()
6574 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6675 let container = try decoder.singleValueContainer()
6776 let dateStr = try container.decode(String.self).uppercased()
77+ guard isValidDate(dateStr) else {
78+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
79+ }
6880
6981 let formatter = DateFormatter()
7082 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/pattern.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -107,11 +107,23 @@ extension RegExp {
107107
108108 // MARK: - Helper functions for creating encoders and decoders
109109
110+private func isValidDate(_ value: String) -> Bool {
111+ let formatter = DateFormatter()
112+ formatter.locale = Locale(identifier: "en_US_POSIX")
113+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
114+ formatter.dateFormat = "u-MM-dd"
115+ formatter.isLenient = false
116+ return formatter.date(from: String(value.prefix(10))) != nil
117+}
118+
110119 func newJSONDecoder() -> JSONDecoder {
111120 let decoder = JSONDecoder()
112121 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
113122 let container = try decoder.singleValueContainer()
114123 let dateStr = try container.decode(String.self).uppercased()
124+ guard isValidDate(dateStr) else {
125+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
126+ }
115127
116128 let formatter = DateFormatter()
117129 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/postman-collection.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -104,11 +104,23 @@ extension Response {
104104
105105 // MARK: - Helper functions for creating encoders and decoders
106106
107+private func isValidDate(_ value: String) -> Bool {
108+ let formatter = DateFormatter()
109+ formatter.locale = Locale(identifier: "en_US_POSIX")
110+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
111+ formatter.dateFormat = "u-MM-dd"
112+ formatter.isLenient = false
113+ return formatter.date(from: String(value.prefix(10))) != nil
114+}
115+
107116 func newJSONDecoder() -> JSONDecoder {
108117 let decoder = JSONDecoder()
109118 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
110119 let container = try decoder.singleValueContainer()
111120 let dateStr = try container.decode(String.self).uppercased()
121+ guard isValidDate(dateStr) else {
122+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
123+ }
112124
113125 let formatter = DateFormatter()
114126 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/prefix-items.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -83,11 +83,23 @@ enum Open: Codable {
8383
8484 // MARK: - Helper functions for creating encoders and decoders
8585
86+private func isValidDate(_ value: String) -> Bool {
87+ let formatter = DateFormatter()
88+ formatter.locale = Locale(identifier: "en_US_POSIX")
89+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
90+ formatter.dateFormat = "u-MM-dd"
91+ formatter.isLenient = false
92+ return formatter.date(from: String(value.prefix(10))) != nil
93+}
94+
8695 func newJSONDecoder() -> JSONDecoder {
8796 let decoder = JSONDecoder()
8897 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8998 let container = try decoder.singleValueContainer()
9099 let dateStr = try container.decode(String.self).uppercased()
100+ guard isValidDate(dateStr) else {
101+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
102+ }
91103
92104 let formatter = DateFormatter()
93105 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/recursive-union-flattening.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -347,11 +347,23 @@ enum X: Codable {
347347
348348 // MARK: - Helper functions for creating encoders and decoders
349349
350+private func isValidDate(_ value: String) -> Bool {
351+ let formatter = DateFormatter()
352+ formatter.locale = Locale(identifier: "en_US_POSIX")
353+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
354+ formatter.dateFormat = "u-MM-dd"
355+ formatter.isLenient = false
356+ return formatter.date(from: String(value.prefix(10))) != nil
357+}
358+
350359 func newJSONDecoder() -> JSONDecoder {
351360 let decoder = JSONDecoder()
352361 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
353362 let container = try decoder.singleValueContainer()
354363 let dateStr = try container.decode(String.self).uppercased()
364+ guard isValidDate(dateStr) else {
365+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
366+ }
355367
356368 let formatter = DateFormatter()
357369 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/ref-id-files.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/ref-remote.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -57,11 +57,23 @@ extension TopLevel {
5757
5858 // MARK: - Helper functions for creating encoders and decoders
5959
60+private func isValidDate(_ value: String) -> Bool {
61+ let formatter = DateFormatter()
62+ formatter.locale = Locale(identifier: "en_US_POSIX")
63+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
64+ formatter.dateFormat = "u-MM-dd"
65+ formatter.isLenient = false
66+ return formatter.date(from: String(value.prefix(10))) != nil
67+}
68+
6069 func newJSONDecoder() -> JSONDecoder {
6170 let decoder = JSONDecoder()
6271 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6372 let container = try decoder.singleValueContainer()
6473 let dateStr = try container.decode(String.self).uppercased()
74+ guard isValidDate(dateStr) else {
75+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
76+ }
6577
6678 let formatter = DateFormatter()
6779 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/renaming-bug.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -716,11 +716,23 @@ enum Name: String, Codable {
716716
717717 // MARK: - Helper functions for creating encoders and decoders
718718
719+private func isValidDate(_ value: String) -> Bool {
720+ let formatter = DateFormatter()
721+ formatter.locale = Locale(identifier: "en_US_POSIX")
722+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
723+ formatter.dateFormat = "u-MM-dd"
724+ formatter.isLenient = false
725+ return formatter.date(from: String(value.prefix(10))) != nil
726+}
727+
719728 func newJSONDecoder() -> JSONDecoder {
720729 let decoder = JSONDecoder()
721730 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
722731 let container = try decoder.singleValueContainer()
723732 let dateStr = try container.decode(String.self).uppercased()
733+ guard isValidDate(dateStr) else {
734+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
735+ }
724736
725737 let formatter = DateFormatter()
726738 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/required-draft3.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/required-non-properties.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/required.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/rust-cycle-breaker-union.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -138,11 +138,23 @@ indirect enum Next: Codable {
138138
139139 // MARK: - Helper functions for creating encoders and decoders
140140
141+private func isValidDate(_ value: String) -> Bool {
142+ let formatter = DateFormatter()
143+ formatter.locale = Locale(identifier: "en_US_POSIX")
144+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
145+ formatter.dateFormat = "u-MM-dd"
146+ formatter.isLenient = false
147+ return formatter.date(from: String(value.prefix(10))) != nil
148+}
149+
141150 func newJSONDecoder() -> JSONDecoder {
142151 let decoder = JSONDecoder()
143152 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
144153 let container = try decoder.singleValueContainer()
145154 let dateStr = try container.decode(String.self).uppercased()
155+ guard isValidDate(dateStr) else {
156+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
157+ }
146158
147159 let formatter = DateFormatter()
148160 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/schema-constraints.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -55,11 +55,23 @@ extension TopLevel {
5555
5656 // MARK: - Helper functions for creating encoders and decoders
5757
58+private func isValidDate(_ value: String) -> Bool {
59+ let formatter = DateFormatter()
60+ formatter.locale = Locale(identifier: "en_US_POSIX")
61+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
62+ formatter.dateFormat = "u-MM-dd"
63+ formatter.isLenient = false
64+ return formatter.date(from: String(value.prefix(10))) != nil
65+}
66+
5867 func newJSONDecoder() -> JSONDecoder {
5968 let decoder = JSONDecoder()
6069 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6170 let container = try decoder.singleValueContainer()
6271 let dateStr = try container.decode(String.self).uppercased()
72+ guard isValidDate(dateStr) else {
73+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
74+ }
6375
6476 let formatter = DateFormatter()
6577 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/simple-ref.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -57,11 +57,23 @@ extension TopLevel {
5757
5858 // MARK: - Helper functions for creating encoders and decoders
5959
60+private func isValidDate(_ value: String) -> Bool {
61+ let formatter = DateFormatter()
62+ formatter.locale = Locale(identifier: "en_US_POSIX")
63+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
64+ formatter.dateFormat = "u-MM-dd"
65+ formatter.isLenient = false
66+ return formatter.date(from: String(value.prefix(10))) != nil
67+}
68+
6069 func newJSONDecoder() -> JSONDecoder {
6170 let decoder = JSONDecoder()
6271 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6372 let container = try decoder.singleValueContainer()
6473 let dateStr = try container.decode(String.self).uppercased()
74+ guard isValidDate(dateStr) else {
75+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
76+ }
6577
6678 let formatter = DateFormatter()
6779 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/strict-optional.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -51,11 +51,23 @@ extension TopLevel {
5151
5252 // MARK: - Helper functions for creating encoders and decoders
5353
54+private func isValidDate(_ value: String) -> Bool {
55+ let formatter = DateFormatter()
56+ formatter.locale = Locale(identifier: "en_US_POSIX")
57+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
58+ formatter.dateFormat = "u-MM-dd"
59+ formatter.isLenient = false
60+ return formatter.date(from: String(value.prefix(10))) != nil
61+}
62+
5463 func newJSONDecoder() -> JSONDecoder {
5564 let decoder = JSONDecoder()
5665 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
5766 let container = try decoder.singleValueContainer()
5867 let dateStr = try container.decode(String.self).uppercased()
68+ guard isValidDate(dateStr) else {
69+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
70+ }
5971
6072 let formatter = DateFormatter()
6173 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-array.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -82,11 +82,23 @@ extension Array where Element == TopLevel.Element {
8282
8383 // MARK: - Helper functions for creating encoders and decoders
8484
85+private func isValidDate(_ value: String) -> Bool {
86+ let formatter = DateFormatter()
87+ formatter.locale = Locale(identifier: "en_US_POSIX")
88+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
89+ formatter.dateFormat = "u-MM-dd"
90+ formatter.isLenient = false
91+ return formatter.date(from: String(value.prefix(10))) != nil
92+}
93+
8594 func newJSONDecoder() -> JSONDecoder {
8695 let decoder = JSONDecoder()
8796 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8897 let container = try decoder.singleValueContainer()
8998 let dateStr = try container.decode(String.self).uppercased()
99+ guard isValidDate(dateStr) else {
100+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
101+ }
90102
91103 let formatter = DateFormatter()
92104 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-enum.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -13,11 +13,23 @@ enum TopLevel: String, Codable {
1313
1414 // MARK: - Helper functions for creating encoders and decoders
1515
16+private func isValidDate(_ value: String) -> Bool {
17+ let formatter = DateFormatter()
18+ formatter.locale = Locale(identifier: "en_US_POSIX")
19+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
20+ formatter.dateFormat = "u-MM-dd"
21+ formatter.isLenient = false
22+ return formatter.date(from: String(value.prefix(10))) != nil
23+}
24+
1625 func newJSONDecoder() -> JSONDecoder {
1726 let decoder = JSONDecoder()
1827 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1928 let container = try decoder.singleValueContainer()
2029 let dateStr = try container.decode(String.self).uppercased()
30+ guard isValidDate(dateStr) else {
31+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
32+ }
2133
2234 let formatter = DateFormatter()
2335 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-primitive-array.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -33,11 +33,23 @@ extension Array where Element == TopLevel.Element {
3333
3434 // MARK: - Helper functions for creating encoders and decoders
3535
36+private func isValidDate(_ value: String) -> Bool {
37+ let formatter = DateFormatter()
38+ formatter.locale = Locale(identifier: "en_US_POSIX")
39+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
40+ formatter.dateFormat = "u-MM-dd"
41+ formatter.isLenient = false
42+ return formatter.date(from: String(value.prefix(10))) != nil
43+}
44+
3645 func newJSONDecoder() -> JSONDecoder {
3746 let decoder = JSONDecoder()
3847 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
3948 let container = try decoder.singleValueContainer()
4049 let dateStr = try container.decode(String.self).uppercased()
50+ guard isValidDate(dateStr) else {
51+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
52+ }
4153
4254 let formatter = DateFormatter()
4355 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/top-level-primitive.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -8,11 +8,23 @@ typealias TopLevel = Double
88
99 // MARK: - Helper functions for creating encoders and decoders
1010
11+private func isValidDate(_ value: String) -> Bool {
12+ let formatter = DateFormatter()
13+ formatter.locale = Locale(identifier: "en_US_POSIX")
14+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
15+ formatter.dateFormat = "u-MM-dd"
16+ formatter.isLenient = false
17+ return formatter.date(from: String(value.prefix(10))) != nil
18+}
19+
1120 func newJSONDecoder() -> JSONDecoder {
1221 let decoder = JSONDecoder()
1322 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1423 let container = try decoder.singleValueContainer()
1524 let dateStr = try container.decode(String.self).uppercased()
25+ guard isValidDate(dateStr) else {
26+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
27+ }
1628
1729 let formatter = DateFormatter()
1830 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/tuple.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -79,11 +79,23 @@ enum Tuple: Codable {
7979
8080 // MARK: - Helper functions for creating encoders and decoders
8181
82+private func isValidDate(_ value: String) -> Bool {
83+ let formatter = DateFormatter()
84+ formatter.locale = Locale(identifier: "en_US_POSIX")
85+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
86+ formatter.dateFormat = "u-MM-dd"
87+ formatter.isLenient = false
88+ return formatter.date(from: String(value.prefix(10))) != nil
89+}
90+
8291 func newJSONDecoder() -> JSONDecoder {
8392 let decoder = JSONDecoder()
8493 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
8594 let container = try decoder.singleValueContainer()
8695 let dateStr = try container.decode(String.self).uppercased()
96+ guard isValidDate(dateStr) else {
97+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
98+ }
8799
88100 let formatter = DateFormatter()
89101 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/unevaluated-properties.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -257,11 +257,23 @@ extension Item {
257257
258258 // MARK: - Helper functions for creating encoders and decoders
259259
260+private func isValidDate(_ value: String) -> Bool {
261+ let formatter = DateFormatter()
262+ formatter.locale = Locale(identifier: "en_US_POSIX")
263+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
264+ formatter.dateFormat = "u-MM-dd"
265+ formatter.isLenient = false
266+ return formatter.date(from: String(value.prefix(10))) != nil
267+}
268+
260269 func newJSONDecoder() -> JSONDecoder {
261270 let decoder = JSONDecoder()
262271 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
263272 let container = try decoder.singleValueContainer()
264273 let dateStr = try container.decode(String.self).uppercased()
274+ guard isValidDate(dateStr) else {
275+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
276+ }
265277
266278 let formatter = DateFormatter()
267279 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/unicode-codepoint-length.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -59,11 +59,23 @@ extension TopLevel {
5959
6060 // MARK: - Helper functions for creating encoders and decoders
6161
62+private func isValidDate(_ value: String) -> Bool {
63+ let formatter = DateFormatter()
64+ formatter.locale = Locale(identifier: "en_US_POSIX")
65+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
66+ formatter.dateFormat = "u-MM-dd"
67+ formatter.isLenient = false
68+ return formatter.date(from: String(value.prefix(10))) != nil
69+}
70+
6271 func newJSONDecoder() -> JSONDecoder {
6372 let decoder = JSONDecoder()
6473 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
6574 let container = try decoder.singleValueContainer()
6675 let dateStr = try container.decode(String.self).uppercased()
76+ guard isValidDate(dateStr) else {
77+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
78+ }
6779
6880 let formatter = DateFormatter()
6981 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/union-int-double.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -86,11 +86,23 @@ enum Value: Codable {
8686
8787 // MARK: - Helper functions for creating encoders and decoders
8888
89+private func isValidDate(_ value: String) -> Bool {
90+ let formatter = DateFormatter()
91+ formatter.locale = Locale(identifier: "en_US_POSIX")
92+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
93+ formatter.dateFormat = "u-MM-dd"
94+ formatter.isLenient = false
95+ return formatter.date(from: String(value.prefix(10))) != nil
96+}
97+
8998 func newJSONDecoder() -> JSONDecoder {
9099 let decoder = JSONDecoder()
91100 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
92101 let container = try decoder.singleValueContainer()
93102 let dateStr = try container.decode(String.self).uppercased()
103+ guard isValidDate(dateStr) else {
104+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
105+ }
94106
95107 let formatter = DateFormatter()
96108 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/union-list.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -123,11 +123,23 @@ indirect enum UnionList: Codable {
123123
124124 // MARK: - Helper functions for creating encoders and decoders
125125
126+private func isValidDate(_ value: String) -> Bool {
127+ let formatter = DateFormatter()
128+ formatter.locale = Locale(identifier: "en_US_POSIX")
129+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
130+ formatter.dateFormat = "u-MM-dd"
131+ formatter.isLenient = false
132+ return formatter.date(from: String(value.prefix(10))) != nil
133+}
134+
126135 func newJSONDecoder() -> JSONDecoder {
127136 let decoder = JSONDecoder()
128137 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
129138 let container = try decoder.singleValueContainer()
130139 let dateStr = try container.decode(String.self).uppercased()
140+ guard isValidDate(dateStr) else {
141+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
142+ }
131143
132144 let formatter = DateFormatter()
133145 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/union.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -86,11 +86,23 @@ extension Array where Element == TopLevel.Element {
8686
8787 // MARK: - Helper functions for creating encoders and decoders
8888
89+private func isValidDate(_ value: String) -> Bool {
90+ let formatter = DateFormatter()
91+ formatter.locale = Locale(identifier: "en_US_POSIX")
92+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
93+ formatter.dateFormat = "u-MM-dd"
94+ formatter.isLenient = false
95+ return formatter.date(from: String(value.prefix(10))) != nil
96+}
97+
8998 func newJSONDecoder() -> JSONDecoder {
9099 let decoder = JSONDecoder()
91100 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
92101 let container = try decoder.singleValueContainer()
93102 let dateStr = try container.decode(String.self).uppercased()
103+ guard isValidDate(dateStr) else {
104+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
105+ }
94106
95107 let formatter = DateFormatter()
96108 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/uuid.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -103,11 +103,23 @@ enum UnionWithEnumEnum: String, Codable {
103103
104104 // MARK: - Helper functions for creating encoders and decoders
105105
106+private func isValidDate(_ value: String) -> Bool {
107+ let formatter = DateFormatter()
108+ formatter.locale = Locale(identifier: "en_US_POSIX")
109+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
110+ formatter.dateFormat = "u-MM-dd"
111+ formatter.isLenient = false
112+ return formatter.date(from: String(value.prefix(10))) != nil
113+}
114+
106115 func newJSONDecoder() -> JSONDecoder {
107116 let decoder = JSONDecoder()
108117 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
109118 let container = try decoder.singleValueContainer()
110119 let dateStr = try container.decode(String.self).uppercased()
120+ guard isValidDate(dateStr) else {
121+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
122+ }
111123
112124 let formatter = DateFormatter()
113125 formatter.calendar = Calendar(identifier: .iso8601)
Test case

test/inputs/schema/vega-lite.schema

1 generated file · +12 −0
Mschema-swiftdefault / quicktype.swift+12 −0
@@ -10376,11 +10376,23 @@ extension Repeat {
1037610376
1037710377 // MARK: - Helper functions for creating encoders and decoders
1037810378
10379+private func isValidDate(_ value: String) -> Bool {
10380+ let formatter = DateFormatter()
10381+ formatter.locale = Locale(identifier: "en_US_POSIX")
10382+ formatter.timeZone = TimeZone(secondsFromGMT: 0)
10383+ formatter.dateFormat = "u-MM-dd"
10384+ formatter.isLenient = false
10385+ return formatter.date(from: String(value.prefix(10))) != nil
10386+}
10387+
1037910388 func newJSONDecoder() -> JSONDecoder {
1038010389 let decoder = JSONDecoder()
1038110390 decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
1038210391 let container = try decoder.singleValueContainer()
1038310392 let dateStr = try container.decode(String.self).uppercased()
10393+ guard isValidDate(dateStr) else {
10394+ throw DecodingError.dataCorrupted(.init(codingPath: decoder.codingPath, debugDescription: "Invalid date"))
10395+ }
1038410396
1038510397 let formatter = DateFormatter()
1038610398 formatter.calendar = Calendar(identifier: .iso8601)
No generated files match these filters.