]> git.saurik.com Git - cydia.git/commitdiff
Fix underlying Apple UIWebViewWebViewDelegate on 2.x retain/release bug.
authorJay Freeman (saurik) <saurik@saurik.com>
Mon, 21 Mar 2011 11:15:24 +0000 (04:15 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Mon, 21 Mar 2011 11:15:24 +0000 (04:15 -0700)
CyteKit/WebView.mm
iPhonePrivate.h

index 1329d4fb3c16c7179bd02267cc2f5a7bab111073..0e8ba71c139fb24c5cfe72a3c758db150092fe2f 100644 (file)
 }
 
 - (void) dealloc {
+    if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iPhoneOS_3_0) {
+        UIWebViewInternal *&_internal(MSHookIvar<UIWebViewInternal *>(self, "_internal"));
+        if (&_internal != NULL) {
+            UIWebViewWebViewDelegate *&webViewDelegate(MSHookIvar<UIWebViewWebViewDelegate *>(_internal, "webViewDelegate"));
+            if (&webViewDelegate != NULL)
+                [webViewDelegate _clearUIWebView];
+        }
+    }
+
     [super dealloc];
 }
 
@@ -353,6 +362,10 @@ static void $UIWebViewWebViewDelegate$webViewClose$(UIWebViewWebViewDelegate *se
 
 @end
 
+static void $UIWebViewWebViewDelegate$_clearUIWebView(UIWebViewWebViewDelegate *self, SEL sel) {
+    MSHookIvar<UIWebView *>(self, "uiWebView") = nil;
+}
+
 __attribute__((__constructor__)) static void $() {
     if (Class $UIWebViewWebViewDelegate = objc_getClass("UIWebViewWebViewDelegate")) {
         class_addMethod($UIWebViewWebViewDelegate, @selector(webView:addMessageToConsole:), (IMP) &$UIWebViewWebViewDelegate$webView$addMessageToConsole$, "v16@0:4@8@12");
@@ -362,5 +375,6 @@ __attribute__((__constructor__)) static void $() {
         class_addMethod($UIWebViewWebViewDelegate, @selector(webView:didReceiveTitle:forFrame:), (IMP) &$UIWebViewWebViewDelegate$webView$didReceiveTitle$forFrame$, "v20@0:4@8@12@16");
         class_addMethod($UIWebViewWebViewDelegate, @selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:), (IMP) &$UIWebViewWebViewDelegate$webView$resource$willSendRequest$redirectResponse$fromDataSource$, "@28@0:4@8@12@16@20@24");
         class_addMethod($UIWebViewWebViewDelegate, @selector(webViewClose:), (IMP) &$UIWebViewWebViewDelegate$webViewClose$, "v12@0:4@8");
+        class_addMethod($UIWebViewWebViewDelegate, @selector(_clearUIWebView), (IMP) &$UIWebViewWebViewDelegate$_clearUIWebView, "v8@0:4");
     }
 }
index 8cc997a151a9f530a392b0d3b7608d3646588112..cddfe9cbdb8cbdca61972a1004ca98c898d0a52b 100644 (file)
@@ -124,6 +124,9 @@ typedef enum {
 @interface UIWebViewWebViewDelegate : NSObject {
     @public UIWebView *uiWebView;
 }
+
+- (void) _clearUIWebView;
+
 @end
 // }}}
 // @interface *Button : * {{{