oliyh / martian

The HTTP abstraction library for Clojure/script, supporting OpenAPI, Swagger, Schema, re-frame and more
MIT License
526 stars 45 forks source link

StackOverflow exception due to recursion when parsing kubernetes swagger.json #71

Closed mks-m closed 4 years ago

mks-m commented 4 years ago

schema link: https://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/swagger.json

reproduction steps:

(require '[cheshire.core :as json])
(require '[martian.swagger :refer [swagger->handlers]])
(-> "test-resources/k8s.json"
    slurp
    json/parse-string
    keywordize-keys
    swagger->handlers)

recursion is hit when parsing schema for $refs, here's a (println $ref) in martian.schema.make-schema of what's recursed:

make schema for ref #/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON
make schema for ref #/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool
make schema for ref #/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps
make schema for ref #/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON
make schema for ref #/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool
make schema for ref #/definitions/io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps
...
oliyh commented 4 years ago

Hi,

Thanks for reporting this and the excellent reproduction steps. I don't think I ever considered that a schema could be mutually recursive.

I'm not entirely sure when I'll have time to work on this so if you're interested I'd gladly accept a PR.

Thanks