{"record":{"id":"e31d5fb5817032ee","repo":"dotnet/aspnetcore","slug":"messagepack-message-was-length-d-but-claimed-to-b","errorCode":null,"errorMessage":"MessagePack message was length %d but claimed to be length %d.","messagePattern":"MessagePack message was length (.+?) but claimed to be length (.+?)\\.","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/SignalR/clients/java/signalr/messagepack/src/main/java/com/microsoft/signalr/messagepack/MessagePackHubProtocol.java","lineNumber":83,"sourceCode":"            return null;\n        }\n\n         // MessagePack library can't handle read-only ByteBuffer - copy into an array-backed ByteBuffer if this is the case\n        if (payload.isReadOnly()) {\n            byte[] payloadBytes = new byte[payload.remaining()];\n            payload.get(payloadBytes, 0, payloadBytes.length);\n            payload = ByteBuffer.wrap(payloadBytes);\n        }\n\n        List<HubMessage> hubMessages = new ArrayList<>();\n\n        while (payload.hasRemaining()) {\n            int length;\n            try {\n                length = Utils.readLengthHeader(payload);\n                // Throw if remaining buffer is shorter than length header\n                if (payload.remaining() < length) {\n                    throw new RuntimeException(String.format(\"MessagePack message was length %d but claimed to be length %d.\", payload.remaining(), length));\n                }\n            } catch (IOException ex) {\n                throw new RuntimeException(\"Error reading length header.\", ex);\n            }\n            // Instantiate MessageUnpacker\n            try(MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(payload)) {\n\n                int itemCount = unpacker.unpackArrayHeader();\n                HubMessageType messageType = HubMessageType.values()[unpacker.unpackInt() - 1];\n\n                switch (messageType) {\n                    case INVOCATION:\n                        hubMessages.add(createInvocationMessage(unpacker, binder, itemCount, payload));\n                        break;\n                    case STREAM_ITEM:\n                        hubMessages.add(createStreamItemMessage(unpacker, binder, payload));\n                        break;\n                    case COMPLETION:","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/dotnet/aspnetcore/blob/294cab2f9b2e03af6b953820c7ab497c3c8b7ad9/src/SignalR/clients/java/signalr/messagepack/src/main/java/com/microsoft/signalr/messagepack/MessagePackHubProtocol.java#L65-L101","documentation":"After reading the varint length prefix in parseMessages, the protocol checks that the remaining bytes in the buffer are at least as long as the declared length. If the declared length exceeds what is actually present, the message is corrupt or truncated and parsing aborts immediately.","triggerScenarios":"Truncated MessagePack payload delivered by the transport; framing corruption; a proxy truncating the binary stream; partial read reassembled incorrectly.","commonSituations":"Reverse proxy/load balancer altering or truncating binary payloads; mismatched SignalR/MessagePack protocol versions; network interruption mid-frame.","solutions":["Ensure the transport delivers complete, unmodified binary frames.","Align client and server SignalR MessagePack protocol versions.","Inspect for any proxy that buffers, re-encodes, or truncates the stream."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Java\nhubConnection.start().subscribe(ok -> {}, err -> {\n    if (err.getMessage() != null && err.getMessage().contains(\"claimed to be length\")) {\n        // suspect truncation/proxy/version mismatch\n    }\n});","preventionTips":["Ensure transports deliver complete, unmodified binary frames.","Keep client and server MessagePack protocol versions aligned.","Investigate proxies that re-encode or truncate binary streams."],"tags":["signalr","messagepack","protocol","corruption"],"analyzedSha":"294cab2f9b2e03af6b953820c7ab497c3c8b7ad9","analyzedAt":"2026-08-06T20:08:02.189Z","schemaVersion":2},"datasetVersion":"2026-08-06T23:17:07.152Z"}