EllanJiang/GameFramework · error · GameFrameworkException
Packet header is invalid.
Error message
Packet header is invalid.
What it means
ReceiveState.PrepareForPacket prepares the receive buffer for an incoming packet body, but the IPacketHeader passed in is null, so it throws GameFrameworkException. Normally called by ProcessPacketHeader after a header was successfully deserialized; a null header reaching this point indicates the helper produced a null header despite reporting success.
Solutions
- Ensure DeserializePacketHeader in your INetworkChannelHelper always returns a valid IPacketHeader or signals failure (so ProcessPacketHeader throws earlier with a clearer error).
- Null-check the header returned by your helper before proceeding.
- Review any custom ReceiveState usage that calls PrepareForPacket with externally sourced headers.
Example fix
// before
return Deserialize(bytes); // may return null
// after
var header = Deserialize(bytes);
if (header == null) { return null; } // fail the header step in ProcessPacketHeader
return header; Defensive patterns
Strategy: validation
Validate before calling
public static bool IsValidHeader(IPacketHeader h) => h != null && h.PacketLength >= 0;
Type guard
public static bool TryGetHeader(byte[] bytes, out IPacketHeader header) { header = helper.DeserializePacketHeader(bytes); return header != null; } Try / catch
try { ReceiveStatePrepare(header); } catch (GameFrameworkException ex) when (ex.Message == "Packet header is invalid.") { LogCorruptHeader(); channel.Close(); } Prevention
- Never return null from DeserializePacketHeader; signal failure explicitly
- Cover all header versions in the deserializer switch
- Add unit tests for unknown/legacy header types
- Null-check helper output before passing it on
When it happens
Trigger: A custom INetworkChannelHelper.DeserializePacketHeader returning null without failing; header handler bugs that return null on some packet types; custom code calling PrepareForPacket directly with a null header.
Common situations: Hand-written packet header deserializers that forget to return the parsed object on some code path; protocol upgrades where new header versions fall through to a null return.
Related errors
- Packet is invalid.
- Packet header is invalid.
- Results is invalid.
- Network channel helper is invalid.
- Resource manager is invalid.
AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15).
Data as JSON: /api/errors/a15bc2f451373fe7.
Report an issue: GitHub.
Appendix: source
Thrown at GameFramework/Network/NetworkManager.ReceiveState.cs:54
public IPacketHeader PacketHeader
{
get
{
return m_PacketHeader;
}
}
public void PrepareForPacketHeader(int packetHeaderLength)
{
Reset(packetHeaderLength, null);
}
public void PrepareForPacket(IPacketHeader packetHeader)
{
if (packetHeader == null)
{
throw new GameFrameworkException("Packet header is invalid.");
}
Reset(packetHeader.PacketLength, packetHeader);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (m_Disposed)
{
return;
}
View on GitHub (pinned to d0c010b051)