Reviewed by Maciej.
authorap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Dec 2005 18:21:50 +0000 (18:21 +0000)
committerap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Dec 2005 18:21:50 +0000 (18:21 +0000)
        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=6246
          TextIterator::rangeFromLocationAndLength() returns nil range for an
          empty document

        Test: editing/input/range-for-empty-document.html

        * khtml/editing/visible_text.cpp:
        (khtml::TextIterator::rangeFromLocationAndLength):
        Handle the case of an empty document and (0, 0) requested range.

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

WebCore/ChangeLog
WebCore/khtml/editing/visible_text.cpp

index 238338218782216c9b8356495bcdfcd816015820..69d5503eacd1ac9b1e7501ce3951c5eb005872f7 100644 (file)
@@ -1,3 +1,17 @@
+2005-12-28  Alexey Proskuryakov  <ap@nypop.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugzilla.opendarwin.org/show_bug.cgi?id=6246
+          TextIterator::rangeFromLocationAndLength() returns nil range for an 
+          empty document
+
+        Test: editing/input/range-for-empty-document.html
+
+        * khtml/editing/visible_text.cpp:
+        (khtml::TextIterator::rangeFromLocationAndLength):
+        Handle the case of an empty document and (0, 0) requested range.
+
 2005-12-28  Anders Carlsson  <andersca@mac.com>
 
         Reviewed and landed by Geoff.
index 09e43504a2ed4da28f8f894ff86ae5c5c6ac93d4..9df66ad99a8492bac263c1856bcfd613a2c5d866 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2005 Alexey Proskuryakov.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -994,7 +995,21 @@ RangeImpl *TextIterator::rangeFromLocationAndLength(DocumentImpl *doc, int range
 
     RefPtr<RangeImpl> textRunRange;
 
-    for (TextIterator it(rangeOfContents(doc).get()); !it.atEnd(); it.advance()) {
+    TextIterator it(rangeOfContents(doc).get());
+    
+    if (rangeLocation == 0 && rangeLength == 0) {
+        int exception = 0;
+        textRunRange = it.range();
+        
+        resultRange->setStart(textRunRange->startContainer(exception), 0, exception);
+        assert(exception == 0);
+        resultRange->setEnd(textRunRange->startContainer(exception), 0, exception);
+        assert(exception == 0);
+        
+        return resultRange;
+    }
+
+    for (; !it.atEnd(); it.advance()) {
         int len = it.length();
         textRunRange = it.range();