rjsf-team / react-jsonschema-form

A React component for building Web forms from JSON Schema.
https://rjsf-team.github.io/react-jsonschema-form/
Apache License 2.0
14.31k stars 2.19k forks source link

Recursive json-schema definition causes the browser to hang and eventually stack overflow #3907

Open estk opened 1 year ago

estk commented 1 year ago

Prerequisites

What theme are you using?

core

Version

5.x

Current Behavior

Schema:

{
  "title": "A registration form",
  "description": "A simple form example.",
  "type": "object",
  "properties": {
    "child": {
      "$ref": "#"
    }
  }
}

Expected Behavior

Not to hang aka eventually stack overflow

Steps To Reproduce

Paste that schema into the playground, that schema is a simplification of what happens when I attempt to use the draft-07 json-schema meta-schema.

Environment

N/A

Anything else?

@heath-freenome , as requested in #3560. I dont really know anything about react anymore, but just poking around for a bit, the Form seems to be trying to render a recursive reference. It seems like the correct behavior should either be an error something like: "Hey, we don't allow recursive references", or just build the feature which marks definitions as seen, which may require a bit of a change in strat from DFS to BFS of the schema tree.

Also, im not sure if its a goal of this project, but it seems to me some good test cases are actually the json-schema meta-schemas. But I recon that is a separate issue altogether.

nickgros commented 1 year ago

@estk Thanks for creating a separate issue. At this time, we think this is an uncommon edge case. There are likely workarounds by referencing defined objects. That said, I do agree that we should prevent the infinite recursion/stack overflow issue and probably test against the JSONSchema meta-schemas. For now, since we don't have a real use case, we're going to mark this as help-wanted and re-evaluate if something else comes up.

nickgros commented 1 day ago

See also #4262