Closed
Bug 378700
Opened 19 years ago
Closed 19 years ago
New fields in PangoAnalyis of pango 1.16 need initializing in CreateGlyphRunsFast
Categories
(Core :: Graphics, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: karlt, Assigned: karlt)
References
Details
Attachments
(2 files)
|
2.21 KB,
patch
|
roc
:
review+
|
Details | Diff | Splinter Review |
|
2.28 KB,
patch
|
roc
:
review+
roc
:
superreview+
|
Details | Diff | Splinter Review |
In pango 1.16.0 new fields gravity and flags have been added to the
PangoAnalysis struct. These need to be initialized in
gfxPangoFontGroup::CreateGlyphRunsFast().
(The new fields have been added within the padding present in pango 1.14:
http://bugzilla.gnome.org/show_bug.cgi?id=351496)
The attached patch initializes the new fields and also removes a memory leak
in the case where AddGlyphRun fails.
Attachment #262724 -
Flags: review?(roc)
Comment on attachment 262724 [details] [diff] [review]
initialization and memory leak plug
Change the struct initializer to memset.
Attachment #262724 -
Flags: review?(roc) → review+
Comment 2•19 years ago
|
||
oh good, I was seeing this in valgrind today
| Assignee | ||
Comment 3•19 years ago
|
||
The struct initilizer came from code in pango-1.16.2/pango/break.c:
PangoAnalysis analysis = { 0 };
| Assignee | ||
Comment 4•19 years ago
|
||
For C++:
X3J16/96–0225 WG21/N1043
8.5.1 Aggregates
7 If there are fewer initializers in the list than there are members in the
aggregate, then each member not explicitly initialized shall be initialized
with a value of the form T() (5.2.3), where T represents the type of the
uninitialized member.
[Example:
struct S { int a; char* b; int c; };
S ss = { 1, "asdf" };
initializes ss.a with 1, ss.b with "asdf", and ss.c with the value of an
expression of the form int(), that is, 0. ]
5.2.3 Explicit type conversion (functional notation)
2 The expression T(), where T is a simple-type-specifier (7.1.5.2) for a
non-array complete object type or the (possibly cv-qualified) void type,
creates an rvalue of the specified type, whose value is determined by
default-initialization (8.5). [Note: if T is a non-class type that is
cv-qualified, the cv-qualifiers are ignored when determining the type of the
resulting rvalue (3.10). ]
8.5 Initilizers
5
To default-initialize an object of type T means:
— if T is a non-POD class type (9), the default constructor for T is called
(and the initialization is ill-formed if T has no accessible default
constructor);
— if T is an array type, each element is default-initialized;
— otherwise, the storage for the object is zero-initialized.
So { 0 } should do what we want.
| Assignee | ||
Comment 5•19 years ago
|
||
However, XL C/C++ V8.0 seems to be reading a different standard!
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/strin.htm:
"the initial value of uninitialized structure members depends on the storage
class associated with the structure or union variable. In a structure declared
as static, any members that are not initialized are implicitly initialized to
zero of the appropriate type; the members of a structure with automatic
storage have no default initialization."
| Assignee | ||
Comment 6•19 years ago
|
||
If XL C++ really does what it says and we want to support it or other non-compliant compilers then this patch may be needed.
Attachment #262844 -
Flags: superreview?(roc)
Attachment #262844 -
Flags: superreview?(roc)
Attachment #262844 -
Flags: superreview+
Attachment #262844 -
Flags: review+
| Assignee | ||
Comment 7•19 years ago
|
||
CreateGlyphRunsFast() will be removed for bug 357637 so the patches here won't be needed unless there is a problem with attachment 263898 [details] [diff] [review] in bug 357637.
Depends on: 357637
| Assignee | ||
Comment 8•19 years ago
|
||
Fixed by removal of CreateGlyphRunsFast() in bug 357637.
Status: ASSIGNED → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•