Azure / Azure/openapi-diff

Runtime Exception - JSON integer is too large or small for an Int64

Abierto
#258 1 comentario 0 reacciones 0 asignados Ver en GitHub
bug
Lenguaje dominante
C#
Estrellas
290
Forks
50
Merge medio
5 d 13 h
PR fusionados (30 d)
5

Descripción

I'm getting the follwing runtime exception when trying to run the tool against the following two files:
- https://github.com/Azure/azure-rest-api-specs/blob/4ee92e33cbdbec6685e3cfa125a9b80423cac04c/specification/confidentialledger/data-plane/Microsoft.ConfidentialLedger/stable/2022-11-23/confidentialledger.json
- https://github.com/Azure/azure-rest-api-specs/blob/main/specification/confidentialledger/data-plane/Microsoft.ConfidentialLedger/stable/2022-05-13/confidentialledger.json

```
Unhandled exception. Newtonsoft.Json.JsonReaderException: JSON integer 9223372036854776000 is too large or small for an Int64. Path 'parameters.CommitParameter.maximum', line 1, position 40197.
at Newtonsoft.Json.JsonTextReader.ParseNumber(ReadType readType)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.Linq.JContainer.ReadContentFrom(JsonReader r, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JContainer.ReadTokenFrom(JsonReader reader, JsonLoadSettings options)
at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)
at Newtonsoft.Json.Linq.JObject.Parse(String json)
at AutoRest.Swagger.JsonConverters.PathLevelParameterConverter..ctor(String json) in D:\a\1\s\openapi-diff\src\modeler\AutoRest.Swagger\PathLevelParameterConverter.cs:line 48
at AutoRest.Swagger.SwaggerParser.Parse(String swaggerDocument, String fileName) in D:\a\1\s\openapi-diff\src\modeler\AutoRest.Swagger\SwaggerParser.cs:line 22
at AutoRest.Swagger.SwaggerModeler.Compare(String fileNameOld, String swaggerOld, String fileNameNew, String swaggerNew, Settings settings) in D:\a\1\s\openapi-diff\src\modeler\AutoRest.Swagger\SwaggerModeler.cs:line 29
at OpenApiDiff.Program.Main(String[] args) in D:\a\1\s\openapi-diff\src\core\OpenApiDiff\Program.cs:line 37
Aborted

at ChildProcess.exithandler (node:child_process:389:12)
at ChildProcess.emit (node:events:513:28)
at maybeClose (node:internal/child_process:1091:16)
at Socket. (node:internal/child_process:449:11)
at Socket.emit (node:events:513:28)
at Pipe. (node:net:757:14) {
code: 134,
killed: false,
signal: null,
cmd: 'dotnet /home/apiccione/.nvm/versions/node/v18.6.0/lib/node_modules/@azure/oad/dlls/OpenApiDiff.dll -o /tmp/old-resolved.json -n /tmp/new-resolved.json',
stdout: '',
stderr: "Unhandled exception. Newtonsoft.Json.JsonReaderException: JSON integer 9223372036854776000 is too large or small for an Int64. Path 'parameters.CommitParameter.maximum', line 1, position 40197.\n" +
' at Newtonsoft.Json.JsonTextReader.ParseNumber(ReadType readType)\n' +
' at Newtonsoft.Json.JsonTextReader.ParseValue()\n' +
' at Newtonsoft.Json.Linq.JContainer.ReadContentFrom(JsonReader r, JsonLoadSettings settings)\n' +
' at Newtonsoft.Json.Linq.JContainer.ReadTokenFrom(JsonReader reader, JsonLoadSettings options)\n' +
' at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings)\n' +
' at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings)\n' +
' at Newtonsoft.Json.Linq.JObject.Parse(String json)\n' +
' at AutoRest.Swagger.JsonConverters.PathLevelParameterConverter..ctor(String json) in D:\\a\\1\\s\\openapi-diff\\src\\modeler\\AutoRest.Swagger\\PathLevelParameterConverter.cs:line 48\n' +
' at AutoRest.Swagger.SwaggerParser.Parse(String swaggerDocument, String fileName) in D:\\a\\1\\s\\openapi-diff\\src\\modeler\\AutoRest.Swagger\\SwaggerParser.cs:line 22\n' +
' at AutoRest.Swagger.SwaggerModeler.Compare(String fileNameOld, String swaggerOld, String fileNameNew, String swaggerNew, Settings settings) in D:\\a\\1\\s\\openapi-diff\\src\\modeler\\AutoRest.Swagger\\SwaggerModeler.cs:line 29\n' +
' at OpenApiDiff.Program.Main(String[] args) in D:\\a\\1\\s\\openapi-diff\\src\\core\\OpenApiDiff\\Program.cs:line 37\n' +
'Aborted\n'
}
```

This seems to originate from parsing the maximum int64 `9223372036854775807` [here](https://github.com/Azure/azure-rest-api-specs/blob/1fefe3f5cee88319b17c08a2dbf95e1e983a9f8c/specification/confidentialledger/data-plane/Microsoft.ConfidentialLedger/stable/2022-05-13/confidentialledger.json#L922), which for some reason gets converted to `9223372036854776000` when the tool runs. The value is the same for both specs.

Please also find more details about the error in the CI pipeline: https://github.com/Azure/azure-rest-api-specs/pull/21659/checks?check_run_id=9712102995.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Start with AutoRest.Swagger/PathLevelParameterConverter.cs at line 48, then follow SwaggerParser.Parse and the OpenApiDiff command shown in the report. Reproduce the failure with the linked ConfidentialLedger specifications. Done means the maximum value in parameters.CommitParameter can be processed without the Int64 parsing exception and the comparison completes.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
csharp
Área
cli
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.