OpenAPITools / OpenAPITools/openapi-diff
Stackoverflow error with cyclic references involving allOf
Personne n'a encore pris cette issue.
- Langage dominant
- Java
- Étoiles
- 1.1k
- Forks
- 190
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
Given this schema definition
openapi: 3.0.1
info:
title: recursive test
version: '1.0'
servers:
- url: 'http://localhost:8000/'
paths:
/ping:
get:
operationId: ping
responses:
'200':
description: OK
content:
text/plain:
schema:
$ref: '#/components/schemas/B'
components:
schemas:
B:
type: object
properties:
message:
type: string
message2:
type: string
details:
type: array
items:
allOf:
- $ref: '#/components/schemas/B'
and running openapi-diff spec.yaml spec.yaml I get stack overflow error
Exception in thread "main" java.lang.StackOverflowError
at java.base/java.util.Arrays.spliterator(Arrays.java:5482)
at java.base/java.util.Arrays.stream(Arrays.java:5633)
at java.base/java.util.Arrays.stream(Arrays.java:5614)
at java.base/java.util.stream.Stream.of(Stream.java:1188)
at com.qdesrame.openapi.diff.model.ChangedExtensions.getChangedElements(ChangedExtensions.java:37)
at com.qdesrame.openapi.diff.model.ComposedChanged.isChanged(ComposedChanged.java:19)
at com.qdesrame.openapi.diff.model.Changed.isUnchanged(Changed.java:21)
at com.qdesrame.openapi.diff.utils.ChangedUtils.isUnchanged(ChangedUtils.java:9)
at com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged(ChangedUtils.java:17)
at com.qdesrame.openapi.diff.compare.ExtensionsDiff.diff(ExtensionsDiff.java:79)
at com.qdesrame.openapi.diff.compare.schemadiffresult.SchemaDiffResult.diff(SchemaDiffResult.java:61)
at com.qdesrame.openapi.diff.compare.SchemaDiff.computeDiff(SchemaDiff.java:316)
at com.qdesrame.openapi.diff.compare.SchemaDiff.computeDiff(SchemaDiff.java:27)
at com.qdesrame.openapi.diff.compare.ReferenceDiffCache.cachedDiff(ReferenceDiffCache.java:51)
at com.qdesrame.openapi.diff.compare.SchemaDiff.diff(SchemaDiff.java:282)
at com.qdesrame.openapi.diff.compare.schemadiffresult.SchemaDiffResult.diff(SchemaDiffResult.java:75)
at com.qdesrame.openapi.diff.compare.schemadiffresult.ComposedSchemaDiffResult.diff(ComposedSchemaDiffResult.java:85)
at com.qdesrame.openapi.diff.compare.SchemaDiff.computeDiff(SchemaDiff.java:316)
at com.qdesrame.openapi.diff.compare.SchemaDiff.computeDiff(SchemaDiff.java:27)
at com.qdesrame.openapi.diff.compare.ReferenceDiffCache.cachedDiff(ReferenceDiffCache.java:51)
at com.qdesrame.openapi.diff.compare.SchemaDiff.diff(SchemaDiff.java:282)
at com.qdesrame.openapi.diff.compare.schemadiffresult.ArraySchemaDiffResult.diff(ArraySchemaDiffResult.java:31)
The problem occurs only with allOf. Replacing it with oneOf fixes the problem.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez l’échec avec le schéma fourni et openapi-diff spec.yaml spec.yaml. Suivez les appels récursifs à travers SchemaDiff, ReferenceDiffCache, ComposedSchemaDiffResult et ArraySchemaDiffResult, en utilisant la stack trace comme point d’entrée. Le travail est terminé lorsque la comparaison récursive de schémas allOf s’achève sans StackOverflowError.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java, openapi
- Domaine
- api
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100