[Lldb-commits] [PATCH] D80150: [lldb/DataFormatter] Check for overflow when finding NSDate epoch
Pavel Labath via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Mon May 25 04:14:33 PDT 2020
labath added a comment.
I don't know how widespread the llrint behavior is. Clamping to the largest/smallest int seems reasonable, so it might be reasonable to depend on that -- though I don't know what will that do for NaNs...
I actually don't think the previous approach was wrong. IIUC, it only became a problem when Eric added an explicit int cast to the input value -- it should have been done the other way around, casting the integer to the float type. Then we'd just need to be careful in the test to select a number that is sufficiently bigger than UINT64_MAX, so that the difference is observable after conversion to floating point.
In a way, I think that the real problem here is that we're using host floating point arithmetic on numbers that are: a) untrusted; b) come from a system which has potentially different floating point encoding/semantics. A more principled approach would be to do it like the compiler, and work with APFloats with semantics explicitly configured from based on the target.
================
Comment at: lldb/source/Plugins/Language/ObjC/Cocoa.cpp:796
+ static time_t epoch = 0;
+#ifdef __APPLE__
+ if (!epoch) {
----------------
I think that changing !_WIN32 to __APPLE__ is a step in the wrong direction. Ideally, this function should work the same everywhere. The way to achieve that would be to have a host function which selects between `gmtime` and `_mkgmtime` depending on the platform. But failing that, I don't see a reason to restrict the scope of this further.
================
Comment at: lldb/unittests/Language/AppleObjC/UtilitiesTests.cpp:43
+ // If the date_value `double` cannot be represented in a `time_t`, give up.
+ EXPECT_EQ(formatDateValue(greater_than_max_time), llvm::None);
+ EXPECT_EQ(formatDateValue(lesser_than_min_time), llvm::None);
----------------
What about infinities and NaNs? (I can believe this will do the right thing for the former, but I have no clue what will happen in the NaN case).
================
Comment at: lldb/unittests/Language/CMakeLists.txt:4-6
+if (APPLE)
+ add_subdirectory(AppleObjC)
+endif()
----------------
I don't think the distinction between AppleObjC and ObjC is very clear, but if the code under test lives in `ObjC`, I think it makes sense to call the test folder the same way.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80150/new/
https://reviews.llvm.org/D80150
More information about the lldb-commits
mailing list