Merge pull request #2806 from janisozaur/fixes2

Fix zlib inflate on broken builders
This commit is contained in:
Ted John 2016-01-24 20:50:25 +00:00
commit 4ff3c11366
2 changed files with 22 additions and 13 deletions

View File

@ -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());

View File

@ -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);