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
|
flags = os.O_RDWR | os.O_CREAT | os.O_EXCL
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unsupported mode: {mode}")
|
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._fd = os.open(path, flags, 0o644)
|
||||||
self._closed = False
|
self._closed = False
|
||||||
self._lock = threading.Lock()
|
self._lock = threading.Lock()
|
||||||
|
|||||||
@@ -305,6 +305,11 @@ def run_benchmark(wheel: Path, py_version: str) -> bool:
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
"""Build wheels for all supported Python versions."""
|
"""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
|
# CI matrix jobs build per-platform wheels but never upload; a separate
|
||||||
# publish job uploads everything once all platforms have succeeded.
|
# publish job uploads everything once all platforms have succeeded.
|
||||||
no_upload = "--no-upload" in sys.argv
|
no_upload = "--no-upload" in sys.argv
|
||||||
|
|||||||
Reference in new issue
Block a user