Skip to content

Commit

Permalink
Revert "openapi3: fix an infinite loop that may have been introduced in
Browse files Browse the repository at this point in the history
getkin#700 (getkin#768)"

This reverts commit 47d329d.
  • Loading branch information
ShouheiNishi committed Aug 9, 2023
1 parent 5a6f97e commit e0d1375
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 33 deletions.
25 changes: 1 addition & 24 deletions openapi3/issue542_test.go
Expand Up @@ -7,31 +7,8 @@ import (
)

func TestIssue542(t *testing.T) {
spec := []byte(`
openapi: '3.0.0'
info:
version: '1.0.0'
title: Swagger Petstore
license:
name: MIT
servers:
- url: http://petstore.swagger.io/v1
paths: {}
components:
schemas:
Cat:
anyOf:
- $ref: '#/components/schemas/Kitten'
- type: object
Kitten:
type: string
`[1:])

sl := NewLoader()

doc, err := sl.LoadFromData(spec)
require.NoError(t, err)

doc.Validate(sl.Context)
_, err := sl.LoadFromFile("testdata/issue542.yml")
require.NoError(t, err)
}
11 changes: 2 additions & 9 deletions openapi3/issue615_test.go
Expand Up @@ -10,14 +10,10 @@ import (

func TestIssue615(t *testing.T) {
{
var old int
old, openapi3.CircularReferenceCounter = openapi3.CircularReferenceCounter, 1
defer func() { openapi3.CircularReferenceCounter = old }()

loader := openapi3.NewLoader()
loader.IsExternalRefsAllowed = true
_, err := loader.LoadFromFile("testdata/recursiveRef/issue615.yml")
require.ErrorContains(t, err, openapi3.CircularReferenceError)
require.NoError(t, err)
}

var old int
Expand All @@ -26,9 +22,6 @@ func TestIssue615(t *testing.T) {

loader := openapi3.NewLoader()
loader.IsExternalRefsAllowed = true
doc, err := loader.LoadFromFile("testdata/recursiveRef/issue615.yml")
require.NoError(t, err)

doc.Validate(loader.Context)
_, err := loader.LoadFromFile("testdata/recursiveRef/issue615.yml")
require.NoError(t, err)
}
12 changes: 12 additions & 0 deletions openapi3/loader.go
Expand Up @@ -504,6 +504,7 @@ func (loader *Loader) resolveHeaderRef(doc *T, component *HeaderRef, documentPat
return err
}
component.Value = resolved.Value
return nil
}
}
value := component.Value
Expand Down Expand Up @@ -551,6 +552,7 @@ func (loader *Loader) resolveParameterRef(doc *T, component *ParameterRef, docum
return err
}
component.Value = resolved.Value
return nil
}
}
value := component.Value
Expand Down Expand Up @@ -607,6 +609,7 @@ func (loader *Loader) resolveRequestBodyRef(doc *T, component *RequestBodyRef, d
return err
}
component.Value = resolved.Value
return nil
}
}
value := component.Value
Expand Down Expand Up @@ -671,6 +674,7 @@ func (loader *Loader) resolveResponseRef(doc *T, component *ResponseRef, documen
return err
}
component.Value = resolved.Value
return nil
}
}
value := component.Value
Expand Down Expand Up @@ -753,6 +757,7 @@ func (loader *Loader) resolveSchemaRef(doc *T, component *SchemaRef, documentPat
return err
}
component.Value = resolved.Value
return nil
}
if loader.visitedSchema == nil {
loader.visitedSchema = make(map[*Schema]struct{})
Expand Down Expand Up @@ -834,6 +839,7 @@ func (loader *Loader) resolveSecuritySchemeRef(doc *T, component *SecurityScheme
return err
}
component.Value = resolved.Value
return nil
}
}
return nil
Expand Down Expand Up @@ -870,6 +876,7 @@ func (loader *Loader) resolveExampleRef(doc *T, component *ExampleRef, documentP
return err
}
component.Value = resolved.Value
return nil
}
}
return nil
Expand Down Expand Up @@ -906,6 +913,7 @@ func (loader *Loader) resolveCallbackRef(doc *T, component *CallbackRef, documen
return err
}
component.Value = resolved.Value
return nil
}
}
value := component.Value
Expand Down Expand Up @@ -952,6 +960,7 @@ func (loader *Loader) resolveLinkRef(doc *T, component *LinkRef, documentPath *u
return err
}
component.Value = resolved.Value
return nil
}
}
return nil
Expand Down Expand Up @@ -993,7 +1002,10 @@ func (loader *Loader) resolvePathItemRef(doc *T, pathItem *PathItem, documentPat
}
pathItem.Ref = ref
}
return loader.resolvePathItemRefContinued(doc, pathItem, documentPath)
}

func (loader *Loader) resolvePathItemRefContinued(doc *T, pathItem *PathItem, documentPath *url.URL) (err error) {
for _, parameter := range pathItem.Parameters {
if err = loader.resolveParameterRef(doc, parameter, documentPath); err != nil {
return
Expand Down
43 changes: 43 additions & 0 deletions openapi3/testdata/issue542.yml
@@ -0,0 +1,43 @@
openapi: "3.0.0"
info:
version: 1.0.0
title: Swagger Petstore
license:
name: MIT
servers:
- url: http://petstore.swagger.io/v1
paths: {}
#paths:
# /pets:
# patch:
# requestBody:
# content:
# application/json:
# schema:
# oneOf:
# - $ref: '#/components/schemas/Cat'
# - $ref: '#/components/schemas/Kitten'
# discriminator:
# propertyName: pet_type
# responses:
# '200':
# description: Updated
components:
schemas:
Cat:
anyOf:
- $ref: "#/components/schemas/Kitten"
- type: object
# properties:
# hunts:
# type: boolean
# age:
# type: integer
# offspring:
Kitten:
$ref: "#/components/schemas/Cat" #ko

# type: string #ok

# allOf: #ko
# - $ref: '#/components/schemas/Cat'

0 comments on commit e0d1375

Please sign in to comment.