Closed
Bug 859128
Opened 13 years ago
Closed 13 years ago
Code that produces negative values from SVGPathSegUtils::ArgCountForType should use signed arithmetic
Categories
(Core :: SVG, defect)
Core
SVG
Tracking
()
RESOLVED
FIXED
mozilla23
People
(Reporter: dholbert, Assigned: dholbert)
References
Details
Attachments
(1 file, 2 obsolete files)
|
6.26 KB,
patch
|
jwatt
:
review+
|
Details | Diff | Splinter Review |
Two of the warnings fixed in bug 859021 were:
{
e:/builds/moz2_slave/try-w32-d-00000000000000000000/build/content/svg/content/src/DOMSVGPathSegList.cpp(457) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
e:/builds/moz2_slave/try-w32-d-00000000000000000000/build/content/svg/content/src/DOMSVGPathSegList.cpp(532) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
}
emk added "0 -" which silences the warning, but doesn't make the expression signed. I think we should probably just make the expression signed in the first place, by making ArgCountForType return a signed value (which is known to be nonnegative, but signed because we know we may end up negating it or passing derivatives of it as a signed value)
| Assignee | ||
Comment 1•13 years ago
|
||
I found one other reason we should make 'argCount' and its derivatives signed. We have:
> 390 uint32_t oldArgCount = SVGPathSegUtils::ArgCountForType(oldType);
> 391 uint32_t newArgCount = SVGPathSegUtils::ArgCountForType(domItem->Type());
[...]
> 409 uint32_t delta = newArgCount - oldArgCount;
> 410 if (delta != 0) {
> 411 for (uint32_t i = aIndex + 1; i < LengthNoFlush(); ++i) {
> 412 mItems[i].mInternalDataIndex += delta;
If newArgCount is less than oldArgCount there, then 'delta' will be on the order of UINT32_MAX, which is bizarre (it'll work, but it's pretty hacky & not a very good "delta" value).
If we make the argcount values (and the delta value) signed, then this will be saner.
| Assignee | ||
Comment 2•13 years ago
|
||
I think this takes care of it; it builds locally (on linux), at least, and seems sane to me. I'll give it a Try run before landing, to be sure it doesn't re-break the windows warning (or introduce another one) somehow.
Attachment #734403 -
Flags: review?(jwatt)
| Assignee | ||
Comment 3•13 years ago
|
||
Comment on attachment 734403 [details] [diff] [review]
fix v1 [incomplete]: make arg counts signed, since they're sometimes negated and/or subtracted from each other
er, forgot to include the SVGPathSegUtils changes. new patch w/ that coming soon.
Attachment #734403 -
Flags: review?(jwatt)
| Assignee | ||
Comment 4•13 years ago
|
||
Actually - this gets a bit messy if we unilaterally convert it to be signed, because we compare arg-counts to unsigned values in various places, and in virtually all the usages, an unsigned value is fine.
So instead, I think we should just cram the unsigned return value into a signed variable, in the few places where we need signed arithmetic.
Summary: Make SVGPathSegUtils::ArgCountForType return a signed value → Code that produces negative values from SVGPathSegUtils::ArgCountForType should use signed arithmetic
| Assignee | ||
Updated•13 years ago
|
Attachment #734403 -
Attachment description: fix v1: make arg counts signed, since they're sometimes negated and/or subtracted from each other → fix v1 [incomplete]: make arg counts signed, since they're sometimes negated and/or subtracted from each other
Attachment #734403 -
Attachment is obsolete: true
| Assignee | ||
Comment 5•13 years ago
|
||
This fixes the code from comment 0 and comment 1 that need to perform signed arithmetic with these arg-counts, with an explanatory comment.
Attachment #734884 -
Flags: review?(jwatt)
| Assignee | ||
Comment 6•13 years ago
|
||
(forgot to update commit message; fixed in this version)
Attachment #734884 -
Attachment is obsolete: true
Attachment #734884 -
Flags: review?(jwatt)
Attachment #734885 -
Flags: review?(jwatt)
Updated•13 years ago
|
Attachment #734885 -
Flags: review?(jwatt) → review+
| Assignee | ||
Comment 7•13 years ago
|
||
Try run (builds only) as a sanity-check: https://tbpl.mozilla.org/?tree=Try&rev=28c7bbbf4db5
| Assignee | ||
Updated•13 years ago
|
Status: NEW → ASSIGNED
Flags: in-testsuite-
| Assignee | ||
Comment 8•13 years ago
|
||
Comment 9•13 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla23
You need to log in
before you can comment on or make changes to this bug.
Description
•