<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[167351] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/167351">167351</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-04-16 10:19:23 -0700 (Wed, 16 Apr 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>ASSERTION FAILED: x2 &gt;= x1 in WebCore::RenderObject::drawLineForBoxSide
https://bugs.webkit.org/show_bug.cgi?id=127835

Source/WebCore:
In some cases when a negative margin and a positive padding are applied
together to the right and/or left side of the box, the logical width of
the borders can be set to a negative value, making the assertion fire.
The fix checks if the width or height of the box is negative, and if so,
it will not display the borders and shadows of the box.

Patch by Martin Hodovan &lt;mhodovan@inf.u-szeged.hu&gt; on 2014-04-16
Reviewed by Darin Adler.

Test: fast/css/padding-margin-negative-border.html

* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::paintBorder):

LayoutTests:
Added test demonstrates four cases:
Test #1: Negative upper margin + positive upper padding
Test #2: Negative right margin + positive right padding (used to fail)
Test #3: Negative bottom margin + positive bottom padding
Test #4: Negative left margin + positive left padding (used to fail)

Patch by Martin Hodovan &lt;mhodovan@inf.u-szeged.hu&gt; on 2014-04-16
Reviewed by Darin Adler.

* fast/css/padding-margin-negative-border-expected.html: Added.
* fast/css/padding-margin-negative-border.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxModelObjectcpp">trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcsspaddingmarginnegativeborderexpectedhtml">trunk/LayoutTests/fast/css/padding-margin-negative-border-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcsspaddingmarginnegativeborderhtml">trunk/LayoutTests/fast/css/padding-margin-negative-border.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (167350 => 167351)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-04-16 17:17:11 UTC (rev 167350)
+++ trunk/LayoutTests/ChangeLog        2014-04-16 17:19:23 UTC (rev 167351)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2014-04-16  Martin Hodovan  &lt;mhodovan@inf.u-szeged.hu&gt;
+
+        ASSERTION FAILED: x2 &gt;= x1 in WebCore::RenderObject::drawLineForBoxSide
+        https://bugs.webkit.org/show_bug.cgi?id=127835
+
+        Added test demonstrates four cases:
+        Test #1: Negative upper margin + positive upper padding
+        Test #2: Negative right margin + positive right padding (used to fail)
+        Test #3: Negative bottom margin + positive bottom padding
+        Test #4: Negative left margin + positive left padding (used to fail)
+
+        Reviewed by Darin Adler.
+
+        * fast/css/padding-margin-negative-border-expected.html: Added.
+        * fast/css/padding-margin-negative-border.html: Added.
+
</ins><span class="cx"> 2014-04-16  Jer Noble  &lt;jer.noble@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [MSE] Seeks into buffered ranges will never complete.
</span></span></pre></div>
<a id="trunkLayoutTestsfastcsspaddingmarginnegativeborderexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/padding-margin-negative-border-expected.html (0 => 167351)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/padding-margin-negative-border-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/padding-margin-negative-border-expected.html        2014-04-16 17:19:23 UTC (rev 167351)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+  &lt;body&gt;
+    &lt;table style=&quot;width:700px&quot;&gt;
+      &lt;tr&gt;
+        &lt;td&gt;top&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: -30px 0px 0px 0px;
+                padding: 1px 0px 0px 0px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+
+    &lt;table style=&quot;width:700px&quot;&gt;
+      &lt;tr&gt;
+        &lt;td&gt;right&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;
+                    border-color:white&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: 0px -208px 0px 0px;
+                padding: 0px 1px 0px 0px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+
+    &lt;table style=&quot;width:700px&quot;&gt;
+      &lt;tr&gt;
+        &lt;td&gt;bottom&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: 0px 0px -30px 0px;
+                padding: 0px 0px 1px 0px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+
+    &lt;table style=&quot;width:700px&quot;&gt;
+        &lt;td&gt;left&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;
+                    border-color:white&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: 0px 0px 0px -208px;
+                padding: 0px 0px 0px 31px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+  &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcsspaddingmarginnegativeborderhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/padding-margin-negative-border.html (0 => 167351)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/padding-margin-negative-border.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/padding-margin-negative-border.html        2014-04-16 17:19:23 UTC (rev 167351)
</span><span class="lines">@@ -0,0 +1,67 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+  &lt;body&gt;
+    &lt;table style=&quot;width:700px&quot;&gt;
+      &lt;tr&gt;
+        &lt;td&gt;top&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: -30px 0px 0px 0px;
+                padding: 1px 0px 0px 0px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+
+    &lt;table style=&quot;width:700px&quot;&gt;
+      &lt;tr&gt;
+        &lt;td&gt;right&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: 0px -208px 0px 0px;
+                padding: 0px 1px 0px 0px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+
+    &lt;table style=&quot;width:700px&quot;&gt;
+      &lt;tr&gt;
+        &lt;td&gt;bottom&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: 0px 0px -30px 0px;
+                padding: 0px 0px 1px 0px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+
+    &lt;table style=&quot;width:700px&quot;&gt;
+        &lt;td&gt;left&lt;/td&gt;
+        &lt;td style=&quot;width:400px&quot;&gt;
+          &lt;b style=&quot;border:solid;&quot;&gt;
+            &lt;i style=&quot;
+                background-color:green;
+                margin: 0px 0px 0px -208px;
+                padding: 0px 0px 0px 31px;&quot;&gt;
+                Here is some text.
+            &lt;/i&gt;
+          &lt;/b&gt;
+        &lt;/td&gt;
+      &lt;/tr&gt;
+    &lt;/table&gt;
+  &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (167350 => 167351)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-16 17:17:11 UTC (rev 167350)
+++ trunk/Source/WebCore/ChangeLog        2014-04-16 17:19:23 UTC (rev 167351)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2014-04-16  Martin Hodovan  &lt;mhodovan@inf.u-szeged.hu&gt;
+
+        ASSERTION FAILED: x2 &gt;= x1 in WebCore::RenderObject::drawLineForBoxSide
+        https://bugs.webkit.org/show_bug.cgi?id=127835
+
+        In some cases when a negative margin and a positive padding are applied
+        together to the right and/or left side of the box, the logical width of
+        the borders can be set to a negative value, making the assertion fire.
+        The fix checks if the width or height of the box is negative, and if so,
+        it will not display the borders and shadows of the box.
+
+        Reviewed by Darin Adler.
+
+        Test: fast/css/padding-margin-negative-border.html
+
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::paintBorder):
+
</ins><span class="cx"> 2014-04-16  Jer Noble  &lt;jer.noble@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [MSE] Seeks into buffered ranges will never complete.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxModelObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (167350 => 167351)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2014-04-16 17:17:11 UTC (rev 167350)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2014-04-16 17:19:23 UTC (rev 167351)
</span><span class="lines">@@ -1719,6 +1719,9 @@
</span><span class="cx">     RoundedRect outerBorder = style.getRoundedBorderFor(rect, &amp;view(), includeLogicalLeftEdge, includeLogicalRightEdge);
</span><span class="cx">     RoundedRect innerBorder = style.getRoundedInnerBorderFor(borderInnerRectAdjustedForBleedAvoidance(*graphicsContext, rect, bleedAvoidance), includeLogicalLeftEdge, includeLogicalRightEdge);
</span><span class="cx"> 
</span><ins>+    if (outerBorder.rect().isEmpty())
+        return;
+
</ins><span class="cx">     bool haveAlphaColor = false;
</span><span class="cx">     bool haveAllSolidEdges = true;
</span><span class="cx">     bool haveAllDoubleEdges = true;
</span></span></pre>
</div>
</div>

</body>
</html>