openapi-core icon indicating copy to clipboard operation
openapi-core copied to clipboard

[Bug]: Numerical strings are accepted as integers

Open Alopalao opened this issue 1 year ago • 0 comments

Actual Behavior

String numerical values ("10") are accepted as integers.

Expected Behavior

Unmarshal request should return an error.

Steps to Reproduce

api.yml

openapi: 3.0.0
info:
  title: test
  version: '0.1'
servers:
  - url: /test
paths:
  /sending:
    put:
      summary: Send integer
      requestBody:
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                my_integer:
                  type: integer
      responses:
        200:
          description: Ok.

test_request.py

import json
from openapi_core import OpenAPI
from openapi_core.contrib.starlette import StarletteOpenAPIRequest
from starlette.requests import Request


def starlette_request(path: str):
    return Request({
        "type": "http",
        "method": "PUT",
        "path": path,
        "headers": [(b"content-type", b"application/json; charset=utf-8")],
        "query_string": "",
    })

body = json.dumps({"my_integer": "10"})
spec = OpenAPI.from_file_path("api.yml")
request = StarletteOpenAPIRequest(starlette_request("/test/sending"), body=body)
result = spec.unmarshal_request(request)
print(result.errors)

OpenAPI Core Version

0.19.0

OpenAPI Core Integration

starlette

Affected Area(s)

Unmarshaling

References

Reading the guide for OpenAPI 3.0.0 from swagger, it states that numbers in strings are not accepted as integers.

Anything else we need to know?

Is this a feature? Previously this was not the case and I found out about this change because I updated from 0.16.6 to 0.19.0.

Would you like to implement a fix?

None

Alopalao avatar Mar 26 '24 18:03 Alopalao