HomePhorge

Fix a Mercurial wire protocol parser issue when we receive a length frame…

Description

Fix a Mercurial wire protocol parser issue when we receive a length frame before any data

Summary:
Depends on D18856. Ref T13036. See PHI275. When we receive a length frame but the buffer doesn't have any data yet, we currently emit a pointless 0-length data frame on the channel.

For normal chatter this is harmless/valid, but it causes problems when a channel has transitioned into bundle2 mode (probably it indicates "end of stream")?

In any case, it's never helpful, so if we're about to read a data block and don't have any data, just bail out until we see some more data.

Note that we can't end up here expecting a 0-length data block: both the data-length and data-bytes states already handle that properly.

Test Plan: Pushed 4MB changes to a Mercurial repository with Mercurial 4.1.1, was no longer able to hit channel errors.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13036

Differential Revision: https://secure.phabricator.com/D18857

Details

Provenance
epriestleyAuthored on Jan 4 2018, 1:41 PM
themackabuPushed on Mar 25 2025, 8:07 PM
Parents
rP3a4e14431fce: Remove an obsolete comment about Mercurial SSH error behavior
Branches
Unknown
Tags
Unknown

Event Timeline