Fix FileStorage on Windows: open fd with O_BINARY, UTF-8 release logs
os.open() on Windows defaults to O_TEXT, so the CRT translated \r\n in binary ciphertext: writes grew, offsets shifted, reads came up short and the RAF callbacks failed with EIO (probe/read/write depending on where a 0x0A byte landed). Pass O_BINARY where it exists. Also reconfigure stdout/stderr to UTF-8 in tools/release.py so the ✓/✗/⚠ summary lines don't crash on cp1252 Windows consoles.
This commit is contained in:
1 parent
59dd4d922f
commit
503ce8e491
2 files changed
+8
No files matched your search
@@ -104,6 +104,9 @@ class FileStorage:
|
||||
flags = os.O_RDWR | os.O_CREAT | os.O_EXCL
|
||||
else:
|
||||
raise ValueError(f"Unsupported mode: {mode}")
|
||||
# O_BINARY (Windows only): keep the CRT from translating \r\n in
|
||||
# binary data, which corrupts ciphertext and shifts offsets
|
||||
flags |= getattr(os, "O_BINARY", 0)
|
||||
self._fd = os.open(path, flags, 0o644)
|
||||
self._closed = False
|
||||
self._lock = threading.Lock()
|
||||
|
||||
@@ -305,6 +305,11 @@ def run_benchmark(wheel: Path, py_version: str) -> bool:
|
||||
|
||||
def main():
|
||||
"""Build wheels for all supported Python versions."""
|
||||
# Windows CI consoles default to cp1252; emit ✓/✗/⚠ as UTF-8
|
||||
for stream in (sys.stdout, sys.stderr):
|
||||
if hasattr(stream, "reconfigure"):
|
||||
stream.reconfigure(encoding="utf-8", errors="replace")
|
||||
|
||||
# CI matrix jobs build per-platform wheels but never upload; a separate
|
||||
# publish job uploads everything once all platforms have succeeded.
|
||||
no_upload = "--no-upload" in sys.argv
|
||||
|
||||
Reference in new issue
Block a user