Don't search off the end of the index for bad Olson ids.
In the old code, the index was a file to itself, so it made sense to read until you hit the end of the file. In the new code, the index is followed by hundreds of KiB of data, so we need to just search the index. Bug: 8368791 Change-Id: Icf5f8b5516cf3a93679fa849c9f6cd1cb100e0f1
This commit is contained in:
@@ -2305,7 +2305,13 @@ static int __bionic_open_tzdata_path(const char* path, const char* olson_id, int
|
||||
|
||||
static const size_t NAME_LENGTH = 40;
|
||||
unsigned char buf[NAME_LENGTH + 3 * sizeof(int32_t)];
|
||||
while (TEMP_FAILURE_RETRY(read(fd, buf, sizeof(buf))) == (ssize_t) sizeof(buf)) {
|
||||
|
||||
size_t id_count = (ntohl(header.data_offset) - ntohl(header.index_offset)) / sizeof(buf);
|
||||
for (size_t i = 0; i < id_count; ++i) {
|
||||
if (TEMP_FAILURE_RETRY(read(fd, buf, sizeof(buf))) != (ssize_t) sizeof(buf)) {
|
||||
break;
|
||||
}
|
||||
|
||||
char this_id[NAME_LENGTH + 1];
|
||||
memcpy(this_id, buf, NAME_LENGTH);
|
||||
this_id[NAME_LENGTH] = '\0';
|
||||
|
Reference in New Issue
Block a user