1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
From 377e1cefec0fcf230caafb97b4414c835d27c7fe Mon Sep 17 00:00:00 2001
From: Milan Sreckovic <milan@mozilla.com>
Date: Fri, 2 Oct 2015 09:18:26 +0200
Subject: [PATCH] Bug 1205900 - Compare context and canvas element sizes before
extracting the data. r=gwright, a=al
--HG--
extra : source : f6c99c8baa9b0b6a34d6791e5d4031a2de8f2087
---
dom/canvas/CanvasRenderingContext2D.cpp | 2 --
dom/canvas/CanvasRenderingContext2D.h | 7 +++----
dom/canvas/WebGLContext.cpp | 2 --
dom/canvas/WebGLContext.h | 3 +--
dom/canvas/nsICanvasRenderingContextInternal.h | 8 +++-----
dom/html/HTMLCanvasElement.cpp | 13 +++++++------
6 files changed, 14 insertions(+), 21 deletions(-)
diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp
index d9eaf99..a06fbce 100644
--- a/dom/canvas/CanvasRenderingContext2D.cpp
+++ b/dom/canvas/CanvasRenderingContext2D.cpp
@@ -1418,7 +1418,6 @@ CanvasRenderingContext2D::EnsureTarget(RenderingMode aRenderingMode)
return mode;
}
-#ifdef DEBUG
int32_t
CanvasRenderingContext2D::GetWidth() const
{
@@ -1430,7 +1429,6 @@ CanvasRenderingContext2D::GetHeight() const
{
return mHeight;
}
-#endif
NS_IMETHODIMP
CanvasRenderingContext2D::SetDimensions(int32_t width, int32_t height)
diff --git a/dom/canvas/CanvasRenderingContext2D.h b/dom/canvas/CanvasRenderingContext2D.h
index af29c78..e853987 100644
--- a/dom/canvas/CanvasRenderingContext2D.h
+++ b/dom/canvas/CanvasRenderingContext2D.h
@@ -481,10 +481,9 @@ public:
nsresult Redraw();
-#ifdef DEBUG
- virtual int32_t GetWidth() const override;
- virtual int32_t GetHeight() const override;
-#endif
+ virtual int32_t GetWidth() const override;
+ virtual int32_t GetHeight() const override;
+
// nsICanvasRenderingContextInternal
/**
* Gets the pres shell from either the canvas element or the doc shell
diff --git a/dom/canvas/WebGLContext.cpp b/dom/canvas/WebGLContext.cpp
index 1c22c27..f2a620a 100644
--- a/dom/canvas/WebGLContext.cpp
+++ b/dom/canvas/WebGLContext.cpp
@@ -463,7 +463,6 @@ WebGLContext::SetContextOptions(JSContext* cx, JS::Handle<JS::Value> options)
return NS_OK;
}
-#ifdef DEBUG
int32_t
WebGLContext::GetWidth() const
{
@@ -475,7 +474,6 @@ WebGLContext::GetHeight() const
{
return mHeight;
}
-#endif
/* So there are a number of points of failure here. We might fail based
* on EGL vs. WGL, or we might fail to alloc a too-large size, or we
diff --git a/dom/canvas/WebGLContext.h b/dom/canvas/WebGLContext.h
index 63c4091..210f341 100644
--- a/dom/canvas/WebGLContext.h
+++ b/dom/canvas/WebGLContext.h
@@ -202,10 +202,9 @@ public:
NS_DECL_NSIDOMWEBGLRENDERINGCONTEXT
// nsICanvasRenderingContextInternal
-#ifdef DEBUG
virtual int32_t GetWidth() const override;
virtual int32_t GetHeight() const override;
-#endif
+
NS_IMETHOD SetDimensions(int32_t width, int32_t height) override;
NS_IMETHOD InitializeWithSurface(nsIDocShell*, gfxASurface*, int32_t,
int32_t) override
diff --git a/dom/canvas/nsICanvasRenderingContextInternal.h b/dom/canvas/nsICanvasRenderingContextInternal.h
index 3b1120f..fb1ef7c 100644
--- a/dom/canvas/nsICanvasRenderingContextInternal.h
+++ b/dom/canvas/nsICanvasRenderingContextInternal.h
@@ -81,11 +81,9 @@ public:
return mCanvasElement;
}
-#ifdef DEBUG
- // Useful for testing
- virtual int32_t GetWidth() const = 0;
- virtual int32_t GetHeight() const = 0;
-#endif
+ // Dimensions of the canvas, in pixels.
+ virtual int32_t GetWidth() const = 0;
+ virtual int32_t GetHeight() const = 0;
// Sets the dimensions of the canvas, in pixels. Called
// whenever the size of the element changes.
diff --git a/dom/html/HTMLCanvasElement.cpp b/dom/html/HTMLCanvasElement.cpp
index f326662..68649f5 100644
--- a/dom/html/HTMLCanvasElement.cpp
+++ b/dom/html/HTMLCanvasElement.cpp
@@ -526,18 +526,19 @@ HTMLCanvasElement::ToBlob(JSContext* aCx,
return;
}
-#ifdef DEBUG
if (mCurrentContext) {
// We disallow canvases of width or height zero, and set them to 1, so
// we will have a discrepancy with the sizes of the canvas and the context.
// That discrepancy is OK, the rest are not.
nsIntSize elementSize = GetWidthHeight();
- MOZ_ASSERT(elementSize.width == mCurrentContext->GetWidth() ||
- (elementSize.width == 0 && mCurrentContext->GetWidth() == 1));
- MOZ_ASSERT(elementSize.height == mCurrentContext->GetHeight() ||
- (elementSize.height == 0 && mCurrentContext->GetHeight() == 1));
+ if ((elementSize.width != mCurrentContext->GetWidth() &&
+ (elementSize.width != 0 || mCurrentContext->GetWidth() != 1)) ||
+ (elementSize.height != mCurrentContext->GetHeight() &&
+ (elementSize.height != 0 || mCurrentContext->GetHeight() != 1))) {
+ aRv.Throw(NS_ERROR_FAILURE);
+ return;
+ }
}
-#endif
uint8_t* imageBuffer = nullptr;
int32_t format = 0;
--
2.5.0
|