Title: [206995] trunk/Source/WebCore
- Revision
- 206995
- Author
- [email protected]
- Date
- 2016-10-10 06:42:24 -0700 (Mon, 10 Oct 2016)
Log Message
Images and scripts should be said as clean based on CachedResource::isCORSSameOrigin
https://bugs.webkit.org/show_bug.cgi?id=162390
Patch by Youenn Fablet <[email protected]> on 2016-10-10
Reviewed by Darin Adler.
No observable change of behavior.
Renaming CachedResource::isClean to isCORSSameOrigin to match html spec terminology.
Making use of it to check whether images taint canvas and whether script errors should be sanitized.
Some asserts are added to ensure that a resource fetched using one origin is not reused for another origin.
* dom/ScriptExecutionContext.cpp:
(WebCore::ScriptExecutionContext::sanitizeScriptError):
* html/HTMLLinkElement.cpp:
(WebCore::HTMLLinkElement::initializeStyleSheet):
* html/canvas/CanvasRenderingContext.cpp:
(WebCore::CanvasRenderingContext::wouldTaintOrigin):
* loader/cache/CachedImage.cpp:
(WebCore::CachedImage::isOriginClean):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::isCORSSameOrigin):
* loader/cache/CachedResource.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (206994 => 206995)
--- trunk/Source/WebCore/ChangeLog 2016-10-10 13:09:56 UTC (rev 206994)
+++ trunk/Source/WebCore/ChangeLog 2016-10-10 13:42:24 UTC (rev 206995)
@@ -1,5 +1,31 @@
2016-10-10 Youenn Fablet <[email protected]>
+ Images and scripts should be said as clean based on CachedResource::isCORSSameOrigin
+ https://bugs.webkit.org/show_bug.cgi?id=162390
+
+ Reviewed by Darin Adler.
+
+ No observable change of behavior.
+
+ Renaming CachedResource::isClean to isCORSSameOrigin to match html spec terminology.
+ Making use of it to check whether images taint canvas and whether script errors should be sanitized.
+
+ Some asserts are added to ensure that a resource fetched using one origin is not reused for another origin.
+
+ * dom/ScriptExecutionContext.cpp:
+ (WebCore::ScriptExecutionContext::sanitizeScriptError):
+ * html/HTMLLinkElement.cpp:
+ (WebCore::HTMLLinkElement::initializeStyleSheet):
+ * html/canvas/CanvasRenderingContext.cpp:
+ (WebCore::CanvasRenderingContext::wouldTaintOrigin):
+ * loader/cache/CachedImage.cpp:
+ (WebCore::CachedImage::isOriginClean):
+ * loader/cache/CachedResource.cpp:
+ (WebCore::CachedResource::isCORSSameOrigin):
+ * loader/cache/CachedResource.h:
+
+2016-10-10 Youenn Fablet <[email protected]>
+
[Fetch API] Memory cache should not bypass redirect mode
https://bugs.webkit.org/show_bug.cgi?id=162959
Modified: trunk/Source/WebCore/dom/ScriptExecutionContext.cpp (206994 => 206995)
--- trunk/Source/WebCore/dom/ScriptExecutionContext.cpp 2016-10-10 13:09:56 UTC (rev 206994)
+++ trunk/Source/WebCore/dom/ScriptExecutionContext.cpp 2016-10-10 13:42:24 UTC (rev 206995)
@@ -352,9 +352,15 @@
bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& lineNumber, int& columnNumber, String& sourceURL, Deprecated::ScriptValue& error, CachedScript* cachedScript)
{
- URL targetURL = completeURL(sourceURL);
- if (securityOrigin()->canRequest(targetURL) || (cachedScript && cachedScript->passesAccessControlCheck(*securityOrigin())))
+ ASSERT(securityOrigin());
+ if (cachedScript) {
+ ASSERT(cachedScript->origin());
+ ASSERT(securityOrigin()->toString() == cachedScript->origin()->toString());
+ if (cachedScript->isCORSSameOrigin())
+ return false;
+ } else if (securityOrigin()->canRequest(completeURL(sourceURL)))
return false;
+
errorMessage = "Script error.";
sourceURL = String();
lineNumber = 0;
Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext.cpp (206994 => 206995)
--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext.cpp 2016-10-10 13:09:56 UTC (rev 206994)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext.cpp 2016-10-10 13:42:24 UTC (rev 206995)
@@ -60,11 +60,17 @@
if (!image || !canvas()->originClean())
return false;
- CachedImage* cachedImage = image->cachedImage();
- if (!cachedImage->image()->hasSingleSecurityOrigin())
+ ASSERT(image->cachedImage());
+ CachedImage& cachedImage = *image->cachedImage();
+
+ ASSERT(cachedImage.image());
+ if (!cachedImage.image()->hasSingleSecurityOrigin())
return true;
- return wouldTaintOrigin(cachedImage->responseForSameOriginPolicyChecks().url()) && !cachedImage->passesAccessControlCheck(*canvas()->securityOrigin());
+ ASSERT(canvas()->securityOrigin());
+ ASSERT(cachedImage.origin());
+ ASSERT(canvas()->securityOrigin()->toString() == cachedImage.origin()->toString());
+ return !cachedImage.isCORSSameOrigin();
}
bool CanvasRenderingContext::wouldTaintOrigin(const HTMLVideoElement* video)
Modified: trunk/Source/WebCore/loader/cache/CachedImage.cpp (206994 => 206995)
--- trunk/Source/WebCore/loader/cache/CachedImage.cpp 2016-10-10 13:09:56 UTC (rev 206994)
+++ trunk/Source/WebCore/loader/cache/CachedImage.cpp 2016-10-10 13:42:24 UTC (rev 206995)
@@ -492,13 +492,12 @@
return image->currentFrameKnownToBeOpaque();
}
-bool CachedImage::isOriginClean(SecurityOrigin* securityOrigin)
+bool CachedImage::isOriginClean(SecurityOrigin* origin)
{
- if (!image()->hasSingleSecurityOrigin())
- return false;
- if (passesAccessControlCheck(*securityOrigin))
- return true;
- return !securityOrigin->taintsCanvas(responseForSameOriginPolicyChecks().url());
+ ASSERT_UNUSED(origin, origin);
+ ASSERT(this->origin());
+ ASSERT(origin->toString() == this->origin()->toString());
+ return !loadFailedOrCanceled() && isCORSSameOrigin();
}
CachedResource::RevalidationDecision CachedImage::makeRevalidationDecision(CachePolicy cachePolicy) const
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes