Repository navigation
fix(plugin): avoid BanClient before the player entity exists (#1579) - #1580
Merged
Merged
Conversation
VerifyBan runs from OnClientAuthorized, which can land before OnClientPutInServer. BanClient() resolves the client through ReferenceToIndex(), which returns -1 while the edict has no entity, so SourceMod threw "Client index -1 is invalid" and the banned player was never kicked. #1572 introduced the BanClient call; the previous banid + KickClient path did not depend on the entity. Mirror BanClient's BANFLAG_AUTO with entity-independent natives: ban the engine auth string via BanIdentity (keeps Synergy's native Steam3 form) and KickClient; when the auth lookup fails or the server is LAN, KickClientEx then ban the IP, matching BanClient's kick-then-addip order.
Rushaway
added a commit
to srcdslab/sourcebans-pp
that referenced
this pull request
Sep 30, 2026
VerifyBan runs from OnClientAuthorized, which can land before OnClientPutInServer. BanClient() resolves the client through ReferenceToIndex(), which returns -1 while the edict has no entity, so SourceMod threw "Client index -1 is invalid" and the banned player was never kicked. Ban the engine auth string with BanIdentity (keeps Synergy's native Steam3 form) and KickClient; when the auth lookup fails or the server is LAN, KickClientEx then ban the IP, matching BanClient's kick-then-addip order. Port of upstream sbpp#1580 (a418884).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1579.
Summary
VerifyBanruns from the threaded ban check started inOnClientAuthorized, which can land beforeOnClientPutInServer. SourceMod'sBanClient()resolves the client withReferenceToIndex(), which returns-1while the client's edict has no game entity yet. That raisedClient index -1 is invalid, and the banned player was never kicked.BanClientcall. The previousbanid+KickClientpath did not depend on the entity.BanClient'sBANFLAG_AUTO:BanIdentity, which keeps Synergy's native Steam3 form from fix(plugin): use native auth IDs for engine bans #1572, thenKickClient.KickClientExand then ban the IP. This matchesBanClient's kick-then-addiporder.BanClientcall, inPrepareBan, is already gated onIsClientInGame(target), so it is unaffected.