Closed
Bug 170225
Opened 22 years ago
Closed 22 years ago
core dump (floating point exception) on page with font-size: 1px [@ nsTextFrame::MeasureText]
Categories
(Core :: Layout, defect, P2)
Tracking
()
RESOLVED
FIXED
People
(Reporter: ash, Assigned: john)
References
()
Details
(Keywords: crash, regression, testcase, Whiteboard: [FIX])
Crash Data
Attachments
(4 files)
(deleted),
text/plain
|
Details | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
patch
|
john
:
review+
bryner
:
superreview+
|
Details | Diff | Splinter Review |
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko/20020920
Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko/20020920
A website I was developing started to core dump mozilla from build 2002091908
(build 20020915xx doesn't core dump).
After much work I tracked it down to
body
{
font-family: Verdana, Arial, Helvetica, sans-serif;
}
.menu-bottom-sep
{
font-size: 1px; /* <--- 1px core dumps */
color: #000000;
background-color: #FFFFFF;
}
This doesn't core dump
body
{
}
.menu-bottom-sep
{
font-size: 1px;
color: #000000;
background-color: #FFFFFF;
}
nor does this
body
{
font-family: Verdana, Arial, Helvetica, sans-serif;
}
.menu-bottom-sep
{
font-size: 2px;
color: #000000;
background-color: #FFFFFF;
}
The webpage given in the url is the bare minimum I could get the test case down
to. If you take out the span it doesn't core dump.
Reproducible: Always
Steps to Reproduce:
1.Load nightly build 2002190908 (20021909xx?)
2.Go to webpage in URL
Actual Results:
(with build 2002092021)
/usr/local/tmp/package/run-mozilla.sh: line 444: 9566 Floating point
exception(core dumped) "$prog" ${1+"$@"}
Expected Results:
Page should show a '|' at font-size 1px
Nightlies are built without symbols? Is it worth posting the back strack?
When build 2002190908 core dumps it says
/usr/local/tmp/mozilla-19092002/run-mozilla.sh: line 444: 9607 Floating point
exception(core dumped) "$prog" ${1+"$@"}
Comment 1•22 years ago
|
||
stacktrace, linux trunk build 20020921
Comment 2•22 years ago
|
||
marking NEW
forgot... the problem is here:
estimatedNumChars = (maxWidth - aTextData.mX) / aTs.mAveCharWidth;
aTs.mAveCharWidth is 0
==> Layout/kmcclusk for traige
Comment 3•22 years ago
|
||
regression between trunk builds 2002091804 and 2002091921
jkeiser: this looks like a regression from bug 50998
Keywords: regression
Comment 4•22 years ago
|
||
backing out bug 50998 fixes the crash
==> jkeiser
Assignee: kmcclusk → jkeiser
add the old zero check again.
the default value of estimateNumChars: according to John Keiser, use
textRun.mTotalNumChars + 1
john, is it ok?
Assignee | ||
Comment 7•22 years ago
|
||
Comment on attachment 100363 [details] [diff] [review]
#2 patch
r=jkeiser if you:
- change else{ to else {
(please look at other parts of the file when you do things like this to find
out how it's done)
- add a comment saying something like "// If mAveCharWidth is zero, we can fit
the entire line"
- put this logic in a single function called GetEstimatedNumChars() or
something (it's now too big to duplicate in the code)
Attachment #100363 -
Flags: review+
Assignee | ||
Comment 8•22 years ago
|
||
Comment on attachment 100363 [details] [diff] [review]
#2 patch
Er, that's needs-work, but r=me with the suggested changes :)
Attachment #100363 -
Flags: review+ → needs-work+
john,
i rewrote the patch and found the code is ugly adding a new function. So i
spent much time trying to understand what the hell the code r doing and hope to
find better method.
1. in the first time entering the big loop, the textRun.mTotalNumC = 0 ( no
segment added yet), so....
2. to add a new func to wrap the GetEstimatedNum, i have to transfer at least 4
arguments into the func. the code looks too complicated for such a simple task.
i really dont like such code.
3. is it using a infinite var instead of aTextRun.mTotalCharNumers ?
Just FYI:
PRUint32
nsTextFrame::GetEstimatedNumChars(TextRun& aTextRun,
const nsHTMLReflowState& aReflowState,
TextReflowData& aTextData,
TextStyle& aTs)
{
PRInt32 estimatedNumChars;
// Estimate the number of characters that will fit. Use 105% of the available
// width divided by the average character width
// If mAveCharWidth is zero, we can fit the entire line
if (aTs.mAveCharWidth != 0) {
estimatedNumChars = (aReflowState.availableWidth - aTextData.mX) /
aTs.mAveCharWidth;
estimatedNumChars += estimatedNumChars / 20;
}
else {
estimatedNumChars = textRun.mTotalNumChars + 1;
}
return estimatedNumChars;
}
OR... use an infinite instead of textRun.mTotalNumChars?
PRUint32
nsTextFrame::GetEstimatedNumChars(const nsHTMLReflowState& aReflowState,
TextReflowData& aTextData,
TextStyle& aTs)
{
PRInt32 estimatedNumChars;
// Estimate the number of characters that will fit. Use 105% of the available
// width divided by the average character width
// If mAveCharWidth is zero, we can fit the entire line
if (aTs.mAveCharWidth != 0) {
estimatedNumChars = (aReflowState.availableWidth - aTextData.mX) /
aTs.mAveCharWidth;
estimatedNumChars += estimatedNumChars / 20;
}
else {
estimatedNumChars = 0xfffffff; //or sth else? is there a Macro for it?
}
return estimatedNumChars;
}
any way, i still dont understand nsTextFrame well, :( the code is not very clean
Assignee | ||
Comment 10•22 years ago
|
||
Rick, I like your idea about the infinite size = 0xfffffff. The constant you
are looking for is PRUINT32_MAX (it was recently added in bug 72100 so you may
need to update).
Here is a way around having ten thousand parameters--it makes the function's
purpose clearer as well.
PRUint32
nsTextFrame::EstimateNumChars(PRUint32 aAvailableWidth, PRUint32 aAverageCharWidth)
{
// Estimate the number of characters that will fit. Use 105% of the available
// width divided by the average character width.
// If mAveCharWidth is zero, we can fit the entire line.
if (aAverageCharWidth == 0) {
return PRUINT32_MAX;
}
PRUint32 estimatedNumChars = aAvailableWidth / aAverageCharWidth;
return estimatedNumChars + estimatedNumChars / 20;
}
And when you call it:
estimatedNumChars = EstimateNumChars(maxWidth - aTextData.mX, aTs.mAveCharWidth);
Comment 11•22 years ago
|
||
john,
the code looks ok now. it's great.
And the patch has passed jst's review tool ( on ur homepage :). so i guess u
can't find any style/format mistake this time. :)
Comment 12•22 years ago
|
||
*** Bug 170589 has been marked as a duplicate of this bug. ***
Comment 13•22 years ago
|
||
*** Bug 170556 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 14•22 years ago
|
||
Comment on attachment 100492 [details] [diff] [review]
#3
r=jkeiser
Excellent. That last close brace should not get un-indented, but I will change
that at checkin.
Attachment #100492 -
Flags: review+
Updated•22 years ago
|
Priority: -- → P2
Comment 15•22 years ago
|
||
Comment on attachment 100492 [details] [diff] [review]
#3
sr=bryner
Attachment #100492 -
Flags: superreview+
Assignee | ||
Comment 16•22 years ago
|
||
Will check in upon getting home. Rick, file a bug on getting CVS access, I will
vouch :)
Status: NEW → ASSIGNED
Whiteboard: [FIX]
Assignee | ||
Comment 17•22 years ago
|
||
Fix checked in.
Status: ASSIGNED → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Comment 18•22 years ago
|
||
*** Bug 171154 has been marked as a duplicate of this bug. ***
Comment 19•22 years ago
|
||
adding stack signature
Summary: core dump (floating point exception) on page with font-size: 1px → core dump (floating point exception) on page with font-size: 1px [@ nsTextFrame::MeasureText]
Updated•13 years ago
|
Crash Signature: [@ nsTextFrame::MeasureText]
You need to log in
before you can comment on or make changes to this bug.
Description
•