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

  1. Verify the proxy (e.g. Velocity/Vine-compatible) and Pumpkin server use the same modern forwarding protocol version
  2. Confirm modern/secret-based forwarding is enabled on the proxy and its secret matches the server config
  3. Check the network path for anything rewriting or truncating login plugin messages
  4. 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

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.

Related errors


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)