mirror of
https://github.com/mapbox/tippecanoe.git
synced 2025-01-22 04:18:01 +00:00
Detect if the compressed input runs out before the stream is complete
This commit is contained in:
parent
d0d953f4a2
commit
0244f04b71
35
main.cpp
35
main.cpp
@ -530,8 +530,22 @@ struct STREAM {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1) {
|
while (true) {
|
||||||
prime();
|
// Move any existing readahead to the start
|
||||||
|
memmove(buf, inflate_s.next_in, inflate_s.avail_in);
|
||||||
|
inflate_s.next_in = buf;
|
||||||
|
|
||||||
|
// Read more compressed data if there is room and availability
|
||||||
|
bool eof = false;
|
||||||
|
if (inflate_s.avail_in < BUF) {
|
||||||
|
size_t nread = ::fread(inflate_s.next_in + inflate_s.avail_in, sizeof(char), BUF - inflate_s.avail_in, fp);
|
||||||
|
inflate_s.avail_in += nread;
|
||||||
|
|
||||||
|
if (nread == 0) {
|
||||||
|
eof = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inflate_s.avail_out = count;
|
inflate_s.avail_out = count;
|
||||||
inflate_s.next_out = (Bytef *) out;
|
inflate_s.next_out = (Bytef *) out;
|
||||||
|
|
||||||
@ -550,6 +564,11 @@ struct STREAM {
|
|||||||
if (ret == Z_STREAM_END) {
|
if (ret == Z_STREAM_END) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (eof) {
|
||||||
|
fprintf(stderr, "%s: Compressed data was truncated\n", *av);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return ::fread(out, 1, count, fp);
|
return ::fread(out, 1, count, fp);
|
||||||
@ -559,18 +578,6 @@ struct STREAM {
|
|||||||
json_pull *json_begin() {
|
json_pull *json_begin() {
|
||||||
return ::json_begin(read_stream, this);
|
return ::json_begin(read_stream, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void prime() {
|
|
||||||
// Move any existing readahead to the start
|
|
||||||
|
|
||||||
memmove(buf, inflate_s.next_in, inflate_s.avail_in);
|
|
||||||
inflate_s.next_in = buf;
|
|
||||||
|
|
||||||
if (inflate_s.avail_in < BUF) {
|
|
||||||
size_t nread = ::fread(inflate_s.next_in + inflate_s.avail_in, sizeof(char), BUF - inflate_s.avail_in, fp);
|
|
||||||
inflate_s.avail_in += nread;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t read_stream(json_pull *j, char *buffer, size_t n) {
|
static ssize_t read_stream(json_pull *j, char *buffer, size_t n) {
|
||||||
|
Loading…
Reference in New Issue
Block a user