Skip to content

Commit bac333e

Browse files
author
Zhenyao Mo
committed
2011-04-14 Zhenyao Mo <zmo@google.com>
Reviewed by Kenneth Russell. Use HTMLImageElement in Canvas 2D / WebGL before response is ready causes crash https://bugs.webkit.org/show_bug.cgi?id=58501 * html/canvas/WebGLRenderingContext.cpp: (WebCore::WebGLRenderingContext::texImage2D): Call validateHTMLImageElement(). (WebCore::WebGLRenderingContext::texSubImage2D): Ditto. (WebCore::WebGLRenderingContext::validateHTMLImageElement): Make sure image is ready. * html/canvas/WebGLRenderingContext.h: Canonical link: https://commits.webkit.org/73746@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@83992 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent bd0f980 commit bac333e

3 files changed

Lines changed: 32 additions & 6 deletions

File tree

Source/WebCore/ChangeLog

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
2011-04-14 Zhenyao Mo <zmo@google.com>
2+
3+
Reviewed by Kenneth Russell.
4+
5+
Use HTMLImageElement in Canvas 2D / WebGL before response is ready causes crash
6+
https://bugs.webkit.org/show_bug.cgi?id=58501
7+
8+
* html/canvas/WebGLRenderingContext.cpp:
9+
(WebCore::WebGLRenderingContext::texImage2D): Call validateHTMLImageElement().
10+
(WebCore::WebGLRenderingContext::texSubImage2D): Ditto.
11+
(WebCore::WebGLRenderingContext::validateHTMLImageElement): Make sure image is ready.
12+
* html/canvas/WebGLRenderingContext.h:
13+
114
2011-04-07 MORITA Hajime <morrita@google.com>
215

316
Reviewed by Ryosuke Niwa.

Source/WebCore/html/canvas/WebGLRenderingContext.cpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3140,10 +3140,8 @@ void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum
31403140
ec = 0;
31413141
if (isContextLost())
31423142
return;
3143-
if (!image || !image->cachedImage()) {
3144-
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
3143+
if (!validateHTMLImageElement(image))
31453144
return;
3146-
}
31473145
checkOrigin(image);
31483146
texImage2DImpl(target, level, internalformat, format, type, image->cachedImage()->image(),
31493147
m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
@@ -3334,10 +3332,8 @@ void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Din
33343332
ec = 0;
33353333
if (isContextLost())
33363334
return;
3337-
if (!image || !image->cachedImage()) {
3338-
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
3335+
if (!validateHTMLImageElement(image))
33393336
return;
3340-
}
33413337
checkOrigin(image);
33423338
texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image->cachedImage()->image(),
33433339
m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
@@ -4613,6 +4609,20 @@ WebGLBuffer* WebGLRenderingContext::validateBufferDataParameters(GC3Denum target
46134609
return 0;
46144610
}
46154611

4612+
bool WebGLRenderingContext::validateHTMLImageElement(HTMLImageElement* image)
4613+
{
4614+
if (!image || !image->cachedImage()) {
4615+
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
4616+
return false;
4617+
}
4618+
const KURL& url = image->cachedImage()->response().url();
4619+
if (url.isNull() || url.isEmpty() || !url.isValid()) {
4620+
m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE);
4621+
return false;
4622+
}
4623+
return true;
4624+
}
4625+
46164626
void WebGLRenderingContext::vertexAttribfImpl(GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfloat v3)
46174627
{
46184628
if (isContextLost())

Source/WebCore/html/canvas/WebGLRenderingContext.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,9 @@ class WebGLRenderingContext : public CanvasRenderingContext {
590590
// Return the current bound buffer to target, or 0 if parameters are invalid.
591591
WebGLBuffer* validateBufferDataParameters(GC3Denum target, GC3Denum usage);
592592

593+
// Helper function for tex{Sub}Image2D to make sure image is ready.
594+
bool validateHTMLImageElement(HTMLImageElement*);
595+
593596
// Helper functions for vertexAttribNf{v}.
594597
void vertexAttribfImpl(GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat, GC3Dfloat, GC3Dfloat, GC3Dfloat);
595598
void vertexAttribfvImpl(GC3Duint index, Float32Array*, GC3Dsizei expectedSize);

0 commit comments

Comments
 (0)