Closed
Bug 378700
Opened 17 years ago
Closed 17 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•17 years ago
|
||
oh good, I was seeing this in valgrind today
Assignee | ||
Comment 3•17 years ago
|
||
The struct initilizer came from code in pango-1.16.2/pango/break.c: PangoAnalysis analysis = { 0 };
Assignee | ||
Comment 4•17 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•17 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•17 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•17 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•17 years ago
|
||
Fixed by removal of CreateGlyphRunsFast() in bug 357637.
Status: ASSIGNED → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•