From f0c10a4a16c74f5099cf6b272c0a2f11f454e63c Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 22 Aug 2013 11:37:32 -0700 Subject: [PATCH] Work around tzcode's reliance on signed overflow. I've mailed the tz list about this, and will switch to whatever upstream fix comes along as soon as it's available. Bug: 10310929 (cherry picked from commit 7843d44a594270bcb56e98b130603c054f8a9d38) Change-Id: I205e2440703444c50cecd91d3458d33613ddbc59 --- libc/Android.mk | 2 ++ tests/time_test.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/libc/Android.mk b/libc/Android.mk index 9610c1400..cc2e0e993 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -718,6 +718,8 @@ LOCAL_CFLAGS := \ -DTZDIR=\"/system/usr/share/zoneinfo\" \ -DTM_GMTOFF=tm_gmtoff \ -DUSG_COMPAT=1 +# tzcode currently relies on signed overflow in numerous places (http://b/10310929). +LOCAL_CFLAGS += -fno-strict-overflow LOCAL_C_INCLUDES := $(libc_common_c_includes) LOCAL_MODULE := libc_tzcode LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk diff --git a/tests/time_test.cpp b/tests/time_test.cpp index 0ad4763a1..02163a554 100644 --- a/tests/time_test.cpp +++ b/tests/time_test.cpp @@ -54,3 +54,16 @@ TEST(time, gmtime) { ASSERT_EQ(0, broken_down->tm_mon); ASSERT_EQ(1970, broken_down->tm_year + 1900); } + +#ifdef __BIONIC__ +TEST(time, mktime_10310929) { + struct tm t; + memset(&t, 0, sizeof(tm)); + t.tm_year = 200; + t.tm_mon = 2; + t.tm_mday = 10; + + ASSERT_EQ(-1, mktime(&t)); + ASSERT_EQ(-1, mktime_tz(&t, "UTC")); +} +#endif