Pumpkin-MC/Pumpkin · error · VineError
Failed to read game profile UUID
Error message
Failed to read game profile UUID
What it means
This is the VineProxyError::FailedReadProfileUUID variant. It means the server could not read the player's UUID from the Vine proxy forwarding response — the bytes ran out or were malformed at the UUID field. The UUID is required to identify the authenticated player, so decoding is aborted.
Solutions
- Match the forwarding protocol implementation on both proxy and server
- Check the proxy writes fields in Vine spec order (address, then profile name, UUID, properties)
- Update proxy and Pumpkin together
- Enable debug logging on the proxy to confirm what it sends
Example fix
null
Defensive patterns
Strategy: try-catch
Validate before calling
null
Type guard
null
Try / catch
match result { Err(VineProxyError::FailedReadProfileUUID) => { warn!("truncated forwarding payload: no profile UUID"); connection.disconnect(); }, Ok(v) => v, Err(e) => return Err(e) } Prevention
- Verify proxy writes fields in Vine spec order
- Match protocol versions on proxy and server
- Test with a known-good proxy before deploying custom ones
When it happens
Trigger: Raised when decoding the Vine forwarding payload and the 16-byte UUID cannot be read (buffer exhausted or misaligned fields earlier in the payload).
Common situations: Forwarding payload written by a proxy with wrong field order/sizes; protocol version drift between proxy and server; corrupted packets over the connection.
Related errors
- Failed to read game profile name
- Failed to read game profile properties
- Failed to parse address
- Vine response data too short (minimum 89 bytes)
- Failed to read forward version
AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09).
Data as JSON: /api/errors/9dc81b2d988f96d4.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin/src/net/proxy/vine.rs:52
#[error("Failed to verify Ed25519 signature")]
InvalidSignature,
#[error("Failed to read forward version")]
FailedReadForwardVersion,
#[error("Unsupported forwarding version {0}. Expected {1}")]
UnsupportedForwardVersion(i32, i32),
#[error("Vine timestamp expired or desynchronized: skew of {0}s exceeds limit of {1}s")]
TimestampExpired(i64, i64),
#[error("Vine challenge nonce mismatch")]
ChallengeMismatch,
#[error("Missing expected challenge from pending connection")]
MissingChallenge,
#[error("Failed to read address")]
FailedReadAddress,
#[error("Failed to parse address")]
FailedParseAddress,
#[error("Failed to read game profile name")]
FailedReadProfileName,
#[error("Failed to read game profile UUID")]
FailedReadProfileUUID,
#[error("Failed to read game profile properties")]
FailedReadProfileProperties,
}
/// Initiates Vine modern forwarding handshake by sending a `CLoginPluginRequest`
/// with a unique 16-byte challenge nonce to protect against replay attacks.
pub async fn vine_login(connection: &mut PendingConnection) {
let message_id: i32 = rand::random();
let challenge: [u8; 16] = rand::random();
let mut buf = BytesMut::with_capacity(17);
buf.put_u8(VINE_FORWARDING_VERSION as u8);
buf.put_slice(&challenge);
connection.vine_challenge = Some(challenge);
connectionView on GitHub (pinned to 8d4639e25a)