Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Issue 384593002: Fix uninitialized coords in _DrawCoonPatchMeshes (Closed)

Created:
6 years, 5 months ago by jun_fang
Modified:
6 years, 5 months ago
Reviewers:
palmer, Ryan Sleevi
CC:
pdfium-reviews_googlegroups.com
Base URL:
https://pdfium.googlesource.com/pdfium.git@master
Visibility:
Public.

Description

Fix uninitialized coords in _DrawCoonPatchMeshes BUG=391470 R=palmer@chromium.org Committed: https://pdfium.googlesource.com/pdfium/+/f86d7d6

Patch Set 1 #

Total comments: 11
Unified diffs Side-by-side diffs Delta from patch set Stats (+5 lines, -0 lines) Patch
M core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp View 1 chunk +5 lines, -0 lines 11 comments Download

Messages

Total messages: 8 (0 generated)
jun_fang
6 years, 5 months ago (2014-07-10 07:23:57 UTC) #1
palmer
https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp File core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp (right): https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp#newcode691 core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp:691: for (int i = 0; i < 16; i ...
6 years, 5 months ago (2014-07-10 23:11:01 UTC) #2
jun_fang
https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp File core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp (right): https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp#newcode691 core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp:691: for (int i = 0; i < 16; i ...
6 years, 5 months ago (2014-07-15 01:13:41 UTC) #3
palmer
https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp File core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp (right): https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp#newcode691 core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp:691: for (int i = 0; i < 16; i ...
6 years, 5 months ago (2014-07-15 01:49:17 UTC) #4
palmer
LGTM
6 years, 5 months ago (2014-07-15 01:49:37 UTC) #5
jun_fang
https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp File core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp (right): https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp#newcode691 core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp:691: for (int i = 0; i < 16; i ...
6 years, 5 months ago (2014-07-15 03:56:17 UTC) #6
jun_fang
Committed patchset #1 manually as rf86d7d6 (presubmit successful).
6 years, 5 months ago (2014-07-15 03:57:35 UTC) #7
Ryan Sleevi
6 years, 5 months ago (2014-07-15 23:59:00 UTC) #8
Message was sent while issue was closed.
https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render...
File core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp (right):

https://codereview.chromium.org/384593002/diff/1/core/src/fpdfapi/fpdf_render...
core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp:691: for (int i = 0; i <
16; i ++)
On 2014/07/15 03:56:17, jun_fang wrote:
> On 2014/07/15 01:49:17, Chromium Palmer wrote:
> > > CFX_FloatPoint is created by CFX_PSVTTemplate<FX_FLOAT>. This template
> > supports
> > > couple types. 
> > 
> > Yes. I am saying, you could give that template a default constructor.
> Currently
> > it does not have one.
> 
> :-). I know. I tried to add a default constructor. However there is a minor
> issue that we may use 0 to initialize a float/double variable because we don't
> know which type will be created. We can only use one type to initialize. 

Just happened to see this CL go by. The nice thing with templates is you can use
the "typename T" and T() (default initializer) to zero-initialize numeric types.

In C++ language, this is known as the "Default Constructible" requirement
(20.1.5 of C++03), which defines the requirement that T() must be a well-formed
expression.

Among the STL, you have many types require default-constructible; among them,
vectors and maps (which also zero-initialize). This behaviour (for primitives)
is defined in Section 8.5 of C++03. In particular, the language of 8.5 subclause
5 and 7.

That is, the initializer for all scalar types (which are a subset of the object
types clause) have a default initializer (), which is a value-initializer
(subclause 7). The default value-initializer for a scalar type is to
zero-initialize (subclause 5).

It's an extremely portable way to zero-initialize all types T, where T may be a
scalar type.

You're guaranteed that the CFX_FloatPoint constructor (really,
CFX_PSVVTTemplate<FX_FLOAT> constructor) will be run for every member in the
array (subclause 5 dictates that array types have every member
value-initialized), ergo if your constructor value-initialized the coords using
T() [Or, in the case of CFX_PSVTemplate, "baseType()"], this would be entirely
unnecessary.

To express this in an initializer list, you could do

CFX_PSVTemplate::CFX_PSVTemplate() : x(), y() {}

which would appropriately value-initialize (ergo zero-initialize)

Powered by Google App Engine
This is Rietveld 408576698