Closed
Bug 206864
Opened 22 years ago
Closed 22 years ago
Incorrect comparison in content/html/style/src/nsCSSParser.cpp
Categories
(Core :: CSS Parsing and Computation, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: tenthumbs, Assigned: bzbarsky)
References
Details
Attachments
(1 file, 2 obsolete files)
705 bytes,
patch
|
bzbarsky
:
review+
bzbarsky
:
superreview+
|
Details | Diff | Splinter Review |
Gcc says:
nsCSSParser.cpp:2780: warning: comparison of unsigned expression < 0 is always false
and the code is:
2773 PRUint32 value = (PRUint32)NSToIntRound(mToken.mNumber*255);
2774
2775 if (!ExpectSymbol(aErrorCode, ')', PR_TRUE)) {
2776 REPORT_UNEXPECTED_TOKEN(NS_LITERAL_STRING("Expected ')' but found"));
2777 return PR_FALSE;
2778 }
2779
2780 if (value < 0) value = 0;
2781 if (value > 255) value = 255;
2782 aOpacity = (PRUint8)value;
AS it stands a negative number becomes 255 not 0. Assuming you want to catch
negative values, then "value" must be signed. I suggest making it just an int.
The native type is, presumably, the most efficient.
Assigning it to bz because he did it in bug 160550.
![]() |
Assignee | |
Comment 2•22 years ago
|
||
How about PRInt32 instead of int?
What about a 64-bit platform? Using 32-bit quantities may incur
additional overhead. It all depends on the instruction set. I generally
prefer to let the compiler writers deal with this sort of stuff.
![]() |
Assignee | |
Comment 4•22 years ago
|
||
See http://lxr.mozilla.org/seamonkey/source/xpcom/ds/nsUnitConversion.h#90 --
we're already converting to PRInt32.
I wouldn't call nsUnitConversion.h a shining model of good coding
practice. See bug 118117 for one way it's broken. It was also created
essentially at the dawn of time (mozilla-wise). The code might well be
derived from an earlier source. Since it uses IEEE floats which have
just 24 bits of precision, perhaps PRInt32 is just to force something
larger than that. Since mozilla always runs on at least a 32-bit
platform forcing a special type seems useless to me.
However, I realize I'm probably alone in my views so I'll just hold my
nose while you use PRInt32. The important thing is to use a signed
quantity.
![]() |
Assignee | |
Comment 6•22 years ago
|
||
It doesn't matter what you or I think of nsUnitConversion -- you're calling that
function, and it returns a PRInt32. So in this case, on a 64-bit platform, it's
assigning to an 'int' that may have additional overhead.
And on platforms where an 'int' is less than 32 bits, you could overflow an
'int' if you assigned out of a PRInt32 into it. So let's not do that, ok? ;)
In any case, if you could post an updated patch that would be great, because I
have no tree to diff against.
Well, mozilla isn't supposed to run on a 16-bit platform so I don't think that's
relevant.
I have to rant a little. I see pepple running around becoming upset because of
millisecond run-time changes. I see other people insisting on specifying object
types (e.g. 8 and 16 bit integers) that have performance penalties. Yet, the
complainers never mention the obvious.
Anyway, stand by for the patch.
Attachment #124063 -
Attachment is obsolete: true
Attachment #124209 -
Attachment is obsolete: true
![]() |
Assignee | |
Comment 10•22 years ago
|
||
Comment on attachment 124210 [details] [diff] [review]
the right patch, this time
r+sr=bzbarsky; please find someone to check this in? (eg biesi or timeless,
maybe?)
Attachment #124210 -
Flags: superreview+
Attachment #124210 -
Flags: review+
Comment 11•22 years ago
|
||
ok, done:
Checking in mozilla/content/html/style/src/nsCSSParser.cpp;
/cvsroot/mozilla/content/html/style/src/nsCSSParser.cpp,v <-- nsCSSParser.cpp
new revision: 3.223; previous revision: 3.222
done
Status: NEW → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
![]() |
Assignee | |
Comment 12•22 years ago
|
||
*** Bug 223391 has been marked as a duplicate of this bug. ***
You need to log in
before you can comment on or make changes to this bug.
Description
•