Skip to content

fix: apply the Chrome parrot spec in Start, after the transport parameters - #9

Open
ari-ahm wants to merge 1 commit into
HyNetworks:v0.63.0-mod-renamefrom
ari-ahm:chrome-parrot-apply-preset-in-start
Open

ari-ahm wants to merge 1 commit into
HyNetworks:v0.63.0-mod-renamefrom
ari-ahm:chrome-parrot-apply-preset-in-start

Conversation

@ari-ahm

@ari-ahm ari-ahm commented Oct 13, 2026

Copy link
Copy Markdown

SetTransportParameters writes quic-go's transport parameters into the retained ClientHello spec (c.spec), but newUTLSQUICClient applied that spec with ApplyPreset before SetTransportParameters is called (NewCryptoSetupClient). That works with the uTLS this branch pins (v1.8.2), whose ApplyPreset keeps the caller's extension objects.

uTLS master (since ff1b50fbbe9a, 2026-10-06) deep-copies the spec in ApplyPreset. With it, the transport parameters never reach the ClientHello and every Chrome-parrot handshake fails:

INTERNAL_ERROR (remote): TRANSPORT_PARAMETER_ERROR (local): missing initial_source_connection_id

This applies the spec in Start instead, once the parameters are in it. It's a no-op change with v1.8.2 and fixes newer uTLS.

Tests

integrationtests/self Chrome parrot tests (-run ChromeParrot):

uTLS without this change with it
v1.8.2 (pinned) pass pass
master ff1b50fbbe9a + refraction-networking/utls#424 TestChromeParrotHandshake fails as above pass

internal/handshake passes, and both pass with -race -count=3.

Not included: bumping uTLS

When this branch bumps uTLS, two more things are needed:

Found while bumping uTLS in Xray-core, which uses this branch through its v0.61.0 version.

🤖 Generated with Claude Code

…eters

SetTransportParameters writes quic-go's transport parameters into the retained
ClientHello spec, but the spec was applied in newUTLSQUICClient, before that
call. That works with uTLS v1.8.2, whose ApplyPreset keeps the caller's
extension objects. Newer uTLS (master since ff1b50fbbe9a) deep-copies the spec
in ApplyPreset, so the parameters never reach the ClientHello and every
handshake fails with "missing initial_source_connection_id".

Applying the spec in Start works with both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KqYot5fp6kvHireReN6Lu7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant