Bug 613794. Throw a reasonable exception when passed bogus imagedata. r=vlad

This commit is contained in:
Boris Zbarsky 2011-01-14 10:34:39 -05:00
Родитель 317d1a6915
Коммит 312e1f3596
3 изменённых файлов: 62 добавлений и 2 удалений

Просмотреть файл

@ -349,9 +349,12 @@ nsIDOMCanvasRenderingContext2D_PutImageData(JSContext *cx, uintN argc, jsval *vp
hasDirtyRect = PR_TRUE;
}
if (!JS_GetProperty(cx, dataObject, "data", tv.jsval_addr()) ||
JSVAL_IS_PRIMITIVE(tv.jsval_value()))
if (!JS_GetProperty(cx, dataObject, "data", tv.jsval_addr()))
return JS_FALSE;
if (JSVAL_IS_PRIMITIVE(tv.jsval_value()))
return xpc_qsThrow(cx, NS_ERROR_DOM_TYPE_MISMATCH_ERR);
darray = JSVAL_TO_OBJECT(tv.jsval_value());
js::AutoValueRooter tsrc_tvr(cx);

Просмотреть файл

@ -81,6 +81,7 @@ _TEST_FILES_0 = \
test_2d.composite.uncovered.image.source-out.html \
test_mozGetAsFile.html \
test_canvas_strokeStyle_getter.html \
test_bug613794.html \
$(NULL)
ifneq (1_Linux,$(MOZ_SUITE)_$(OS_ARCH))

Просмотреть файл

@ -0,0 +1,56 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=613794
-->
<head>
<title>Test for Bug 613794</title>
<script type="application/javascript" src="/MochiKit/packed.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=613794">Mozilla Bug 613794</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 613794 **/
var c = document.createElement("canvas");
c.width = c.height = 1;
c = c.getContext("2d");
SimpleTest.waitForExplicitFinish();
var threw = true;
try {
c.putImageData({ width: 1, height: 1, data: [ 0, 0, 0, 0] }, 0, 0);
threw = false;
} catch(e) {
threw = true;
}
is(threw, false, "Should be able to pass in custom imagedata objects with array data");
threw = false;
try {
c.putImageData({ width: 1, height: 1, data: null }, 0, 0);
threw = false;
} catch(e) {
threw = e.code;
}
is(threw, DOMException.TYPE_MISMATCH_ERR,
"Should throw type error when data is not an array");
SimpleTest.finish();
</script>
</pre>
</body>
</html>