mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-30 00:22:10 -04:00
Reject non-string atomic text writes (#1819)
This commit is contained in:
@@ -34,6 +34,8 @@ def atomic_write_json(path: str, data: Any, *, indent: Optional[int] = None) ->
|
|||||||
|
|
||||||
|
|
||||||
def atomic_write_text(path: str, text: str) -> None:
|
def atomic_write_text(path: str, text: str) -> None:
|
||||||
|
if not isinstance(text, str):
|
||||||
|
raise TypeError("atomic_write_text expects a string")
|
||||||
os.makedirs(os.path.dirname(path) or ".", exist_ok=True)
|
os.makedirs(os.path.dirname(path) or ".", exist_ok=True)
|
||||||
tmp = f"{path}.tmp.{os.getpid()}"
|
tmp = f"{path}.tmp.{os.getpid()}"
|
||||||
with open(tmp, "w", encoding="utf-8") as f:
|
with open(tmp, "w", encoding="utf-8") as f:
|
||||||
|
|||||||
@@ -138,6 +138,16 @@ def test_atomic_write_text_leaves_no_tmp_file(tmp_path):
|
|||||||
assert _tmp_siblings(tmp_path, "note.txt") == []
|
assert _tmp_siblings(tmp_path, "note.txt") == []
|
||||||
|
|
||||||
|
|
||||||
|
def test_atomic_write_text_rejects_non_string_before_tmp_file(tmp_path):
|
||||||
|
target = tmp_path / "note.txt"
|
||||||
|
|
||||||
|
with pytest.raises(TypeError):
|
||||||
|
atomic_write_text(str(target), 123)
|
||||||
|
|
||||||
|
assert not target.exists()
|
||||||
|
assert _tmp_siblings(tmp_path, "note.txt") == []
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# atomic_write_text — failure path: target preserved when replace fails.
|
# atomic_write_text — failure path: target preserved when replace fails.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user