NEW 86261
Removing the last child of an anonymous table or table section leaves the anonymous wrapper
https://bugs.webkit.org/show_bug.cgi?id=86261
Summary Removing the last child of an anonymous table or table section leaves the ano...
Levi Weintraub
Reported 2012-05-11 15:33:22 PDT
Created attachment 141513 [details] test case When an anonymous RenderTableSection is added to a RenderTable then stripped of all its children, it continues to return that is has 1 column due to http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderTableSection.cpp#L1273 This causes a crash/assert in FixedTableLayout::layout when values from m_width are used, but the vector is empty. Adding code to RenderTableSection::removeChild to also remove itself in the event that its anonymous and all its children are removed solves the bug without regressing, but I'm unsure if it's the best solution. I'll upload my patch after this for comment.
Attachments
test case (204 bytes, text/html)
2012-05-11 15:33 PDT, Levi Weintraub
no flags
Fixes the patch (632 bytes, patch)
2012-05-11 15:39 PDT, Levi Weintraub
no flags
Patch (4.04 KB, patch)
2012-05-11 17:23 PDT, Levi Weintraub
no flags
Patch (4.17 KB, patch)
2012-05-15 14:11 PDT, Levi Weintraub
no flags
Patch (67.44 KB, patch)
2012-05-22 17:19 PDT, Levi Weintraub
no flags
Patch (28.21 KB, patch)
2012-05-22 18:25 PDT, Levi Weintraub
jchaffraix: review+
webkit.review.bot: commit-queue-
Archive of layout-test-results from ec2-cr-linux-03 (528.41 KB, application/zip)
2012-05-22 20:29 PDT, WebKit Review Bot
no flags
Levi Weintraub
Comment 1 2012-05-11 15:39:59 PDT
Created attachment 141514 [details] Fixes the patch
Levi Weintraub
Comment 2 2012-05-11 15:41:30 PDT
(In reply to comment #1) > Created an attachment (id=141514) [details] > Fixes the patch Fixes the *crash* even ;)
Julien Chaffraix
Comment 3 2012-05-11 15:47:09 PDT
Comment on attachment 141514 [details] Fixes the patch That's not the way to go sir! There is a function called RenderObject::destroyAndCleanupAnonymousWrappers() which should be extended to handle this case. Currently there is a specific check against table-cell but it is artificial. Loosen it and you have your fix (on top of fixing one CSS test case IIRC).
Levi Weintraub
Comment 4 2012-05-11 15:47:54 PDT
(In reply to comment #3) > (From update of attachment 141514 [details]) > That's not the way to go sir! > There is a function called RenderObject::destroyAndCleanupAnonymousWrappers() which should be extended to handle this case. Currently there is a specific check against table-cell but it is artificial. Loosen it and you have your fix (on top of fixing one CSS test case IIRC). Woohoo! Proper fix FTW!
Julien Chaffraix
Comment 5 2012-05-11 15:52:37 PDT
See bug 52123 for the CSS tests are failing due to us not cleaning up our anonymous wrappers.
Levi Weintraub
Comment 6 2012-05-11 17:23:44 PDT
Levi Weintraub
Comment 7 2012-05-14 10:57:08 PDT
(In reply to comment #6) > Created an attachment (id=141533) [details] > Patch Ping :)
Julien Chaffraix
Comment 8 2012-05-14 11:11:42 PDT
Comment on attachment 141533 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=141533&action=review > Source/WebCore/rendering/RenderObject.cpp:2342 > // Currently we only remove anonymous cells' wrapper but we should remove all unneeded > // wrappers. See http://webkit.org/b/52123 as an example where this is needed. Please update the comment as this is not accurate anymore. > Source/WebCore/rendering/RenderObject.cpp:2343 > + if (parent->isTableCell() || parent->isTableRow() || parent->isTableSection()) I would use isTablePart() here instead of starting to special case only parts of the table. This means we should include more coverage but I would expect those elements to display some issues too. Also something I would like tested is a generated (anonymous) table or table part. In your example, it would be something like: .a:after { display: table-row; } > LayoutTests/fast/table/crash-anonymous-tablesection-not-removed.html:4 > +This tests that removing the children of an anonymous table section doesn't trigger a crash on relayout. Passes if there's no crash. Please include the bug id and description here so that it appears in the output.
Robert Hogan
Comment 9 2012-05-15 11:20:39 PDT
Closing the barn door? :)
Abhishek Arya
Comment 10 2012-05-15 11:38:04 PDT
(In reply to comment #9) > Closing the barn door? :) Why is this marked security ? The crash stack is speaking null ptr crash,
Robert Hogan
Comment 11 2012-05-15 12:03:57 PDT
(In reply to comment #10) > (In reply to comment #9) > > Closing the barn door? :) > > Why is this marked security ? The crash stack is speaking null ptr crash, Is it too late to pretend that I wasn't aware of the difference? I thought not.
Levi Weintraub
Comment 12 2012-05-15 14:11:06 PDT
Levi Weintraub
Comment 13 2012-05-15 14:13:09 PDT
(In reply to comment #8) > (From update of attachment 141533 [details]) > Also something I would like tested is a generated (anonymous) table or table part. In your example, it would be something like: > .a:after { display: table-row; } Though it doesn't cause crashes, we don't execute RenderObject::destroyAndCleanupAnonymousWrappers for generated content, since this method is triggered by Node::detach.
Julien Chaffraix
Comment 14 2012-05-15 16:23:47 PDT
Comment on attachment 142049 [details] Patch The change is super cool, I would love to see some testing for the <col> and <caption> cases.
Levi Weintraub
Comment 15 2012-05-16 10:50:47 PDT
(In reply to comment #14) > (From update of attachment 142049 [details]) > The change is super cool, I would love to see some testing for the <col> and <caption> cases. To test caption, one creates a caption box not parented in a table and an anonymous table box is created. However the fix attached to this bug that you recommended uses isTablePart, which includes table cells, columns, captions, rows, and sections, but *not* tables themselves. I suspect we want to remove tables as well. Agreed? Columns *would* have the same issue, since the CSS2 spec specifies they should also be wrapped in an anonymous table, but we seem to have a separate bug where we currently will parent a RenderTableCol directly in the body's renderer.
Julien Chaffraix
Comment 16 2012-05-16 12:06:54 PDT
(In reply to comment #15) > (In reply to comment #14) > > (From update of attachment 142049 [details] [details]) > > The change is super cool, I would love to see some testing for the <col> and <caption> cases. > > To test caption, one creates a caption box not parented in a table and an anonymous table box is created. However the fix attached to this bug that you recommended uses isTablePart, which includes table cells, columns, captions, rows, and sections, but *not* tables themselves. I suspect we want to remove tables as well. Agreed? Good point, I wasn't going to ask you to go this far but I don't mind if you do indeed. > Columns *would* have the same issue, since the CSS2 spec specifies they should also be wrapped in an anonymous table, but we seem to have a separate bug where we currently will parent a RenderTableCol directly in the body's renderer. OK, you can file a follow-up bug about that as I think this is a bug per CSS 2.1.
Levi Weintraub
Comment 17 2012-05-16 18:20:16 PDT
(In reply to comment #16) > (In reply to comment #15) > > (In reply to comment #14) > > > (From update of attachment 142049 [details] [details] [details]) > > > The change is super cool, I would love to see some testing for the <col> and <caption> cases. > > > > To test caption, one creates a caption box not parented in a table and an anonymous table box is created. However the fix attached to this bug that you recommended uses isTablePart, which includes table cells, columns, captions, rows, and sections, but *not* tables themselves. I suspect we want to remove tables as well. Agreed? > > Good point, I wasn't going to ask you to go this far but I don't mind if you do indeed. > > > Columns *would* have the same issue, since the CSS2 spec specifies they should also be wrapped in an anonymous table, but we seem to have a separate bug where we currently will parent a RenderTableCol directly in the body's renderer. > > OK, you can file a follow-up bug about that as I think this is a bug per CSS 2.1. I'm starting with that so I can include it in the test for this one.
Levi Weintraub
Comment 18 2012-05-22 17:19:29 PDT
WebKit Review Bot
Comment 19 2012-05-22 17:24:33 PDT
Attachment 143408 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/fast..." exit_code: 1 LayoutTests/platform/qt/test_expectations.txt:19: inspector/styles/override-screen-size.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:61: ietestcenter/css3/valuesandunits/units-000.htm is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:73: fast/borders/border-antialiasing.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:77: tables/mozilla/bugs/bug10296-1.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:83: editing/inserting/typing-space-to-trigger-smart-link.html is also in a Skipped file. [test/expectations] [5] WARNING: skia test_expectations overrides file '/mnt/git/webkit-style-queue/Source/WebKit/chromium/skia/skia_test_expectations.txt' does not exist WARNING: chromium test_expectations overrides file '/mnt/git/webkit-style-queue/Source/WebKit/chromium/webkit/tools/layout_tests/test_expectations.txt' does not exist LayoutTests/platform/mac/test_expectations.txt:161: fast/inline/continuation-outlines-with-layers.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/mac/test_expectations.txt:170: tables/mozilla_expected_failures/collapsing_borders/bug41262-5.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/mac/test_expectations.txt:219: ietestcenter/css3/valuesandunits/units-000.htm is also in a Skipped file. [test/expectations] [5] Total errors found: 8 in 13 files If any of these errors are false positives, please file a bug against check-webkit-style.
Julien Chaffraix
Comment 20 2012-05-22 17:34:58 PDT
Comment on attachment 143408 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=143408&action=review > LayoutTests/fast/table/anonymous-table-wrapper-cleanup.html:2 > +<html> The text makes the test platform-specific which makes Bob sad. Some nifty tricks: * change your HTML tag to be <html style="font: 10px Ahem; -webkit-font-smoothing: none;">, possibly make the text white to avoid any visual output as this is of no concern to us. * make all your text non-visible visually using a comment, a <title>, a meta-tag or display: none. In this case, I would go for the option one as the instruction would be in the text output. Also it would be nice to add a non-DRT popup as this test is very tied to DRT.
Levi Weintraub
Comment 21 2012-05-22 17:50:04 PDT
Comment on attachment 143408 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=143408&action=review >> LayoutTests/fast/table/anonymous-table-wrapper-cleanup.html:2 >> +<html> > > The text makes the test platform-specific which makes Bob sad. > > Some nifty tricks: > * change your HTML tag to be <html style="font: 10px Ahem; -webkit-font-smoothing: none;">, possibly make the text white to avoid any visual output as this is of no concern to us. > * make all your text non-visible visually using a comment, a <title>, a meta-tag or display: none. > > In this case, I would go for the option one as the instruction would be in the text output. > > Also it would be nice to add a non-DRT popup as this test is very tied to DRT. What we *really* need is a way to dump the DRT output without Image results :( Ahem will do... I don't believe we can do a non-drt popup, as there (at least as far as I know) is no way to query for anonymous renderers from the DOM! It'd be very strange if there were!
Julien Chaffraix
Comment 22 2012-05-22 18:11:56 PDT
Comment on attachment 143408 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=143408&action=review >>> LayoutTests/fast/table/anonymous-table-wrapper-cleanup.html:2 >>> +<html> >> >> The text makes the test platform-specific which makes Bob sad. >> >> Some nifty tricks: >> * change your HTML tag to be <html style="font: 10px Ahem; -webkit-font-smoothing: none;">, possibly make the text white to avoid any visual output as this is of no concern to us. >> * make all your text non-visible visually using a comment, a <title>, a meta-tag or display: none. >> >> In this case, I would go for the option one as the instruction would be in the text output. >> >> Also it would be nice to add a non-DRT popup as this test is very tied to DRT. > > What we *really* need is a way to dump the DRT output without Image results :( Ahem will do... > > I don't believe we can do a non-drt popup, as there (at least as far as I know) is no way to query for anonymous renderers from the DOM! It'd be very strange if there were! True but that wouldn't solve your problem here. The TEXT dump would still be platform-specific so you would have to use Ahem anyway. By non-drt popup, I meant: if (!window.layoutTestController) alert("This test is meant to be run under DRT. There is no way to test it manually as you need access to a RenderTree dump."); Sorry for being unclear.
Levi Weintraub
Comment 23 2012-05-22 18:15:15 PDT
(In reply to comment #22) > > What we *really* need is a way to dump the DRT output without Image results :( Ahem will do... > > > > I don't believe we can do a non-drt popup, as there (at least as far as I know) is no way to query for anonymous renderers from the DOM! It'd be very strange if there were! > > True but that wouldn't solve your problem here. The TEXT dump would still be platform-specific so you would have to use Ahem anyway. Yes, but I'm much happier with just platform-specific text files than *also* image results we don't care for! > if (!window.layoutTestController) > alert("This test is meant to be run under DRT. There is no way to test it manually as you need access to a RenderTree dump."); > > Sorry for being unclear. That clears it up! Thanks, sir :) I'll re-upload momentarily.
Levi Weintraub
Comment 24 2012-05-22 18:25:52 PDT
WebKit Review Bot
Comment 25 2012-05-22 18:28:59 PDT
Attachment 143426 [details] did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/fast..." exit_code: 1 LayoutTests/platform/qt/test_expectations.txt:19: inspector/styles/override-screen-size.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:61: ietestcenter/css3/valuesandunits/units-000.htm is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:73: fast/borders/border-antialiasing.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:77: tables/mozilla/bugs/bug10296-1.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/qt/test_expectations.txt:83: editing/inserting/typing-space-to-trigger-smart-link.html is also in a Skipped file. [test/expectations] [5] WARNING: skia test_expectations overrides file '/mnt/git/webkit-style-queue/Source/WebKit/chromium/skia/skia_test_expectations.txt' does not exist WARNING: chromium test_expectations overrides file '/mnt/git/webkit-style-queue/Source/WebKit/chromium/webkit/tools/layout_tests/test_expectations.txt' does not exist LayoutTests/platform/mac/test_expectations.txt:161: fast/inline/continuation-outlines-with-layers.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/mac/test_expectations.txt:170: tables/mozilla_expected_failures/collapsing_borders/bug41262-5.html is also in a Skipped file. [test/expectations] [5] LayoutTests/platform/mac/test_expectations.txt:219: ietestcenter/css3/valuesandunits/units-000.htm is also in a Skipped file. [test/expectations] [5] Total errors found: 8 in 13 files If any of these errors are false positives, please file a bug against check-webkit-style.
WebKit Review Bot
Comment 26 2012-05-22 20:29:48 PDT
Comment on attachment 143426 [details] Patch Attachment 143426 [details] did not pass chromium-ews (chromium-xvfb): Output: http://queues.webkit.org/results/12772075 New failing tests: fast/table/table-section-node-at-point-crash.html
WebKit Review Bot
Comment 27 2012-05-22 20:29:53 PDT
Created attachment 143442 [details] Archive of layout-test-results from ec2-cr-linux-03 The attached test failures were seen while running run-webkit-tests on the chromium-ews. Bot: ec2-cr-linux-03 Port: <class 'webkitpy.common.config.ports.ChromiumXVFBPort'> Platform: Linux-2.6.35-28-virtual-x86_64-with-Ubuntu-10.10-maverick
Julien Chaffraix
Comment 28 2012-05-22 20:42:19 PDT
Comment on attachment 143426 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=143426&action=review The queues have been acting weird on your previous attachments. Assuming you double-check that the failure is not a real regression, r=me. > LayoutTests/ChangeLog:20 > + * platform/chromium/test_expectations.txt: > + * platform/efl/test_expectations.txt: > + * platform/gtk/test_expectations.txt: > + * platform/mac-snowleopard/fast/table/anonymous-table-wrapper-cleanup-expected.png: Added. > + * platform/mac-snowleopard/fast/table/anonymous-table-wrapper-cleanup-expected.txt: Added. > + * platform/mac/test_expectations.txt: > + * platform/qt/test_expectations.txt: No need for all this complicated stuff: using Ahem, font size and no font-smoothing, your result should be cross-platform so just move the anonymous-table-wrapper-cleanup-expected.* files next to the test and no need to touch any test_expectation.txt (on top of that you forgot win).
Levi Weintraub
Comment 29 2012-05-22 22:48:23 PDT
Comment on attachment 143426 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=143426&action=review >> LayoutTests/ChangeLog:20 >> + * platform/qt/test_expectations.txt: > > No need for all this complicated stuff: using Ahem, font size and no font-smoothing, your result should be cross-platform so just move the anonymous-table-wrapper-cleanup-expected.* files next to the test and no need to touch any test_expectation.txt (on top of that you forgot win). I most certainly did *not* forget Win. It doesn't support test_expectations.txt: https://bugs.webkit.org/show_bug.cgi?id=38756
Julien Chaffraix
Comment 30 2012-05-23 07:07:11 PDT
Comment on attachment 143426 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=143426&action=review >>> LayoutTests/ChangeLog:20 >>> + * platform/qt/test_expectations.txt: >> >> No need for all this complicated stuff: using Ahem, font size and no font-smoothing, your result should be cross-platform so just move the anonymous-table-wrapper-cleanup-expected.* files next to the test and no need to touch any test_expectation.txt (on top of that you forgot win). > > I most certainly did *not* forget Win. It doesn't support test_expectations.txt: https://bugs.webkit.org/show_bug.cgi?id=38756 OK, you did not forget win but you might have turned the bot red nevertheless. For win, you need to edit the Skipped file, sir (also some other ports prefer Skipped files over test_expectations.txt but let's not split hairs here) > LayoutTests/fast/table/anonymous-table-wrapper-cleanup.html:23 > +</div> I didn't see that you missed 2 cases: table-column-group and table-caption. As a whole, I think you could just get away with just testing one display at time without wrapping them but that's fine as-is too.
Levi Weintraub
Comment 31 2012-05-23 10:34:01 PDT
(In reply to comment #28) > (From update of attachment 143426 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=143426&action=review > > The queues have been acting weird on your previous attachments. Assuming you double-check that the failure is not a real regression, r=me. This patch exposes a separate rendering issue in fast/table/table-section-node-at-point-crash.html. I've verified that no unexpected nodes are removed, and the render tree looks as expected, but without the addition of another block, the RenderText result isn't properly layed out and rendered. I'm going to look into this before landing this.
Note You need to log in before you can comment on or make changes to this bug.