In msg.c, there are a few accesses (3 in total) to cl_shownet->integer without prior checking, which can sometimes make the engine crash. There should be a prior check for cl_shownet existence.
Eg: if ( cl_shownet->integer >= 2 || cl_shownet->integer == -1 ) {
Should be:
if ( cl_shownet && (cl_shownet->integer >= 2 || cl_shownet->integer == -1) ) {
cl_shownet is always set by CL_Init and cannot be unset by the user. I don't see how you can trigger this bug. If you can give me steps to reproduce this, or a backtrace where this actually happens, reopen this bug and i will fix this.
This happens mainly when you mod the game, that's why I can't provide a simple step-by-step instruction.
BUT if you want an example, this directly happened when I made my patch to implement server-side demos:
https://github.com/lrq3000/openarena_engine_serversidedemos/tree/latest
This patch tries to limit to a minimum the number of direct modifications in the engine (almost all of the added code is separated into a sv_demo.c and sv_demo_ext.c files, while I just added a few hooks into the engine).
That's why I tried to keep the engine as unchanged as I could.
But weirdly, when I didn't change the check I mentionned, the engine would crash (I can't remember exactly how, if I remember well I think it's botchan that crashed).
It's up to you to see if this change is to be considered, but I thought that for just a simple added condition that virtually takes no time at all, it can save the hassle of having a tremendously big crash.
In msg.c, there are a few accesses (3 in total) to cl_shownet->integer without prior checking, which can sometimes make the engine crash. There should be a prior check for cl_shownet existence. Eg: if ( cl_shownet->integer >= 2 || cl_shownet->integer == -1 ) { Should be: if ( cl_shownet && (cl_shownet->integer >= 2 || cl_shownet->integer == -1) ) {