Summary
RustPython 0.5.0 (and also current main) hangs and starts eating 100% CPU (one core) on first or second iteration of following script:
import urllib.request
for i in range(3):
print(i)
req=urllib.request.Request('https://crates.io/api/v1/crates/tokio')
with urllib.request.urlopen(req) as r:
r.read()
Interesting thing is, reproducibility depends on what exactly HTTPs server sends to the client. Just HTTPs plus relatively large file is not enough. For example, bug completely disappears when I replace https://crates.io/api/v1/crates/tokio with https://gist.githubusercontent.com/khaykov/a6105154becce4c0530da38e723c2330/raw/41ab415ac41c93a198f7da5b47d604956157c5c3/gistfile1.txt.
I was able to git bisect this to a single problematic commit - 073adbd (#7418). Reverting it on top of 0.5.0 fixes this issue for me. And I have no idea about how to fix this properly.
Expected
RustPython should terminate after three iterations.
Actual
RustPython hangs and starts eating 100% CPU
Python Documentation
N/A
Summary
RustPython 0.5.0 (and also current
main) hangs and starts eating 100% CPU (one core) on first or second iteration of following script:Interesting thing is, reproducibility depends on what exactly HTTPs server sends to the client. Just HTTPs plus relatively large file is not enough. For example, bug completely disappears when I replace
https://crates.io/api/v1/crates/tokiowithhttps://gist.githubusercontent.com/khaykov/a6105154becce4c0530da38e723c2330/raw/41ab415ac41c93a198f7da5b47d604956157c5c3/gistfile1.txt.I was able to
git bisectthis to a single problematic commit - 073adbd (#7418). Reverting it on top of 0.5.0 fixes this issue for me. And I have no idea about how to fix this properly.Expected
RustPython should terminate after three iterations.
Actual
RustPython hangs and starts eating 100% CPU
Python Documentation
N/A