PyO3 / pyo3

Rust bindings for the Python interpreter
https://pyo3.rs
Other
11.8k stars 725 forks source link

`chrono::DateTime::to_object()` can panic #4029

Open 124C41p opened 4 months ago

124C41p commented 4 months ago

The range of possible values of chrono::DateTime is much larger than that of Python's datetime (which is limited by 1 <= year <= 9999), so there cannot be a one to one mapping. As a consequence, the function chrono::DateTime::to_object() panics for dates far in the future or far in the past. (tested with version 0.21.0)

In most situations this is probably not an issue. In my personal use case however, I am deserializing data received over the network in an extension module, and hand the results over to a Python process. In this case, a malicious actor could crash my module by simply sending some date with year >= 10k.

Do you mind adding something like chrono::DateTime::try_to_object() which fails savely?

adamreichold commented 4 months ago

We have a general need for fallible conversion traits but we are lacking the people to tackle this concurrently with the Bound API overhaul, c.f. #1813 and #2782.

davidhewitt commented 4 months ago

Opened #4041 to discuss fallible traits among other things.