Commit 6c01290
openapi3: enforce unique required entries and unique tag names in Validate() (getkin#1203)
* openapi3: enforce unique required entries and unique tag names in Validate()
Two spec MUSTs that Validate() did not check (getkin#1200):
- The elements of a schema's `required` array MUST be unique (JSON Schema
2020-12 §6.5.3 for OAS 3.1, draft-04 for OAS 3.0). schema.validate now
returns DuplicateRequiredFieldError on a repeat.
- Each tag name in the document-root `tags` list MUST be unique (OpenAPI
Object). Tags.Validate now emits DuplicateTagError on a repeat.
Both follow the existing Duplicate* cluster pattern (cf. DuplicateParameterError)
and carry Origin when the document was loaded with IncludeOrigin.
This is a behavior change: documents carrying these duplicates that passed
Validate() before now fail. No apis-guru golden fixture changed (the corpus
trips neither check).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* openapi3: regenerate .github/docs for the new error types
go doc dump (docs.sh) now lists DuplicateRequiredFieldError and
DuplicateTagError, which the CI `git diff --exit-code` gate after generation
requires to be committed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* openapi3: drop redundant else in tag uniqueness check
Re-inserting an existing key into the seen set is a no-op, so the seen update
can run unconditionally after the duplicate check instead of in an else.
No behavior change. (review feedback)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 2222e35 commit 6c01290
5 files changed
Lines changed: 118 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
608 | 608 | | |
609 | 609 | | |
610 | 610 | | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
611 | 636 | | |
612 | 637 | | |
613 | 638 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1406 | 1406 | | |
1407 | 1407 | | |
1408 | 1408 | | |
| 1409 | + | |
| 1410 | + | |
| 1411 | + | |
| 1412 | + | |
| 1413 | + | |
| 1414 | + | |
| 1415 | + | |
| 1416 | + | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
1409 | 1421 | | |
1410 | 1422 | | |
1411 | 1423 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
26 | 30 | | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
27 | 39 | | |
28 | 40 | | |
29 | 41 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
535 | 535 | | |
536 | 536 | | |
537 | 537 | | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
538 | 567 | | |
539 | 568 | | |
540 | 569 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2127 | 2127 | | |
2128 | 2128 | | |
2129 | 2129 | | |
| 2130 | + | |
| 2131 | + | |
| 2132 | + | |
| 2133 | + | |
| 2134 | + | |
| 2135 | + | |
| 2136 | + | |
| 2137 | + | |
| 2138 | + | |
| 2139 | + | |
| 2140 | + | |
| 2141 | + | |
| 2142 | + | |
| 2143 | + | |
| 2144 | + | |
| 2145 | + | |
| 2146 | + | |
| 2147 | + | |
| 2148 | + | |
| 2149 | + | |
| 2150 | + | |
| 2151 | + | |
| 2152 | + | |
| 2153 | + | |
| 2154 | + | |
| 2155 | + | |
| 2156 | + | |
| 2157 | + | |
| 2158 | + | |
| 2159 | + | |
| 2160 | + | |
| 2161 | + | |
| 2162 | + | |
| 2163 | + | |
| 2164 | + | |
| 2165 | + | |
| 2166 | + | |
| 2167 | + | |
| 2168 | + | |
| 2169 | + | |
2130 | 2170 | | |
2131 | 2171 | | |
2132 | 2172 | | |
| |||
0 commit comments