Pumpkin-MC/Pumpkin · error · VineError

Failed to read game profile name

Error message

Failed to read game profile name

What it means

This is the VineProxyError::FailedReadProfileName variant. It indicates the server failed while reading the game profile name field from the Vine proxy forwarding response. The library throws it because the forwarded login payload ended or was malformed at the name field, so the profile cannot be reconstructed.

Solutions

  1. Ensure the proxy and server agree on the Vine modern forwarding format
  2. Verify the proxy secret matches so the payload is not garbled
  3. Update both proxy and Pumpkin to matching, current versions
  4. If implementing a proxy, confirm you write the profile name string with the correct length-prefixed encoding

Example fix

null
Defensive patterns

Strategy: try-catch

Validate before calling

null

Type guard

null

Try / catch

match result { Err(VineProxyError::FailedReadProfileName) => { warn!("truncated forwarding payload: no profile name"); connection.disconnect(); }, Ok(v) => v, Err(e) => return Err(e) }

Prevention

When it happens

Trigger: Raised when decoding the Vine forwarding response and the readable bytes run out before a complete profile name string, or the string length prefix is invalid.

Common situations: Proxy/server forwarding protocol mismatch; corrupted or truncated forwarding payload; buggy custom proxy implementations that omit or shorten the profile data.

Related errors


AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09). Data as JSON: /api/errors/5dea51a77412bfe6. Report an issue: GitHub.

Appendix: source

Thrown at crates/pumpkin/src/net/proxy/vine.rs:50

    #[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);

    connection.vine_challenge = Some(challenge);

View on GitHub (pinned to 8d4639e25a)