Merge "Fail explicitly on length overflow."

This commit is contained in:
Christopher Ferris 2020-05-27 03:17:03 +00:00 committed by Gerrit Code Review
commit d46eb21906
2 changed files with 18 additions and 1 deletions

View file

@ -189,7 +189,11 @@ bool FileMap::create(const char* origFileName, int fd, off64_t offset, size_t le
int adjust = offset % mPageSize;
off64_t adjOffset = offset - adjust;
size_t adjLength = length + adjust;
size_t adjLength;
if (__builtin_add_overflow(length, adjust, &adjLength)) {
ALOGE("adjusted length overflow: length %zu adjust %d", length, adjust);
return false;
}
int flags = MAP_SHARED;
int prot = PROT_READ;

View file

@ -52,3 +52,16 @@ TEST(FileMap, large_offset) {
ASSERT_EQ(0u, m.getDataLength());
ASSERT_EQ(offset, m.getDataOffset());
}
TEST(FileMap, offset_overflow) {
// Make sure that an end that overflows SIZE_MAX will not abort.
// See http://b/156997193.
TemporaryFile tf;
ASSERT_TRUE(tf.fd != -1);
off64_t offset = 200;
size_t length = SIZE_MAX;
android::FileMap m;
ASSERT_FALSE(m.create("test", tf.fd, offset, length, true));
}