2010-10-04 Erik Arvidsson <arv@chromium.org>
authorarv@chromium.org <arv@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Oct 2010 23:07:10 +0000 (23:07 +0000)
committerarv@chromium.org <arv@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Oct 2010 23:07:10 +0000 (23:07 +0000)
        Reviewed by James Robinson.

        https://bugs.webkit.org/show_bug.cgi?id=47122
        Crash in classList when class attribute is empty.

        * fast/dom/HTMLElement/class-list-expected.txt:
        * fast/dom/HTMLElement/class-list-quirks-expected.txt:
        * fast/dom/HTMLElement/script-tests/class-list.js:
2010-10-04  Erik Arvidsson  <arv@chromium.org>

        Reviewed by James Robinson.

        https://bugs.webkit.org/show_bug.cgi?id=47122
        Crash in classList when class attribute is empty.

        Tests: fast/dom/HTMLElement/class-list.html

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::length):
        (WebCore::DOMTokenList::containsInternal):
        (WebCore::DOMTokenList::classNames):

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

LayoutTests/ChangeLog
LayoutTests/fast/dom/HTMLElement/class-list-expected.txt
LayoutTests/fast/dom/HTMLElement/class-list-quirks-expected.txt
LayoutTests/fast/dom/HTMLElement/script-tests/class-list.js
WebCore/ChangeLog
WebCore/html/DOMTokenList.cpp

index 7c0cc2b..f25da35 100644 (file)
@@ -1,3 +1,14 @@
+2010-10-04  Erik Arvidsson  <arv@chromium.org>
+
+        Reviewed by James Robinson.
+
+        https://bugs.webkit.org/show_bug.cgi?id=47122
+        Crash in classList when class attribute is empty.
+
+        * fast/dom/HTMLElement/class-list-expected.txt:
+        * fast/dom/HTMLElement/class-list-quirks-expected.txt:
+        * fast/dom/HTMLElement/script-tests/class-list.js:
+
 2010-10-04  Justin Schuh  <jschuh@chromium.org>
 
         Reviewed by James Robinson.
index bd0e8a4..fa90e6f 100644 (file)
@@ -17,6 +17,11 @@ PASS element.className is ""
 PASS element.className is ""
 PASS element.className is " y y "
 PASS element.className is "y"
+Ensure that we can handle empty class name correctly
+PASS element.className is "x"
+PASS element.className is ""
+PASS element.classList.contains('x') is false
+PASS element.classList[1] is null
 Testing add in presence of trailing white spaces.
 PASS element.className is "x y"
 PASS element.className is "x    y"
index bd0e8a4..fa90e6f 100644 (file)
@@ -17,6 +17,11 @@ PASS element.className is ""
 PASS element.className is ""
 PASS element.className is " y y "
 PASS element.className is "y"
+Ensure that we can handle empty class name correctly
+PASS element.className is "x"
+PASS element.className is ""
+PASS element.classList.contains('x') is false
+PASS element.classList[1] is null
 Testing add in presence of trailing white spaces.
 PASS element.className is "x y"
 PASS element.className is "x    y"
index 2a34dfa..8915130 100644 (file)
@@ -77,6 +77,21 @@ createElement(' x y  x ');
 element.classList.remove('x');
 shouldBeEqualToString('element.className', 'y');
 
+
+debug('Ensure that we can handle empty class name correctly');
+element = document.createElement('span');
+element.classList.toggle('x');
+shouldBeEqualToString('element.className', 'x');
+element.classList.toggle('x');
+shouldBeEqualToString('element.className', '');
+
+element = document.createElement('span');
+shouldBeFalse('element.classList.contains(\'x\')');
+shouldBeNull('element.classList[1]');
+element.classList.remove('x');
+element.classList.add('x')
+
+
 debug('Testing add in presence of trailing white spaces.');
 
 createElement('x ');
index a6355ab..9e892c8 100644 (file)
@@ -1,3 +1,17 @@
+2010-10-04  Erik Arvidsson  <arv@chromium.org>
+
+        Reviewed by James Robinson.
+
+        https://bugs.webkit.org/show_bug.cgi?id=47122
+        Crash in classList when class attribute is empty.
+
+        Tests: fast/dom/HTMLElement/class-list.html
+
+        * html/DOMTokenList.cpp:
+        (WebCore::DOMTokenList::length):
+        (WebCore::DOMTokenList::containsInternal):
+        (WebCore::DOMTokenList::classNames):
+
 2010-10-04  Darin Adler  <darin@apple.com>
 
         Reviewed by Dan Bernstein.
index d19875b..3383447 100644 (file)
@@ -72,7 +72,7 @@ void DOMTokenList::deref()
 
 unsigned DOMTokenList::length() const
 {
-    return classNames().size();
+    return m_element->hasClass() ? classNames().size() : 0;
 }
 
 const AtomicString DOMTokenList::item(unsigned index) const
@@ -91,7 +91,7 @@ bool DOMTokenList::contains(const AtomicString& token, ExceptionCode& ec) const
 
 bool DOMTokenList::containsInternal(const AtomicString& token) const
 {
-    return classNames().contains(token);
+    return m_element->hasClass() && classNames().contains(token);
 }
 
 void DOMTokenList::add(const AtomicString& token, ExceptionCode& ec)
@@ -199,6 +199,7 @@ void DOMTokenList::reset(const String& newClassName)
 
 const SpaceSplitString& DOMTokenList::classNames() const
 {
+    ASSERT(m_element->hasClass());
     if (!m_classNamesForQuirksMode.isNull())
         return m_classNamesForQuirksMode;
     return m_element->attributeMap()->classNames();