Repository navigation
Handle short destination writes in stream writers - #371
akshitkhokhani wants to merge 1 commit into
Conversation
0063562 to
34b2ee5
Compare
|
Security incident update from the PR author — unauthorized malicious changes Unauthorized malicious code was pushed through my GitHub account into the source repository associated with this PR. This PR is closed. Please do not merge or run the affected original commits. I am sorry for the risk and disruption to the project. What the investigation established The injected files include a hidden VS Code task configured to run on folder opening and a Node payload disguised as The observed account action does not identify the person or credential behind it. The exact initial access method remains unconfirmed. Commit author/committer dates can be preserved or manipulated, so I am using GitHub timeline timestamps below for the public activity log. Public PR activity (UTC)
Affected source files and indicators in this public fork
Observed loader indicators: Payload/loader Git blob identifiers (Git SHA-1, not SHA-256):
The cleanup also removes the payload camouflage files and restores altered ignore/configuration rules where supported by the original parent revision. The source review was static; it does not establish whether automated builds or deployed environments executed affected code. Branch repair activity in
Status snapshot: 2026-11-03T04:15:37+00:00. Repairs are being checked by comparing file contents/Git object hashes and branch references; this is static verification, not a successful test/build claim. Legitimate project changes are retained where separable from the injection. I will update this comment as the remaining verification completes. Limits and maintainer follow-up
|
Stream writers currently discard the byte count returned by their destination's
write(). A destination accepting a short write silently loses the rest of the output, even though the outer writer reports consuming the input.Retry the unwritten suffix in the C, CFFI and Rust compression/decompression writers, including compression flush. Preserve legacy callback destinations that return
Noneafter consuming the whole chunk. Zero progress raisesBlockingIOError; invalid counts are rejected, and destination exceptions propagate. The documentation states this contract and excludes general nonblocking or post-failure resumability guarantees.copy_stream()is unchanged.Fixes #370.
Validation on macOS ARM64 / CPython 3.13.7, using source-built backends and synthetic local data with network access disabled:
Nonecontrols pass on each.Noneand index-exception controls; no blocking findings remained.git diff --checkpass. Rust changes were formatted with rustfmt. The full project/slow test suites, other Python versions and other operating systems were not run locally.AI assistance was used for implementation, tests and independent review; no maintainer approval is implied.