apache/shardingsphere · error · FirebirdProtocolException
Unknown blob information request type %d
Error message
Unknown blob information request type %d
What it means
Thrown when a Firebird client requests blob information and the requested info item is not one of the four handled types (NUM_SEGMENTS, MAX_SEGMENT, TOTAL_LENGTH, TYPE). The Firebird protocol defines many isc_info_blob_* items; this implementation covers only the subset above, and any other item code hits the default branch and throws.
Source
Thrown at database/protocol/dialect/firebird/src/main/java/org/apache/shardingsphere/database/protocol/firebird/packet/command/query/info/type/blob/FirebirdBlobInfoReturnPacket.java:71
}
}
FirebirdCommonInfoPacketType.parseCommonInfo(payload, FirebirdCommonInfoPacketType.END);
}
private void parseBlobInfo(final FirebirdPacketPayload payload, final FirebirdBlobInfoPacketType type) {
switch (type) {
case NUM_SEGMENTS:
writeIntValue(payload, type, getSegmentCount());
return;
case MAX_SEGMENT:
case TOTAL_LENGTH:
writeIntValue(payload, type, getSegmentLength());
return;
case TYPE:
writeIntValue(payload, type, BLOB_TYPE_SEGMENTED);
return;
default:
throw new FirebirdProtocolException("Unknown blob information request type %d", type.getCode());
}
}
private void writeIntValue(final FirebirdPacketPayload payload, final FirebirdBlobInfoPacketType type, final int value) {
payload.writeInt1(type.getCode());
payload.writeInt2LE(4);
payload.writeInt4LE(value);
}
private int getSegmentLength() {
return blobLength;
}
private int getSegmentCount() {
return 0 == blobLength ? 0 : 1;
}
}
View on GitHub (pinned to e952770a21)
Solutions
- Identify the numeric item code in the message and map it to the isc_info_blob_* constant in Firebird's ibase.h
- Restrict client-side blob info requests to NUM_SEGMENTS, MAX_SEGMENT, TOTAL_LENGTH, and TYPE
- Contribute a handler for the missing item in FirebirdBlobInfoReturnPacket (write item code, 2-byte LE length, value) and raise it upstream
- As a workaround, fetch the blob stream directly instead of querying its info metadata
Example fix
// before: client requests an unimplemented blob info item
// (e.g. isc_info_blob_collation = 15)
// after: only request supported items
// int[] supported = { isc_info_blob_num_segments, isc_info_blob_max_segment,
// isc_info_blob_total_length, isc_info_blob_type }; Defensive patterns
Strategy: validation
Validate before calling
// before calling blob info, restrict to implemented items
private static final Set<Integer> SUPPORTED_BLOB_INFO = Set.of(
FirebirdBlobInfoPacketType.NUM_SEGMENTS.getCode(),
FirebirdBlobInfoPacketType.MAX_SEGMENT.getCode(),
FirebirdBlobInfoPacketType.TOTAL_LENGTH.getCode(),
FirebirdBlobInfoPacketType.TYPE.getCode());
int item = /* requested item */ 0;
if (!SUPPORTED_BLOB_INFO.contains(item)) {
// degrade gracefully instead of triggering the throw
return Optional.empty();
} Type guard
static boolean isSupportedBlobInfoItem(final int code) {
return code == FirebirdBlobInfoPacketType.NUM_SEGMENTS.getCode()
|| code == FirebirdBlobInfoPacketType.MAX_SEGMENT.getCode()
|| code == FirebirdBlobInfoPacketType.TOTAL_LENGTH.getCode()
|| code == FirebirdBlobInfoPacketType.TYPE.getCode();
} Try / catch
try {
packet.write(payload);
} catch (FirebirdProtocolException ex) {
// unknown info item: respond with isc_info_error / skip the item rather than killing the session if your layer can
log.warn("unsupported blob info item: {}", ex.getMessage());
} Prevention
- Pin client blob-info requests to the four implemented items
- Track upstream Firebird protocol coverage so newly needed items are added deliberately
When it happens
Trigger: Calling isc_blob_info with items such as isc_info_blob_collation or any item beyond NUM_SEGMENTS/MAX_SEGMENT/TOTAL_LENGTH/TYPE, causing FirebirdBlobInfoReturnPacket.write() to fall into the default case.
Common situations: Using a Firebird client/driver feature (e.g. Jaybird's metadata calls) that queries blob info items this proxy does not implement yet; upgrading a client that newly requests extra items.
Related errors
- Unknown database information request type %d
- Unknown database information request type %d
- Unknown statement info request type %d
- Can not locate agent jar file by URL `%s`.
- Truncated batch BLOB segment length
AI-assisted analysis of apache/shardingsphere@e952770a21 (2026-08-14).
Data as JSON: /api/errors/fecb7ed81af7884d.
Report an issue: GitHub.