diff options
author | Jay Freeman (saurik) <saurik@saurik.com> | 2011-07-22 18:52:46 -0700 |
---|---|---|
committer | Jay Freeman (saurik) <saurik@saurik.com> | 2011-10-12 15:14:24 -0700 |
commit | 22a7ee91ef4d3bdc443789c90c10126529aa52d0 (patch) | |
tree | d0b60e51402b887d9beeee5c566fe2dfa57d0cb1 | |
parent | f66bee760c7d54279c6d01f601c67bb1a27791e5 (diff) |
Fix the 'it Safe Mode' bug on 4.2+. (chpwn)
-rw-r--r-- | MobileSafety.mm | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/MobileSafety.mm b/MobileSafety.mm index 3ba31a2..d62cab4 100644 --- a/MobileSafety.mm +++ b/MobileSafety.mm @@ -134,10 +134,26 @@ MSInstanceMessageHook2(void, UIStatusBar, touchesBegan,withEvent, void *, touche } MSInstanceMessageHook0(void, SBStatusBarDataManager, _updateTimeString) { - if (char *_data = &MSHookIvar<char>(self, "_data")) { - char *timeString(_data + 20); - strcpy(timeString, "Exit Safe Mode"); - } + char *_data(&MSHookIvar<char>(self, "_data")); + if (_data == NULL) + return; + + Ivar _itemIsEnabled(object_getInstanceVariable(self, "_itemIsEnabled", NULL)); + if (_itemIsEnabled == NULL) + return; + + Ivar _itemIsCloaked(object_getInstanceVariable(self, "_itemIsCloaked", NULL)); + if (_itemIsCloaked == NULL) + return; + + size_t enabledOffset(ivar_getOffset(_itemIsEnabled)); + size_t cloakedOffset(ivar_getOffset(_itemIsCloaked)); + if (enabledOffset >= cloakedOffset) + return; + + size_t offset(cloakedOffset - enabledOffset); + char *timeString(_data + offset); + strcpy(timeString, "Exit Safe Mode"); } static void SBIconController$showInfoAlertIfNeeded(id self, SEL sel) { |