I have a strange feeling that the "fix" introduced in rev.9989 causes the crash.
Well, what do we have here ?
case OP_CALLBACKREQUESTED: {
AddDebugLogLineM(false,logServer,wxT("Server: OP_CALLBACKREQUESTED"));
theStats::AddDownOverheadServer(size);
if (size >= 6) {
CMemFile data(packet,size);
uint32 dwIP = data.ReadUInt32();
uint16 nPort = data.ReadUInt16();
snip
CUpDownClient* client = theApp->clientlist->FindClientByIP(dwIP,nPort);
if (size >= 23 && client->HasValidHash()){
snip
if (client) {
client->TryToConnect();
} else {
client = new CUpDownClient(nPort,dwIP,0,0,0, true, true);
theApp->clientlist->AddClient(client);
client->TryToConnect();
}
Server sends us an IP. We look up the client matching the IP and dereference it without checking first if we got a valid result. FindClientByIP returns NULL if there's no client to the IP. So the bug is right here.
And further down, after using client-> several times it finally checks if it's != 0 and creates it.

I don't see the connection to 9989, but I don't believe in such a coincidence either. Anyway, ServerSocket.cpp should be fixed with 10005.