From 50516f2372074c376fe89c6b7bb51b5105803a59 Mon Sep 17 00:00:00 2001 From: rubidium Date: Mon, 5 May 2008 22:35:33 +0000 Subject: (svn r12963) -Fix (r12960): loading some NewGRFs could cause an infinite loop. --- src/fileio.cpp | 8 ++++++-- src/network/network_client.cpp | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/fileio.cpp b/src/fileio.cpp index 184d773ec..b28a27a6b 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -45,7 +45,7 @@ static Fio _fio; /* 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 @@ byte FioReadByte() { 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++; } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 7a1492b11..65eb3e31b 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -595,7 +595,7 @@ DEF_CLIENT_RECEIVE_COMMAND(PACKET_SERVER_MAP) 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; } -- cgit v1.2.3-54-g00ecf