| Previous | Next |
| RPC_X_ENUM_VALUE_OUT_OF_RANGE | RPC_X_BAD_STUB_DATA |
RPC_X_BYTE_COUNT_TOO_SMALL
Count fields and transferred data disagree
RPC_X_BYTE_COUNT_TOO_SMALL points to an inconsistency between data and a count used by the RPC marshaler. MIDL array and sized-pointer attributes define how much storage is represented and how many elements are transmitted. A receiving stub cannot safely reconstruct the value when a length, size, or correlated byte count is smaller than the payload or structure layout requires.
This is not necessarily a local heap allocation failure. It commonly indicates an interface-contract mismatch: bytes versus elements, stale length metadata, truncation, integer-overflow arithmetic, or client and server implementations that disagree about the serialized structure.
Frequent sources
- A field measured in bytes is populated with an element count, or the reverse.
[size_is],[length_is],[first_is], or[last_is]expressions do not match the actual buffer supplied by the caller.- A structure changed size between builds because of an incompatible IDL revision, custom marshal routine, or ABI assumption.
- Multiplication used to derive a byte count overflowed or was narrowed before the RPC call.
What to capture
- For each variable-length argument, log the declared element size, allocation size, transmitted length, offset, and computed byte count.
- Validate counts before multiplication and verify that the final byte count fits the destination type.
- Inspect the IDL declarations together with the generated stubs; a C structure alone does not show all NDR correlation rules.
- Compare the error with
RPC_X_BAD_STUB_DATA: this code specifically points to insufficient count information, while bad stub data is the broader invalid-data condition.
References
Microsoft: size_is attribute · Microsoft: length_is attribute · The Open Group: DCE NDR arrays
Looking for a different code? Search another status or error code.