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:
Elliott Hughes
2013-03-14 14:38:08 -07:00
parent ec706c24ac
commit e0175ca7e4
3 changed files with 52 additions and 1 deletions

View File

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