void *p = calloc(kArraySize, kArraySize2); // Should return 0.
EXPECT_EQ(0L, Ident(p));
}
+
+TEST(AddressSanitizerInterface, CallocOverflow2) {
+#if SANITIZER_WORDSIZE == 32
+ size_t kArraySize = 112;
+ volatile size_t kArraySize2 = 43878406;
+ void *p = calloc(kArraySize, kArraySize2); // Should return 0.
+ EXPECT_EQ(0L, Ident(p));
+#endif
+}
}
bool CallocShouldReturnNullDueToOverflow(uptr size, uptr n) {
- uptr mul = size * n;
- return mul < size || mul < n;
+ if (!size) return false;
+ uptr max = (uptr)-1L;
+ return (max / size) < n;
}
} // namespace __sanitizer