Fix: properly check for item disable status against segfault#72
Closed
metaq3 wants to merge 2 commits into
Closed
Conversation
Item disabling with team gametypes no more leads to segfault on native builds, items respawn correctly.
Owner
|
fixed in 9503efa |
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.
Trivia
I have a teamplay server with
g_gametype 3and some items disabled throughdisable_<item>cvars. I noticed, that on some maps my server was randomly crashing withSIGSEGV( I'm using native libraries ).This is really rare bug. I found only one way to reproduce it with guaranteed result.
Reliable way to reproduce
Build native libraries and copy them into baseq3. Download map "battleforged" ( battleforged.zip ) and make a simple config, which disables a bunch of items and adds some bots:
disable.cfg
Start a server through command line:
After connecting to a server, restart the map through
map_restartand wait, untill it crashes. I sped up game withtimescale 100andsv_fps 250, so I can observe crash after about 10 seconds of watching bots playing.Why it's crashing
When an item is disabled through a cvar, the
itemfield ofgentity_tis leftNULL.RespawnItemwants to respawn an item and tries to dereference nullishent->item, which leads to segmentation violation. This is also true for "teamed" items, where a random picked item from the "team" could be disabled, thus have nullishent->item.