fastify / fastify/fast-json-stringify
Multiple fields with anyOf and self ref causes Maximum call stack size exceeded
- Dominant language
- JavaScript
- Stars
- 3.7k
- Forks
- 226
- Avg merge
- 1d 59m
- Merged PRs (30d)
- 3
Description
### Prerequisites
- [X] I have written a descriptive issue title
- [X] I have searched existing issues to ensure the bug has not already been reported
### Fastify version
4.28.0 (latest)
### Plugin version
5.16.1 (latest)
### Node.js version
20.11.0 (LTS)
### Operating system
macOS Sonoma 14.5
### Description
When defining a schema with at least two anyOf fields or oneOf fields with self ref like so :
```
import fastJson from 'fast-json-stringify';
const schema = {
$schema: 'http://json-schema.org/draft-07/schema#',
type: 'object',
properties: {
field: { type: 'string' },
field1: { anyOf: [{ $ref: '#' }, { type: 'null' }] },
field2: { anyOf: [{ $ref: '#' }, { type: 'null' }] },
},
};
fastJson(schema.valueOf());
```
I'm getting this following error :
```
RangeError: Maximum call stack size exceeded
at RefResolver.#addSchema (../../node_modules/.pnpm/json-schema-ref-resolver@1.0.1/node_modules/json-schema-ref-resolver/index.js:143:14)
at RefResolver.#addSchema (../../node_modules/.pnpm/json-schema-ref-resolver@1.0.1/node_modules/json-schema-ref-resolver/index.js:165:24)
at RefResolver.#addSchema (../../node_modules/.pnpm/json-schema-ref-resolver@1.0.1/node_modules/json-schema-ref-resolver/index.js:165:24)
at RefResolver.#addSchema (../../node_modules/.pnpm/json-schema-ref-resolver@1.0.1/node_modules/json-schema-ref-resolver/index.js:165:24)
at RefResolver.#addSchema (../../node_modules/.pnpm/json-schema-ref-resolver@1.0.1/node_modules/json-schema-ref-resolver/index.js:165:24)
at RefResolver.addSchema (../../node_modules/.pnpm/json-schema-ref-resolver@1.0.1/node_modules/json-schema-ref-resolver/index.js:30:20)
at mergeLocations (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:433:23)
at buildOneOf (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:868:24)
at buildValue (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:979:12)
at buildInnerObject (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:380:11)
at buildObject (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:501:9)
at buildSingleTypeSerializer (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:768:24)
at buildValue (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:1010:13)
at buildOneOf (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:874:26)
at buildValue (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify/index.js:979:12)
at buildInnerObject (../../node_modules/.pnpm/fast-json-stringify@5.16.1/node_modules/fast-json-stringify
```
(output truncated for readability)
Fastify fails to start when using this schema in routes
Is this kind of schema possible ? in my case, anyOf / oneOf + self reference & null are required.
Contributor guide
Assessment
This issue has not been assessed yet.