Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Jun 2010 08:17:05 GMT
From:      David DEMELIER <demelier.david@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/148081: games/teeworlds server segfaults
Message-ID:  <201006230817.o5N8H59T034029@www.freebsd.org>
Resent-Message-ID: <201006230820.o5N8K2om094449@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         148081
>Category:       ports
>Synopsis:       games/teeworlds server segfaults
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jun 23 08:20:01 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     David DEMELIER
>Release:        8.1-PRERELEASE
>Organization:
>Environment:
FreeBSD Melon.malikania.fr 8.1-PRERELEASE FreeBSD 8.1-PRERELEASE #10: Sun Jun 20 16:13:06 CEST 2010     root@Melon.malikania.fr:/usr/obj/usr/src/sys/Melon  amd64

>Description:
Hi,

As you can read here : 

http://www.teeworlds.com/forum/viewtopic.php?pid=68163

There was a problem while running the teeworlds server. Because they advised me to apply this patch :

http://www.teeworlds.com/track/teeworlds/changeset/2009

I made a patch that adds two patches in the games/teeworlds/files directory. Now it shouldn't segfault anymore.


>How-To-Repeat:
cd /usr/ports/games/teeworlds
make config # enable server only
teeworlds_srv 

-> Segmentation fault.
>Fix:
--- /dev/null	2010-06-23 09:45:16.000000000 +0200
+++ files/patch-e_network.c	2010-06-23 09:43:04.000000000 +0200
@@ -0,0 +1,15 @@
+--- src/engine/e_network.c.orig	2010-06-23 09:39:36.000000000 +0200
++++ src/engine/e_network.c	2010-06-23 09:41:29.000000000 +0200
+@@ -224,6 +224,12 @@
+ 
+ 	if(packet->flags&NET_PACKETFLAG_CONNLESS)
+ 	{
++		/* check the size of connless packet */
++		if(size < 6)
++		{
++			dbg_msg("", "connless packet too small, %d", size);
++			return -1;
++		}
+ 		packet->flags = NET_PACKETFLAG_CONNLESS;
+ 		packet->ack = 0;
+ 		packet->num_chunks = 0;
--- /dev/null	2010-06-23 09:45:22.000000000 +0200
+++ files/patch-es_server.c	2010-06-23 09:43:27.000000000 +0200
@@ -0,0 +1,20 @@
+--- src/engine/server/es_server.c.orig	2010-06-23 09:41:50.000000000 +0200
++++ src/engine/server/es_server.c	2010-06-23 09:42:21.000000000 +0200
+@@ -303,7 +303,7 @@
+ 
+ void server_kick(int client_id, const char *reason)
+ {
+-	if(client_id < 0 || client_id > MAX_CLIENTS)
++	if(client_id < 0 || client_id >= MAX_CLIENTS)
+ 		return;
+ 		
+ 	if(clients[client_id].state != SRVCLIENT_STATE_EMPTY)
+@@ -1244,7 +1244,7 @@
+ 		NETADDR addr;
+ 		int cid = atoi(str);
+ 
+-		if(cid < 0 || cid > MAX_CLIENTS || clients[cid].state == SRVCLIENT_STATE_EMPTY)
++		if(cid < 0 || cid >= MAX_CLIENTS || clients[cid].state == SRVCLIENT_STATE_EMPTY)
+ 		{
+ 			dbg_msg("server", "invalid client id");
+ 			return;
--- Makefile.orig	2010-06-23 10:04:01.000000000 +0200
+++ Makefile	2010-06-23 10:04:13.000000000 +0200
@@ -7,6 +7,7 @@
 
 PORTNAME=	teeworlds
 PORTVERSION=	0.5.2
+PORTREVISION=	1
 CATEGORIES=	games
 MASTER_SITES=	http://www.teeworlds.com/files/ \
 		http://mirror.amdmi3.ru/distfiles/


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006230817.o5N8H59T034029>