googleapis / googleapis/google-api-ruby-client

google-apis-core: CompositeIO does not maintain the IO read contract

Open
#27,758 0 comments 0 reactions 1 assignee Claimed by @quartzmo View on GitHub
Dominant language
Ruby
Stars
2.9k
Forks
888
Avg merge
6m
Merged PRs (30d)
218

Description

`Google::Apis::Core::CompositeIO` currently leaves `pos` unchanged after reads, returns `nil` for `read(0)`, and decrements remaining length by character count rather than byte count. This diverges from the IO contract and misaccounts multibyte data.

A focused candidate:
- returns an empty buffer for zero-length reads,
- rejects negative lengths,
- advances `pos` and remaining length by `bytesize`.

The focused contract model and 18 targeted examples pass; the cumulative core suite is 509 examples / 0 failures on Ruby 4.0.6. PR #18722 also touches CompositeIO, but only for frozen-string compatibility already present in current source; it does not address these semantics.

I have a minimal patch ready and can submit it after maintainer acceptance per CONTRIBUTING. The source audit and candidate preparation used AI assistance; I reviewed and verified the result.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.