From dbef3aa172408edc5c7f962ca48744f544c95280 Mon Sep 17 00:00:00 2001
From: xboi209 <xboi209@gmail.com>
Date: Fri, 5 Aug 2016 01:37:19 -0700
Subject: [PATCH 1/3] Remove dynamic exception specification from functions in
 luawrapper.cpp and luawrapper.h

---
 .gitignore               |   1 +
 src/bnetd/luawrapper.cpp |  50 ++++--
 src/bnetd/luawrapper.h   | 342 +++++++++++++++++++++++++++------------
 3 files changed, 276 insertions(+), 117 deletions(-)

diff --git a/.gitignore b/.gitignore
index 93d0648..f5e7489 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
 /conf
 /cmake/Modules
 /build
+/lua5.1
diff --git a/src/bnetd/luawrapper.cpp b/src/bnetd/luawrapper.cpp
index 3633209..5f266e0 100644
--- a/src/bnetd/luawrapper.cpp
+++ b/src/bnetd/luawrapper.cpp
@@ -1,7 +1,29 @@
-
 /*
- * Copyright (C) Anton Burdinuk
- */
+*	Copyright (c) 2009, Anton Burdinuk <clark15b@gmail.com>
+*	All rights reserved.
+*
+*	Redistribution and use in source and binary forms, with or without
+*	modification, are permitted provided that the following conditions are met:
+*	* Redistributions of source code must retain the above copyright
+*	notice, this list of conditions and the following disclaimer.
+*	* Redistributions in binary form must reproduce the above copyright
+*	notice, this list of conditions and the following disclaimer in the
+*	documentation and/or other materials provided with the distribution.
+*	* Neither the name of the organization nor the
+*	names of its contributors may be used to endorse or promote products
+*	derived from this software without specific prior written permission.
+*
+*	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+*	ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+*	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+*	DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+*	DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+*	(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+*	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+*	ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+*	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+*	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
 
 #ifdef WITH_LUA
 #include "luawrapper.h"
@@ -14,7 +36,7 @@ namespace lua
 }
 
 
-void lua::throw_lua_exception(lua_State* st, const std::string& addinfo) throw(std::exception)
+void lua::throw_lua_exception(lua_State* st, const std::string& addinfo)
 {
 	size_t len = 0;
 
@@ -30,32 +52,32 @@ void lua::throw_lua_exception(lua_State* st, const std::string& addinfo) throw(s
 
 	lua_pop(st, 1);
 
-	throw(exception(s));
+	throw exception(s);
 }
 
-void lua::vm::initialize(void) throw(std::exception)
+void lua::vm::initialize()
 {
 	done();
 
 	st = lua_open();
 
 	if (!st)
-		throw(exception("can`t create lua virtual machine instance"));
+		throw exception("can`t create lua virtual machine instance");
 
 	luaL_openlibs(st);
 }
 
-void lua::vm::load_file(const char* file) throw(std::exception)
+void lua::vm::load_file(const char* file)
 {
 	if (!st)
-		throw(exception("lua virtual machine is not ready"));
+		throw exception("lua virtual machine is not ready");
 
 	if (luaL_loadfile(st, file) || lua_pcall(st, 0, 0, 0))
 		throw_lua_exception(st);
 }
 
 
-void lua::vm::eval(const std::string& stmt, int offset) throw(std::exception)
+void lua::vm::eval(const std::string& stmt, int offset)
 {
 	enum { max_chunk_name_len = 64 };
 
@@ -71,7 +93,7 @@ void lua::vm::eval(const std::string& stmt, int offset) throw(std::exception)
 }
 
 
-void lua::bind::lookup(const char* name) throw()
+void lua::bind::lookup(const char* name)
 {
 	if (!refuse)
 	{
@@ -83,7 +105,7 @@ void lua::bind::lookup(const char* name) throw()
 	}
 }
 
-void lua::bind::end(void) throw()
+void lua::bind::end(void)
 {
 	if (!refuse && mutex)
 	{
@@ -98,7 +120,7 @@ void lua::bind::end(void) throw()
 	}
 }
 
-void lua::bind::invoke(void) throw(std::exception)
+void lua::bind::invoke(void)
 {
 	int function_index = -(args_number + 1);
 
@@ -113,7 +135,7 @@ void lua::bind::invoke(void) throw(std::exception)
 	}
 }
 
