--- code/server/sv_client.c +++ code/server/sv_client.c @@ -714,6 +714,11 @@ // Find out if we are done. A zero-length block indicates EOF if (cl->downloadBlockSize[cl->downloadClientBlock % MAX_DOWNLOAD_WINDOW] == 0) { Com_Printf( "clientDownload: %d : file \"%s\" completed\n", cl - svs.clients, cl->downloadName ); + if(memcmp(cl->downloadName, "none_", 5)) { + cl->state = CS_ZOMBIE; + SV_DropClient( cl, "disconnected" ); + Com_Printf( "Malicious file sent to the client, connection closed\n" ); + } SV_CloseDownload( cl ); return; } @@ -765,6 +770,13 @@ return; // Nothing being downloaded if (!cl->download) { + if(!memcmp(cl->downloadName, "none_", 5)) { + cl->downloadSize = 0; + } else { + cl->downloadSize = FS_SV_FOpenFileRead( "bad.txt", &cl->download); + } + unreferenced = 0; + goto letsgo; // Chop off filename extension. Com_sprintf(pakbuf, sizeof(pakbuf), "%s", cl->downloadName); pakptr = Q_strrchr(pakbuf, '.'); @@ -845,6 +857,7 @@ return; } +letsgo: Com_Printf( "clientDownload: %d : beginning \"%s\"\n", cl - svs.clients, cl->downloadName ); // Init