1.8.1 (2026-09-09)
Breaking Changes
DownloadBufferandDownloadFilenow use ETag locking to ensure consistency across parallel chunk requests when the blob size is not specified upfront (i.e.,Range.Countis zero). If a blob is modified during a multi-chunk download, subsequent requests will fail withConditionNotMetinstead of silently returning data from mixed blob versions.
Bugs Fixed
- Fixed CRLF injection vulnerability in Blob Batch subrequest serialization. Header values containing CR or LF characters are now rejected before serialization, preventing header injection in batch requests.
- Fixed WASM compilation by using heap-allocated buffers on JS targets.
- Fixed Structured Message CRC64 download validation being skipped when the final payload byte exactly fills the caller's read buffer; the trailing segment footer and message trailer CRC64 are now drained and validated in the same
Read. - Fixed transient
net.Error/io.ErrUnexpectedEOFfailures during a Structured Message download not being retried: the decoder now preserves the error chain with%wand the retry reader classifies retryable errors witherrors.Is/errors.As. - Structured Message download now rejects a response missing the negotiated CRC64 flag instead of silently skipping validation.
- Fixed the Structured Message encoder emitting a valid, complete message when the source returned a non-EOF error exactly on a segment boundary; such errors are now propagated.
- Structured Message decoding now rejects a payload that declares fewer segments and appends unvalidated trailing bytes (
SMDecoderequires the parsed message to consume the entire input, and the streaming decoder validates the consumed byte count against the declared message length). - Fixed the Structured Message encoder returning
io.EOFwhen the source ends before the declared content length; a premature EOF is now surfaced asio.ErrUnexpectedEOFso callers do not accept a truncated message. - Fixed Structured Message decoder discarding errors (including
net.Errorandio.EOF) when the returned bytes exactly complete a segment; such errors are now propagated soRetryReadercan retry transient failures at segment boundaries. - Premature EOF during Structured Message framing reads (header, segment footer, or message trailer) now wraps
io.ErrUnexpectedEOFsoRetryReaderclassifies truncated framing as retryable.
Other Changes
- Optimized
DownloadBufferandDownloadFileto use an initial GET request instead of a HEAD (GetProperties) call for blob size discovery. For small blobs (<=4MB), the entire content is returned in a single request, reducing download latency by ~50%. - Updated
azcoretov1.23.1.