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 out_size;
|
||||
unsigned char *compressed = util_zlib_deflate(&buffer[0], size, &out_size);
|
||||
unsigned char *header = (unsigned char *)_strdup("open2_sv6_zlib");
|
||||
size_t header_len = strlen((char *)header) + 1; // account for null terminator
|
||||
header = (unsigned char *)realloc(header, header_len + out_size);
|
||||
memcpy(&header[header_len], compressed, out_size);
|
||||
out_size += header_len;
|
||||
free(compressed);
|
||||
log_verbose("Sending map of size %u bytes, compressed to %u bytes", size, out_size);
|
||||
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
|
||||
header = (unsigned char *)realloc(header, header_len + out_size);
|
||||
memcpy(&header[header_len], compressed, out_size);
|
||||
out_size += header_len;
|
||||
free(compressed);
|
||||
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) {
|
||||
int datasize = (std::min)(chunksize, out_size - i);
|
||||
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;
|
||||
out_size = 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);
|
||||
} 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);
|
||||
} else if (ret == Z_STREAM_ERROR) {
|
||||
log_error("Your build is shipped with broken zlib. Please use the official build.");
|
||||
log_error("Falling back to non-compressed sv6.");
|
||||
buffer = realloc(buffer, data_in_size);
|
||||
memcpy(buffer, data, data_in_size);
|
||||
out_size = data_in_size;
|
||||
ret = Z_OK;
|
||||
break;
|
||||
free(buffer);
|
||||
return NULL;
|
||||
}
|
||||
ret = compress(buffer, &out_size, data, data_in_size);
|
||||
} while (ret != Z_OK);
|
||||
|
|
Loading…
Reference in New Issue