(svn r12963) -Fix (r12960): loading some NewGRFs could cause an infinite loop.
authorrubidium
Mon, 05 May 2008 22:35:33 +0000
changeset 10421 1daeaead8993
parent 10420 3cbae348882c
child 10422 4b53a0cee8d8
(svn r12963) -Fix (r12960): loading some NewGRFs could cause an infinite loop.
src/fileio.cpp
src/network/network_client.cpp
--- a/src/fileio.cpp	Mon May 05 22:22:12 2008 +0000
+++ b/src/fileio.cpp	Mon May 05 22:35:33 2008 +0000
@@ -45,7 +45,7 @@
 /* Get current position in file */
 uint32 FioGetPos()
 {
-	return _fio.pos + (_fio.buffer - _fio.buffer_start) - FIO_BUFFER_SIZE;
+	return _fio.pos + (_fio.buffer - _fio.buffer_end);
 }
 
 const char *FioGetFilename(uint8 slot)
@@ -92,7 +92,11 @@
 {
 	if (_fio.buffer == _fio.buffer_end) {
 		_fio.buffer = _fio.buffer_start;
-		_fio.pos += fread(_fio.buffer, 1, FIO_BUFFER_SIZE, _fio.cur_fh);
+		size_t size = fread(_fio.buffer, 1, FIO_BUFFER_SIZE, _fio.cur_fh);
+		_fio.pos += size;
+		_fio.buffer_end = _fio.buffer_start + size;
+
+		if (size == 0) return 0;
 	}
 	return *_fio.buffer++;
 }
--- a/src/network/network_client.cpp	Mon May 05 22:22:12 2008 +0000
+++ b/src/network/network_client.cpp	Mon May 05 22:35:33 2008 +0000
@@ -595,7 +595,7 @@
 
 	if (maptype == MAP_PACKET_NORMAL) {
 		// We are still receiving data, put it to the file
-		if (fwrite(p->buffer + p->pos, 1, p->size - p->pos, file_pointer) != p->size - p->pos) {
+		if (fwrite(p->buffer + p->pos, 1, p->size - p->pos, file_pointer) != (size_t)(p->size - p->pos)) {
 			_switch_mode_errorstr = STR_NETWORK_ERR_SAVEGAMEERROR;
 			return NETWORK_RECV_STATUS_SAVEGAME;
 		}