mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #2806 from janisozaur/fixes2
Fix zlib inflate on broken builders
This commit is contained in:
commit
4ff3c11366
|
@ -1278,13 +1278,22 @@ void Network::Server_Send_MAP(NetworkConnection* connection)
|
||||||
size_t chunksize = 1000;
|
size_t chunksize = 1000;
|
||||||
size_t out_size;
|
size_t out_size;
|
||||||
unsigned char *compressed = util_zlib_deflate(&buffer[0], size, &out_size);
|
unsigned char *compressed = util_zlib_deflate(&buffer[0], size, &out_size);
|
||||||
unsigned char *header = (unsigned char *)_strdup("open2_sv6_zlib");
|
unsigned char *header;
|
||||||
|
if (compressed != NULL)
|
||||||
|
{
|
||||||
|
header = (unsigned char *)_strdup("open2_sv6_zlib");
|
||||||
size_t header_len = strlen((char *)header) + 1; // account for null terminator
|
size_t header_len = strlen((char *)header) + 1; // account for null terminator
|
||||||
header = (unsigned char *)realloc(header, header_len + out_size);
|
header = (unsigned char *)realloc(header, header_len + out_size);
|
||||||
memcpy(&header[header_len], compressed, out_size);
|
memcpy(&header[header_len], compressed, out_size);
|
||||||
out_size += header_len;
|
out_size += header_len;
|
||||||
free(compressed);
|
free(compressed);
|
||||||
log_verbose("Sending map of size %u bytes, compressed to %u bytes", size, out_size);
|
log_verbose("Sending map of size %u bytes, compressed to %u bytes", size, out_size);
|
||||||
|
} else {
|
||||||
|
log_warning("Failed to compress the data, falling back to non-compressed sv6.");
|
||||||
|
header = (unsigned char *)malloc(size);
|
||||||
|
out_size = size;
|
||||||
|
memcpy(header, &buffer[0], size);
|
||||||
|
}
|
||||||
for (size_t i = 0; i < out_size; i += chunksize) {
|
for (size_t i = 0; i < out_size; i += chunksize) {
|
||||||
int datasize = (std::min)(chunksize, out_size - i);
|
int datasize = (std::min)(chunksize, out_size - i);
|
||||||
std::unique_ptr<NetworkPacket> packet = std::move(NetworkPacket::Allocate());
|
std::unique_ptr<NetworkPacket> packet = std::move(NetworkPacket::Allocate());
|
||||||
|
|
|
@ -347,6 +347,10 @@ unsigned char *util_zlib_inflate(unsigned char *data, size_t data_in_size, size_
|
||||||
buffer_size *= 2;
|
buffer_size *= 2;
|
||||||
out_size = buffer_size;
|
out_size = buffer_size;
|
||||||
buffer = realloc(buffer, buffer_size);
|
buffer = realloc(buffer, buffer_size);
|
||||||
|
} else if (ret == Z_STREAM_ERROR) {
|
||||||
|
log_error("Your build is shipped with broken zlib. Please use the official build.");
|
||||||
|
free(buffer);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
ret = uncompress(buffer, &out_size, data, data_in_size);
|
ret = uncompress(buffer, &out_size, data, data_in_size);
|
||||||
} while (ret != Z_OK);
|
} while (ret != Z_OK);
|
||||||
|
@ -377,12 +381,8 @@ unsigned char *util_zlib_deflate(unsigned char *data, size_t data_in_size, size_
|
||||||
buffer = realloc(buffer, buffer_size);
|
buffer = realloc(buffer, buffer_size);
|
||||||
} else if (ret == Z_STREAM_ERROR) {
|
} else if (ret == Z_STREAM_ERROR) {
|
||||||
log_error("Your build is shipped with broken zlib. Please use the official build.");
|
log_error("Your build is shipped with broken zlib. Please use the official build.");
|
||||||
log_error("Falling back to non-compressed sv6.");
|
free(buffer);
|
||||||
buffer = realloc(buffer, data_in_size);
|
return NULL;
|
||||||
memcpy(buffer, data, data_in_size);
|
|
||||||
out_size = data_in_size;
|
|
||||||
ret = Z_OK;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
ret = compress(buffer, &out_size, data, data_in_size);
|
ret = compress(buffer, &out_size, data, data_in_size);
|
||||||
} while (ret != Z_OK);
|
} while (ret != Z_OK);
|
||||||
|
|
Loading…
Reference in New Issue