OpenAPITools / OpenAPITools/openapi-diff
Stackoverflow error with cyclic references involving allOf
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Java
- Estrellas
- 1.1k
- Forks
- 190
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
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.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Reproduce el fallo con el esquema proporcionado y openapi-diff spec.yaml spec.yaml. Rastrea las llamadas recursivas a través de SchemaDiff, ReferenceDiffCache, ComposedSchemaDiffResult y ArraySchemaDiffResult, utilizando el stack trace como punto de entrada. Se considera terminado cuando la comparación recursiva de esquemas allOf se completa sin un StackOverflowError.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java, openapi
- Área
- api
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100