Skip to content

fix: PaginationQueryParser が非整数パラメータで 422 ではなく 500 を返す #108

@hideyukiMORI

Description

@hideyukiMORI

問題

PaginationQueryParser.parse()?limit=abc?offset=xyz のような非整数クエリパラメータを受け取ると ValueError が発生し、ErrorHandlerMiddleware に 500 として処理される。

```python

src/nene2/http/pagination.py

limit = int(params.get("limit", default_limit)) # ValueError が伝播する
offset = int(params.get("offset", 0)) # 同上
```

期待する動作

?limit=abc422 Unprocessable Entity (ValidationException)

実際の動作

?limit=abc500 Internal Server Error

修正方法

int() 変換を try-except で包み、ValueErrorValidationException に変換する。

```python
def _parse_int(value: str, field: str) -> int | ValidationError:
try:
return int(value)
except ValueError:
return ValidationError(field=field, message=f"{field} must be an integer.", code="invalid")
```

影響

nene2.http.PaginationQueryParser を使う全エンドポイント(フレームワークレベルのバグ)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions