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

  1. Ensure DeserializePacketHeader in your INetworkChannelHelper always returns a valid IPacketHeader or signals failure (so ProcessPacketHeader throws earlier with a clearer error).
  2. Null-check the header returned by your helper before proceeding.
  3. 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

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


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)