summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2011-07-22 18:52:46 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2011-10-12 15:14:24 -0700
commit22a7ee91ef4d3bdc443789c90c10126529aa52d0 (patch)
treed0b60e51402b887d9beeee5c566fe2dfa57d0cb1
parentf66bee760c7d54279c6d01f601c67bb1a27791e5 (diff)
Fix the 'it Safe Mode' bug on 4.2+. (chpwn)
-rw-r--r--MobileSafety.mm24
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) {