- roll out the fix for 4040321, since it is still pending CCC review.
authorvicki <vicki@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Mar 2005 23:50:14 +0000 (23:50 +0000)
committervicki <vicki@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Mar 2005 23:50:14 +0000 (23:50 +0000)
    2005-03-10  Richard Williamson   <rjw@apple.com>

        Fixed <rdar://problem/4040321> Exception: Someone's trying to encode a WebDataRequestParameters instance

        Reviewed by Darin.

        If a delegate returns a mutated applewebdata: request in it's willSendRequest:
        method, we don't load using the WebDataRequest.  Instead we do a normal load.
        Unfortunately, if the request they return is mutated *copy* of the applewebdata:
        request it will hold the applewebdata: special properties.  These properties
        will be encoded into the cache.   They should not be.  So, to fix, we sanitize the
        request, by removing the special properties from the request.

        Note that we had to dig into the private guts of NSURLRequest because there is
        no public mechanism to remove properties from a request, see 4046775.

        * WebView.subproj/WebBaseResourceHandleDelegate.m:
        (-[WebBaseResourceHandleDelegate willSendRequest:redirectResponse:]):
        * WebView.subproj/WebDataProtocol.h:
        * WebView.subproj/WebDataProtocol.m:
        (-[NSURLRequest _webDataRequestExternalRequest]):
        (-[NSURLRequest _webDataRequestSanitize]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8882 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/WebView.subproj/WebBaseResourceHandleDelegate.m
WebKit/WebView.subproj/WebDataProtocol.h
WebKit/WebView.subproj/WebDataProtocol.m
WebKit/WebView.subproj/WebLoader.m

index da5844acb7fcdf5837cc3f652497a35db4008f2e..86ee7570c5d9170bdc38ffd70b1dbaba82cd74a5 100644 (file)
@@ -1,3 +1,30 @@
+2005-03-14  Vicki Murley  <vicki@apple.com>
+
+       - roll out the fix for 4040321, since it is still pending CCC review.
+
+    2005-03-10  Richard Williamson   <rjw@apple.com>
+
+        Fixed <rdar://problem/4040321> Exception: Someone's trying to encode a WebDataRequestParameters instance 
+
+        Reviewed by Darin.
+
+        If a delegate returns a mutated applewebdata: request in it's willSendRequest:
+        method, we don't load using the WebDataRequest.  Instead we do a normal load.
+        Unfortunately, if the request they return is mutated *copy* of the applewebdata: 
+        request it will hold the applewebdata: special properties.  These properties 
+        will be encoded into the cache.   They should not be.  So, to fix, we sanitize the
+        request, by removing the special properties from the request.
+
+        Note that we had to dig into the private guts of NSURLRequest because there is
+        no public mechanism to remove properties from a request, see 4046775.
+
+        * WebView.subproj/WebBaseResourceHandleDelegate.m:
+        (-[WebBaseResourceHandleDelegate willSendRequest:redirectResponse:]):
+        * WebView.subproj/WebDataProtocol.h:
+        * WebView.subproj/WebDataProtocol.m:
+        (-[NSURLRequest _webDataRequestExternalRequest]):
+        (-[NSURLRequest _webDataRequestSanitize]):
+
 === Safari-406 ===
 
 2005-03-13  Darin Adler  <darin@apple.com>
index 11b22922b30507c8ebde86036257655ac8bd92e5..91f24b1453171c4416b61f316a84f99028adbf23 100644 (file)
@@ -347,12 +347,10 @@ static BOOL NSURLConnectionSupportsBufferedData;
     newRequest = [mutableRequest autorelease];
 
     clientRequest = [newRequest _webDataRequestExternalRequest];
-    if(!clientRequest) {
+    if(!clientRequest)
         clientRequest = newRequest;
-    }
-    else {
+    else
         haveDataSchemeRequest = YES;
-    }
     
     if (identifier == nil) {
         // The identifier is released after the last callback, rather than in dealloc
@@ -375,12 +373,8 @@ static BOOL NSURLConnectionSupportsBufferedData;
         // If the delegate modified the request use that instead of
         // our applewebdata request, otherwise use the original
         // applewebdata request.
-        if (![updatedRequest isEqual:clientRequest]) {
+        if (![updatedRequest isEqual:clientRequest])
             newRequest = updatedRequest;
-            // Sanitize the request, so that the WebDataRequest properties
-            // don't end up getting cached.
-            [newRequest _webDataRequestSanitize];
-        }
     }
 
     // Store a copy of the request.
index 275ab0b16f21cf34935ff1961e549ccdc9859da0..caf43299c16a2a5cec55db9136d23eaf27915124 100644 (file)
@@ -30,7 +30,6 @@
 - (NSString *)_webDataRequestEncoding;
 - (NSString *)_webDataRequestMIMEType;
 - (NSMutableURLRequest *)_webDataRequestExternalRequest;
-- (void)_webDataRequestSanitize;
 @end
 
 @interface NSMutableURLRequest (WebDataRequest)
index c966b48a2f665627f667b4c277419facd7a19590..d1e6e5c63469c00d633d2cea3c8ab98db5d5fb02 100644 (file)
@@ -76,20 +76,6 @@ static NSString *WebDataRequestPropertyKey = @"WebDataRequest";
 
 @end
 
-// This private interface declaration is need because NSURLProtocol
-// has no mechanism to remove a property from a NSURLRequest.
-// See 4046775.
-@interface _NSURLRequestInternal : NSObject
-{
-    @public
-    NSURL *URL;
-    NSURLRequestCachePolicy cachePolicy;
-    NSTimeInterval timeoutInterval;
-    NSURL *mainDocumentURL;
-    NSMutableDictionary *properties;
-}
-@end
-
 
 @implementation NSURLRequest (WebDataRequest)
 
@@ -154,12 +140,6 @@ static NSString *WebDataRequestPropertyKey = @"WebDataRequest";
     return newRequest;
 }
 
-- (void)_webDataRequestSanitize
-{
-    _NSURLRequestInternal *internal = (_NSURLRequestInternal *)_internal;
-    [internal->properties removeObjectForKey:WebDataRequestPropertyKey];
-}
-
 @end
 
 @implementation NSMutableURLRequest (WebDataRequest)
index 11b22922b30507c8ebde86036257655ac8bd92e5..91f24b1453171c4416b61f316a84f99028adbf23 100644 (file)
@@ -347,12 +347,10 @@ static BOOL NSURLConnectionSupportsBufferedData;
     newRequest = [mutableRequest autorelease];
 
     clientRequest = [newRequest _webDataRequestExternalRequest];
-    if(!clientRequest) {
+    if(!clientRequest)
         clientRequest = newRequest;
-    }
-    else {
+    else
         haveDataSchemeRequest = YES;
-    }
     
     if (identifier == nil) {
         // The identifier is released after the last callback, rather than in dealloc
@@ -375,12 +373,8 @@ static BOOL NSURLConnectionSupportsBufferedData;
         // If the delegate modified the request use that instead of
         // our applewebdata request, otherwise use the original
         // applewebdata request.
-        if (![updatedRequest isEqual:clientRequest]) {
+        if (![updatedRequest isEqual:clientRequest])
             newRequest = updatedRequest;
-            // Sanitize the request, so that the WebDataRequest properties
-            // don't end up getting cached.
-            [newRequest _webDataRequestSanitize];
-        }
     }
 
     // Store a copy of the request.