-void lua::bind::m_invoke(void) throw(std::exception)
+void lua::bind::m_invoke(void)
 {
 	if (!refuse)
 	{
diff --git a/src/bnetd/luawrapper.h b/src/bnetd/luawrapper.h
index 3f5f7a1..211a296 100644
--- a/src/bnetd/luawrapper.h
+++ b/src/bnetd/luawrapper.h
@@ -1,11 +1,33 @@
 /*
- * Copyright (C) Anton Burdinuk
- * https://code.google.com/p/luasp/
- */
+*	Copyright (c) 2009, Anton Burdinuk <clark15b@gmail.com>
+*	All rights reserved.
+*
+*	Redistribution and use in source and binary forms, with or without
+*	modification, are permitted provided that the following conditions are met:
+*	* Redistributions of source code must retain the above copyright
+*	notice, this list of conditions and the following disclaimer.
+*	* Redistributions in binary form must reproduce the above copyright
+*	notice, this list of conditions and the following disclaimer in the
+*	documentation and/or other materials provided with the distribution.
+*	* Neither the name of the organization nor the
+*	names of its contributors may be used to endorse or promote products
+*	derived from this software without specific prior written permission.
+*
+*	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+*	ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+*	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+*	DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+*	DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+*	(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+*	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+*	ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+*	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+*	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
 
 #ifdef WITH_LUA
-#ifndef __LUAWRAPPER_H
-#define __LUAWRAPPER_H
+#ifndef INCLUDED_LUAWRAPPER_H
+#define INCLUDED_LUAWRAPPER_H
 
 extern "C"
 {
@@ -14,11 +36,11 @@ extern "C"
 #include <lualib.h>
 }
 
-#include <typeinfo>
-#include <string>
 #include <cstring>
-#include <stdexcept>
 #include <map>
+#include <stdexcept>
+#include <string>
+#include <typeinfo>
 #include <vector>
 
 namespace lua
@@ -27,56 +49,85 @@ namespace lua
 
 	class exception : public std::exception
 	{
-	protected:
-		std::string _what;
 	public:
-		explicit exception(const std::string s) :_what(s) {}
+		explicit exception(const std::string s) : m_what(s)
+		{
+		}
 
-		virtual ~exception(void) throw() {}
+		virtual ~exception()
+		{
+		}
 
-		virtual const char* what(void) const throw() { return _what.c_str(); }
+		virtual const char* what() const
+		{
+			return this->m_what.c_str();
+		}
+	protected:
+		std::string m_what;
 	};
 
 	// check Lua VM for errors and throw C++ lua::exception
-	void throw_lua_exception(lua_State* st, const std::string& addinfo = std::string()) throw(std::exception);
+	void throw_lua_exception(lua_State* st, const std::string& addinfo = std::string());
 
 	// Lua VM instance
 
 	class vm
 	{
+	public:
+		vm() : st(nullptr), mutex(0)
+		{
+		}
+
+		explicit vm(lua_State* _st) : st(_st), mutex(0)
+		{
+		}
+
+		~vm()
+		{
+			this->done();
+		}
+
+		// create new Lua VM instance
+		void initialize();
+
+		// load and execute Lua script from file
+		void load_file(const char* file);
+
+		// load and execute Lua statement from string
+		void eval(const std::string& stmt, int offset = 0);
+
+		// register external C function
+		void reg(const char* name, lua_CFunction func)
+		{
+			lua_register(st, name, func);
+		}
+		void reg(const char* package, const luaL_Reg* members)
+		{
+			luaL_register(st, package, members);
+		}
+
+		// destroy Lua VM instance
+		void done()
+		{
+			if (st)
+			{
+				lua_close(st);
+			}
+		}
+
+		lua_State* get_st() const noexcept
+		{
+			return st;
+		}
+
+		friend class stack;
+		friend class bind;
 	protected:
 		lua_State* st;
 
 		// mutex for lua::bind
 		int mutex;
 
-	public:
-		vm(void) :st(0), mutex(0) {}
-
-		explicit vm(lua_State* _st) :st(_st), mutex(0) {}
-
-		~vm(void) throw() { done(); }
-
-		// create new Lua VM instance
-		void initialize(void) throw(std::exception);
-
-		// load and execute Lua script from file
-		void load_file(const char* file) throw(std::exception);
-
-		// load and execute Lua statement from string
-		void eval(const std::string& stmt, int offset = 0) throw(std::exception);
-
-		// register external C function
-		void reg(const char* name, lua_CFunction func) throw() { lua_register(st, name, func); }
-		void reg(const char* package, const luaL_Reg* members) throw() { luaL_register(st, package, members); }
-
-		// destroy Lua VM instance
-		void done(void) throw() { if (st) { lua_close(st); st = 0; } }
-
-		lua_State* get_st(void) const throw() { return st; }
-
-		friend class stack;
-		friend class bind;
 	};
 
 
@@ -84,30 +135,55 @@ namespace lua
 
 	class stack
 	{
-	protected:
-		lua_State* st;
-
-		int st_top;
-
 	public:
 		// initialize stack
-		stack(void) :st(0), st_top(0) {}
-		explicit stack(lua_State* _st) :st(_st), st_top(_st ? lua_gettop(_st) : 0) {}
-		explicit stack(const vm& _vm) :st(_vm.st), st_top(_vm.st ? lua_gettop(_vm.st) : 0) {}
+		stack() : st(nullptr), st_top(0)
+		{
+		}
+		explicit stack(lua_State* _st) : st(_st), st_top(_st ? lua_gettop(_st) : 0)
+		{
+		}
+		explicit stack(const vm& _vm) : st(_vm.st), st_top(_vm.st ? lua_gettop(_vm.st) : 0)
+		{
+		}
 
 		// return current stack size
-		int size(void) const throw() { return lua_gettop(st); }
+		int size() const
+		{
+			return lua_gettop(st);
+		}
 
 		// find field in table
-		void find(const char* name, int index = LUA_GLOBALSINDEX) throw() { lua_getfield(st, index, name); }
+		void find(const char* name, int index = LUA_GLOBALSINDEX)
+		{
+			lua_getfield(st, index, name);
+		}
 
 		// push to stack scalar
-		void push(unsigned int v) throw() { lua_pushinteger(st, v); }
-		void push(int v) throw() { lua_pushinteger(st, v); }
-		void push_boolean(int v) throw() { lua_pushboolean(st, v); }
-		void push(double v) throw() { lua_pushnumber(st, v); }
-		void push(const std::string& v) throw() { lua_pushlstring(st, v.c_str(), v.length()); }
-		void push(const char* v) throw() { lua_pushlstring(st, v, std::strlen(v) ); }
+		void push(unsigned int v)
+		{
+			lua_pushinteger(st, v);
+		}
+		void push(int v)
+		{
+			lua_pushinteger(st, v);
+		}
+		void push_boolean(int v)
+		{
+			lua_pushboolean(st, v);
+		}
+		void push(double v)
+		{
+			lua_pushnumber(st, v);
+		}
+		void push(const std::string& v)
+		{
+			lua_pushlstring(st, v.c_str(), v.length());
+		}
+		void push(const char* v)
+		{
+			lua_pushlstring(st, v, std::strlen(v));
+		}
 
 		// push to stack std::map
 		template<typename _key, typename _val, typename _comp, typename _alloc>
@@ -139,16 +215,28 @@ namespace lua
 
 
 		// recv from stack scalar
-		void get(unsigned int& v, int index) throw() { v = lua_tointeger(st, index); }
-		void get(int& v, int index) throw() { v = lua_tointeger(st, index); }
-		void get(bool& v, int index) throw() { v = lua_toboolean(st, index); }
-		void get(double& v, int index) throw() { v = lua_tonumber(st, index); }
-		void get(const char*& v, int index) throw()
+		void get(unsigned int& v, int index)
+		{
+			v = lua_tointeger(st, index);
+		}
+		void get(int& v, int index)
+		{
+			v = lua_tointeger(st, index);
+		}
+		void get(bool& v, int index)
+		{
+			v = lua_toboolean(st, index);
+		}
+		void get(double& v, int index)
+		{
+			v = lua_tonumber(st, index);
+		}
+		void get(const char*& v, int index)
 		{
 			size_t len = 0;
 			v = lua_tolstring(st, index, &len);
 		}
-		void get(std::string& v, int index) throw()
+		void get(std::string& v, int index)
 		{
 			size_t len = 0;
 
@@ -159,7 +247,7 @@ namespace lua
 
 		// recv from stack std::map
 		template<typename _key, typename _val, typename _comp, typename _alloc>
-		void get(std::map<_key, _val, _comp, _alloc>& v, int index) throw()
+		void get(std::map<_key, _val, _comp, _alloc>& v, int index)
 		{
 			if (lua_type(st, index) == LUA_TTABLE)
 			{
@@ -180,7 +268,7 @@ namespace lua
 
 		// recv from stack std::vector (use std::map instead)
 		template<typename _val, typename _alloc>
-		void get(std::vector<_val, _alloc>& v, int index) throw()
+		void get(std::vector<_val, _alloc>& v, int index)
 		{
 			if (lua_type(st, index) == LUA_TTABLE)
 			{
@@ -211,7 +299,7 @@ namespace lua
 
 		// get value of stack with index check
 		template<typename T>
-		void at(int index, T& v) throw()
+		void at(int index, T& v)
 		{
 			if (index > 0 && index <= size())
 				get(v, index);
@@ -220,8 +308,17 @@ namespace lua
 		}
 
 		// pop last values from stack
-		void pop(void) throw() { lua_pop(st, 1); }
-		void popn(int n) throw() { lua_pop(st, n); }
+		void pop()
+		{
+			lua_pop(st, 1);
+		}
+		void popn(int n)
+		{
+			lua_pop(st, n);
+		}
+	protected:
+		lua_State* st;
+		int st_top;
 	};
 
 
@@ -237,12 +334,14 @@ namespace lua
 
 	class lookup			// find field in last table (or LUA_GLOBALSINDEX if first)
 	{
-	protected:
-		std::string name;
 	public:
-		lookup(const std::string& _name) :name(_name) {}
+		lookup(const std::string& _name) :name(_name)
+		{
+		}
 
 		friend class bind;
+	protected:
+		std::string name;
 	};
 
 
@@ -250,16 +349,20 @@ namespace lua
 
 	class table : protected stack
 	{
-	protected:
-		int index;
 	public:
-		table(void) :stack(0), index(0) {}
-		explicit table(lua_State* _st, int _index) :stack(_st), index(_index) {}
-		explicit table(vm& _vm) :stack(_vm.get_st()), index(LUA_GLOBALSINDEX) {}
+		table() : stack(nullptr), index(0)
+		{
+		}
+		explicit table(lua_State* _st, int _index) : stack(_st), index(_index)
+		{
+		}
+		explicit table(vm& _vm) :stack(_vm.get_st()), index(LUA_GLOBALSINDEX)
+		{
+		}
 
 		// get field value
 		template<typename _VAL>
-		void query(const char* name, _VAL& val) throw()
+		void query(const char* name, _VAL& val)
 		{
 			if (st)
 			{
@@ -271,7 +374,7 @@ namespace lua
 
 		// set field value
 		template<typename _VAL>
-		void update(const char* name, const _VAL& val) throw()
+		void update(const char* name, const _VAL& val)
 		{
 			if (st)
 			{
@@ -279,6 +382,8 @@ namespace lua
 				lua_setfield(st, index, name);
 			}
 		}
+	protected:
+		int index;
 	};
 
 
@@ -286,28 +391,26 @@ namespace lua
 
 	class bind : protected stack
 	{
-	private:
-		int& mutex;
-		int refuse;
-
-	protected:
-		int args_number, retvals_number;
-		int cur_index;
-
 	public:
-		explicit bind(vm& _vm) :stack(_vm), refuse(0), args_number(0), retvals_number(0),
+		explicit bind(vm& _vm) : stack(_vm), refuse(0), args_number(0), retvals_number(0),
 			cur_index(LUA_GLOBALSINDEX), mutex(_vm.mutex)
 		{
-			if (mutex) refuse++; else mutex++;
+			if (mutex)
+				refuse++;
+			else
+				mutex++;
 		}
 
-		~bind(void) throw() { end(); }
+		~bind()
+		{
+			end();
+		}
 
 		// find field in last table
-		void lookup(const char* name) throw();
+		void lookup(const char* name);
 
 		// return lua::table object for last table
-		lua::table table(void) throw()
+		lua::table table()
 		{
 			if (lua_type(st, -1) == LUA_TTABLE)
 				return lua::table(st, lua_gettop(st));
@@ -315,19 +418,27 @@ namespace lua
 		}
 
 		// execute last function
-		void invoke(void) throw(std::exception);
+		void invoke();
 
 		// execute last function as method
-		void m_invoke(void) throw(std::exception);
+		void m_invoke();
 
 		// end transaction (free Lua stack)
-		void end(void) throw();
+		void end();
 
 		// push function argument to Lua stack
-		template<typename T> bind& operator<<(const T& v) throw() { if (!refuse) { push(v); args_number++; } return *this; }
+		template<typename T> bind& operator<<(const T& v)
+		{
+			if (!refuse)
+			{
+				push(v);
+				args_number++
+			}
+			return *this;
+		}
 
 		// pop function return value from stack
-		template<typename T> bind& operator>>(T& v) throw()
+		template<typename T> bind& operator >> (T& v)
 		{
 			if (refuse || retvals_number < 1)
 			{
@@ -347,15 +458,40 @@ namespace lua
 		}
 
 		// for manipulators
-		bind& operator<<(const lua::lookup& f) throw(std::exception) { bind::lookup(f.name.c_str()); return *this; }
-		bind& operator<<(const lua::invoke_type&) throw(std::exception) { bind::invoke(); return *this; }
-		bind& operator<<(const lua::m_invoke_type&) throw(std::exception) { bind::m_invoke(); return *this; }
-		bind& operator<<(const lua::release_type&) throw(std::exception) { bind::end(); return *this; }
+		bind& operator<<(const lua::lookup& f)
+		{
+			bind::lookup(f.name.c_str());
+			return *this;
+		}
+		bind& operator<<(const lua::invoke_type&)
+		{
+			bind::invoke();
+			return *this;
+		}
+		bind& operator<<(const lua::m_invoke_type&)
+		{
+			bind::m_invoke();
+			return *this;
+		}
+		bind& operator<<(const lua::release_type&)
+		{
+			bind::end();
+			return *this;
+		}
+
+	protected:
+		int args_number;
+		int retvals_number;
+		int cur_index;
+
+	private:
+		int& mutex;
+		int refuse;
 	};
 
-	typedef bind transaction;
-	typedef lookup function;
-	typedef lookup field;
+	using transaction = bind;
+	using function = lookup;
+	using field = lookup;
 }
 
 
-- 
2.45.2


From 134448e67a6121424ec93700eb299280c241656f Mon Sep 17 00:00:00 2001
From: xboi209 <xboi209@gmail.com>
Date: Fri, 5 Aug 2016 01:39:49 -0700
Subject: [PATCH 2/3] Added missing semicolon

---
 src/bnetd/luawrapper.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bnetd/luawrapper.h b/src/bnetd/luawrapper.h
index 211a296..27cf703 100644
--- a/src/bnetd/luawrapper.h
+++ b/src/bnetd/luawrapper.h
@@ -432,7 +432,7 @@ namespace lua
 			if (!refuse)
 			{
 				push(v);
-				args_number++
+				args_number++;
 			}
 			return *this;
 		}
-- 
2.45.2


From 6436e2fe9b93b29a62616c09a29ff91b1ca9205b Mon Sep 17 00:00:00 2001
From: xboi209 <xboi209@gmail.com>
Date: Fri, 5 Aug 2016 01:43:04 -0700
Subject: [PATCH 3/3] Remove track.muleslow.net from the tracker list

---
 conf/bnetd.conf.in    | 2 +-
 conf/bnetd.conf.win32 | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/conf/bnetd.conf.in b/conf/bnetd.conf.in
index fa2fc92..9ff0830 100644
--- a/conf/bnetd.conf.in
+++ b/conf/bnetd.conf.in
@@ -452,7 +452,7 @@ track = 60
 # Tracking server(s)
 # Use a comma delimited list of hostnames with optional UDP port numbers
 # after colons. (port 6114 is the default for the newer tracking protocol)
-trackaddrs = "track.pvpgn.org,bntrack.darkwings.org,track.muleslow.net,bnet.mivabe.nl,track.eurobattle.net"
+trackaddrs = "track.pvpgn.org,bntrack.darkwings.org,bnet.mivabe.nl,track.eurobattle.net"
 
 # Change these to match your system, for example:
 location = "unknown"
diff --git a/conf/bnetd.conf.win32 b/conf/bnetd.conf.win32
index b4d1712..dccf8c9 100644
--- a/conf/bnetd.conf.win32
+++ b/conf/bnetd.conf.win32
@@ -432,7 +432,7 @@ track = 60
 # Tracking server(s)
 # Use a comma delimited list of hostnames with optional UDP port numbers
 # after colons. (port 6114 is the default for the newer tracking protocol)
-trackaddrs = "track.pvpgn.org,bntrack.darkwings.org,track.muleslow.net,bnet.mivabe.nl,track.eurobattle.net"
+trackaddrs = "track.pvpgn.org,bntrack.darkwings.org,bnet.mivabe.nl,track.eurobattle.net"
 
 # Change these to match your system, for example:
 location = "unknown"
-- 
2.45.2