Fix possible remote DoS of a running hunt game, and prevent a possible

theoretical attack involving >= 1 billion ammo.
This commit is contained in:
dholland 2009-06-28 18:59:37 +00:00
parent fe55ad324c
commit 4c08f5f97e

View File

@ -1,4 +1,4 @@
/* $NetBSD: answer.c,v 1.9 2008/01/28 03:23:29 dholland Exp $ */ /* $NetBSD: answer.c,v 1.10 2009/06/28 18:59:37 dholland Exp $ */
/* /*
* Copyright (c) 1983-2003, Regents of the University of California. * Copyright (c) 1983-2003, Regents of the University of California.
* All rights reserved. * All rights reserved.
@ -32,7 +32,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: answer.c,v 1.9 2008/01/28 03:23:29 dholland Exp $"); __RCSID("$NetBSD: answer.c,v 1.10 2009/06/28 18:59:37 dholland Exp $");
#endif /* not lint */ #endif /* not lint */
# include <ctype.h> # include <ctype.h>
@ -101,6 +101,12 @@ answer()
(void) read(newsock, (char *) &mode, sizeof mode); (void) read(newsock, (char *) &mode, sizeof mode);
mode = ntohl(mode); mode = ntohl(mode);
/*
* Ensure null termination.
*/
name[sizeof(name)-1] = '\0';
Ttyname[sizeof(Ttyname)-1] = '\0';
/* /*
* Turn off blocking I/O, so a slow or dead terminal won't stop * Turn off blocking I/O, so a slow or dead terminal won't stop
* the game. All subsequent reads check how many bytes they read. * the game. All subsequent reads check how many bytes they read.
@ -317,7 +323,7 @@ stplayer(newpp, enter_status)
y = STAT_PLAY_ROW + 1 + (newpp - Player); y = STAT_PLAY_ROW + 1 + (newpp - Player);
for (pp = Player; pp < End_player; pp++) { for (pp = Player; pp < End_player; pp++) {
if (pp != newpp) { if (pp != newpp) {
char smallbuf[10]; char smallbuf[16];
pp->p_ammo += NSHOTS; pp->p_ammo += NSHOTS;
newpp->p_ammo += NSHOTS; newpp->p_ammo += NSHOTS;