Pumpkin-MC/Pumpkin · error · VineError
Failed to parse address
Error message
Failed to parse address
What it means
This is the VineProxyError::FailedParseAddress variant from the Vine (Velocity-style modern) proxy forwarding handshake. It means the server received the proxy's login plugin response but could not parse the forwarded address field out of it. The library throws it because a malformed or corrupted forwarding payload cannot be trusted to identify the real client address.
Solutions
- Verify the proxy (e.g. Velocity/Vine-compatible) and Pumpkin server use the same modern forwarding protocol version
- Confirm modern/secret-based forwarding is enabled on the proxy and its secret matches the server config
- Check the network path for anything rewriting or truncating login plugin messages
- If you wrote a custom proxy, validate the address encoding matches the Vine specification
Example fix
null
Defensive patterns
Strategy: try-catch
Validate before calling
null
Type guard
null
Try / catch
match result { Err(VineProxyError::FailedParseAddress) => { warn!("proxy sent unparseable address; disconnecting client"); connection.disconnect(); }, Ok(v) => v, Err(e) => return Err(e) } Prevention
- Pin proxy and server to compatible forwarding protocol versions
- Keep the forwarding secret identical on both sides
- Test forwarding after any proxy upgrade
When it happens
Trigger: Raised during vine_login / handshake processing when the address portion of the Vine forwarding response fails to decode as a valid socket address (e.g. truncated bytes or an unparseable host:port string).
Common situations: Proxy and server running mismatched/modified forwarding protocol versions; a middlebox or misconfigured proxy sending malformed login plugin responses; custom proxy implementations writing the payload incorrectly.
Understand the failure class
Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Failed to read game profile name
- Failed to read game profile UUID
- Failed to read game profile properties
- 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/c82754a5b36609c5.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin/src/net/proxy/vine.rs:48
#[error("No public key or secret configured for Vine proxy")]
MissingKeyConfig,
#[error("Invalid Ed25519 public key")]
InvalidPublicKey,
#[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);View on GitHub (pinned to 8d4639e25a)