Reviewed by Adele.
authorrwlbuis <rwlbuis@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Dec 2006 22:44:14 +0000 (22:44 +0000)
committerrwlbuis <rwlbuis@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Dec 2006 22:44:14 +0000 (22:44 +0000)
        http://bugs.webkit.org/show_bug.cgi?id=11765
        REGRESSION: Clicking on a select with size other than 1 and no children results in a crash

        Make sure returned value is -1 for selects without children.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@18089 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/forms/select-empty-list-expected.txt [new file with mode: 0644]
LayoutTests/fast/forms/select-empty-list.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/rendering/RenderListBox.cpp

index e2cd8a4c4601eeeeeb74b9141ea45f9d514a0fe0..e0abf3d05c966fdbbcdd2c06026b5108796e2c8c 100644 (file)
@@ -1,3 +1,14 @@
+2006-12-08  Rob Buis  <buis@kde.org>
+
+        Reviewed by Adele.
+
+        Testcase for:
+        http://bugs.webkit.org/show_bug.cgi?id=11765
+        REGRESSION: Clicking on a select with size other than 1 and no children results in a crash
+
+        * fast/forms/select-empty-list-expected.txt: Added.
+        * fast/forms/select-empty-list.html: Added.
+
 2006-12-08  Sam Weinig  <sam@webkit.org>
 
         Reviewed by Geoff.
diff --git a/LayoutTests/fast/forms/select-empty-list-expected.txt b/LayoutTests/fast/forms/select-empty-list-expected.txt
new file mode 100644 (file)
index 0000000..ae35b13
--- /dev/null
@@ -0,0 +1,7 @@
+This tests clicking on an empty select. If successful, the console message says Passed. See bug 11765.
+
+
+Passed
+
+
+
diff --git a/LayoutTests/fast/forms/select-empty-list.html b/LayoutTests/fast/forms/select-empty-list.html
new file mode 100644 (file)
index 0000000..e8d9c19
--- /dev/null
@@ -0,0 +1,29 @@
+<head>
+<script>
+function test()
+{
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+    if (window.eventSender) {
+        eventSender.mouseMoveTo(20, 70);
+        eventSender.mouseDown();
+        eventSender.mouseUp();
+    }
+}
+
+function selectClicked() {
+    var message = "Passed";
+    var paragraph = document.createElement('p');
+    paragraph.appendChild(document.createTextNode(message));
+    document.getElementById('console').appendChild(paragraph);
+}
+</script>
+</head>
+<body onload="test();">
+<p>This tests clicking on an empty select. If successful, the console message says Passed. See bug 11765.
+<form>
+<select  onclick="selectClicked()" style="width:100px;height:100px;" id="select" size=2>
+</select>
+</form>
+<p id="console"></p>
+</body>
index 8e2a3c5858609f4453ef16d53338d7fc29822a43..41b68fc900addacad1a4e5c9419a67057675f485 100644 (file)
@@ -1,3 +1,15 @@
+2006-12-08  Rob Buis  <buis@kde.org>
+
+        Reviewed by Adele.
+
+        http://bugs.webkit.org/show_bug.cgi?id=11765
+        REGRESSION: Clicking on a select with size other than 1 and no children results in a crash
+
+        Make sure returned value is -1 for selects without children.
+
+        * rendering/RenderListBox.cpp:
+        (WebCore::RenderListBox::listIndexAtOffset):
+
 2006-12-08  Adam Roben  <aroben@apple.com>
 
         Reviewed by Anders.
index bca4b01317560cf00d19a65961108987904c7b1f..98d4be367b02c7da3bf779c2bebbaef4809a822b 100644 (file)
@@ -351,11 +351,13 @@ int RenderListBox::listIndexAtOffset(int offsetX, int offsetY)
     HTMLSelectElement* select = static_cast<HTMLSelectElement*>(node());
     const Vector<HTMLElement*>& listItems = select->listItems();
 
-    int newOffset = max(0, offsetY / (style()->font().height() + optionsSpacingMiddle)) + m_indexOffset;
-    newOffset = max(0, min((int)listItems.size() - 1, newOffset));
-    int scrollbarWidth = m_vBar ? m_vBar->width() : 0;
-    if (offsetX >= borderLeft() + paddingLeft() && offsetX < absoluteBoundingBoxRect().width() - borderRight() - paddingRight() - scrollbarWidth)
-        return newOffset;
+    if ((int)listItems.size() > 0) {
+        int newOffset = max(0, offsetY / (style()->font().height() + optionsSpacingMiddle)) + m_indexOffset;
+        newOffset = max(0, min((int)listItems.size() - 1, newOffset));
+        int scrollbarWidth = m_vBar ? m_vBar->width() : 0;
+        if (offsetX >= borderLeft() + paddingLeft() && offsetX < absoluteBoundingBoxRect().width() - borderRight() - paddingRight() - scrollbarWidth)
+            return newOffset;
+    }
             
     return -1;
 }