{"record":{"id":"b8e33bf1319eb3e8","repo":"TooTallNate/Java-WebSocket","slug":"more-than-125-octets","errorCode":null,"errorMessage":"more than 125 octets","messagePattern":"more than 125 octets","errorType":"exception","errorClass":"InvalidFrameException","httpStatus":null,"severity":"error","filePath":"src/main/java/org/java_websocket/drafts/Draft_6455.java","lineNumber":619,"sourceCode":"   *\n   * @param buffer            the buffer to read from\n   * @param optcode           the decoded optcode\n   * @param oldPayloadlength  the old payload length\n   * @param maxpacketsize     the max packet size allowed\n   * @param oldRealpacketsize the real packet size\n   * @return the new payload data containing new payload length and new packet size\n   * @throws InvalidFrameException  thrown if a control frame has an invalid length\n   * @throws IncompleteException    if the maxpacketsize is smaller than the realpackagesize\n   * @throws LimitExceededException if the payload length is to big\n   */\n  private TranslatedPayloadMetaData translateSingleFramePayloadLength(ByteBuffer buffer,\n      Opcode optcode, int oldPayloadlength, int maxpacketsize, int oldRealpacketsize)\n      throws InvalidFrameException, IncompleteException, LimitExceededException {\n    int payloadlength = oldPayloadlength;\n    int realpacketsize = oldRealpacketsize;\n    if (optcode == Opcode.PING || optcode == Opcode.PONG || optcode == Opcode.CLOSING) {\n      log.trace(\"Invalid frame: more than 125 octets\");\n      throw new InvalidFrameException(\"more than 125 octets\");\n    }\n    if (payloadlength == 126) {\n      realpacketsize += 2; // additional length bytes\n      translateSingleFrameCheckPacketSize(maxpacketsize, realpacketsize);\n      byte[] sizebytes = new byte[3];\n      sizebytes[1] = buffer.get(/*1 + 1*/);\n      sizebytes[2] = buffer.get(/*1 + 2*/);\n      payloadlength = new BigInteger(sizebytes).intValue();\n    } else {\n      realpacketsize += 8; // additional length bytes\n      translateSingleFrameCheckPacketSize(maxpacketsize, realpacketsize);\n      byte[] bytes = new byte[8];\n      for (int i = 0; i < 8; i++) {\n        bytes[i] = buffer.get(/*1 + i*/);\n      }\n      long length = new BigInteger(bytes).longValue();\n      translateSingleFrameCheckLengthLimit(length);\n      payloadlength = (int) length;","sourceCodeStart":601,"sourceCodeEnd":637,"githubUrl":"https://github.com/TooTallNate/Java-WebSocket/blob/afeacbf8c0f6f6a761c9d9daed8c813dd3b8ed7d/src/main/java/org/java_websocket/drafts/Draft_6455.java#L601-L637","documentation":"Draft_6455.translateSingleFramePayloadLength throws InvalidFrameException when a control frame (PING, PONG, or CLOSE) declares a payload longer than 125 octets. RFC 6455 forbids control frames from exceeding 125 bytes of payload, so the library rejects such frames during frame translation.","triggerScenarios":"A PING, PONG, or CLOSE frame is received whose payload length field is >125 bytes; translateSingleFramePayloadLength detects optcode == PING/PONG/CLOSING and throws before length parsing continues.","commonSituations":"Interoperating with a non-conformant or malicious WebSocket peer that sends oversized control frames; buggy custom clients/servers; proxies or fuzzing tools that violate RFC 6455 control-frame limits.","solutions":["Fix or reject the remote endpoint sending RFC-non-compliant control frames larger than 125 bytes","Catch InvalidFrameException in your WebSocketListener's onWebsocketError / process flow and close the connection with a protocol error (1002)","Verify no intermediate proxy is altering frames; test the peer with a standards-compliant client","Keep payloads for app-level pings within 125 bytes or use regular data frames instead"],"exampleFix":"// before: sending a huge custom ping payload\nbyte[] bigPayload = new byte[300];\nwebSocket.sendPing(bigPayload); // peer/lib rejects\n// after\nbyte[] payload = new byte[100]; // <=125 bytes for control frames\nwebSocket.sendPing(payload);","handlingStrategy":"validation","validationCode":"// RFC 6455: control frame payloads must be <= 125 bytes\nif (payload != null && payload.length > 125) {\n  throw new IllegalArgumentException(\"Control frame payload must be <= 125 bytes\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  webSocket.sendFrame(pingFrame);\n} catch (WebsocketNotConnectedException | InvalidFrameException e) {\n  log.warn(\"Control frame rejected: {}\", e.getMessage());\n  webSocket.close(CloseFrame.PROTOCOL_ERROR, \"invalid control frame\");\n}","preventionTips":["Never send PING/PONG/CLOSE payloads larger than 125 bytes","Fuzz-test peers against RFC 6455 control-frame limits","Handle InvalidFrameException in WebSocketListener.onWebsocketError"],"tags":["websocket","rfc6455","protocol-violation","control-frame"],"backgroundTag":"invalid-argument-value","analyzedSha":"afeacbf8c0f6f6a761c9d9daed8c813dd3b8ed7d","analyzedAt":"2026-09-09T14:39:47.546Z","contentChangedAt":"2026-09-09T14:39:47.546Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}