]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix string-lines return for ""
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 1 May 2022 21:05:06 +0000 (23:05 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 1 May 2022 21:05:06 +0000 (23:05 +0200)
* lisp/subr.el (string-lines): Return the correct result on ""
(bug#55213).

lisp/subr.el
test/lisp/subr-tests.el

index d6ea309207498eedee28660a9507f78336d82d5f..aded02c4f7995e83ade7ba96c28b796aaf53b438 100644 (file)
@@ -6747,29 +6747,31 @@ is inserted before adjusting the number of empty lines."
 If OMIT-NULLS, empty lines will be removed from the results.
 If KEEP-NEWLINES, don't strip trailing newlines from the result
 lines."
-  (let ((lines nil)
-        (start 0))
-    (while (< start (length string))
-      (let ((newline (string-search "\n" string start)))
-        (if newline
-            (progn
-              (when (or (not omit-nulls)
-                        (not (= start newline)))
-                (let ((line (substring string start
-                                       (if keep-newlines
-                                           (1+ newline)
-                                         newline))))
-                  (when (not (and keep-newlines omit-nulls
-                                  (equal line "\n")))
-                    (push line lines))))
-              (setq start (1+ newline)))
-          ;; No newline in the remaining part.
-          (if (zerop start)
-              ;; Avoid a string copy if there are no newlines at all.
-              (push string lines)
-            (push (substring string start) lines))
-          (setq start (length string)))))
-    (nreverse lines)))
+  (if (equal string "")
+      (list "")
+    (let ((lines nil)
+          (start 0))
+      (while (< start (length string))
+        (let ((newline (string-search "\n" string start)))
+          (if newline
+              (progn
+                (when (or (not omit-nulls)
+                          (not (= start newline)))
+                  (let ((line (substring string start
+                                         (if keep-newlines
+                                             (1+ newline)
+                                           newline))))
+                    (when (not (and keep-newlines omit-nulls
+                                    (equal line "\n")))
+                      (push line lines))))
+                (setq start (1+ newline)))
+            ;; No newline in the remaining part.
+            (if (zerop start)
+                ;; Avoid a string copy if there are no newlines at all.
+                (push string lines)
+              (push (substring string start) lines))
+            (setq start (length string)))))
+      (nreverse lines))))
 
 (defun buffer-match-p (condition buffer-or-name &optional arg)
   "Return non-nil if BUFFER-OR-NAME matches CONDITION.
index 93e4475d6bc8ca31325e60f5569205f00afae900..f4676793ff2c02a7d80607fda3cea65872bf0401 100644 (file)
@@ -1029,6 +1029,8 @@ final or penultimate step during initialization."))
   (should-not (readablep (list (make-marker)))))
 
 (ert-deftest test-string-lines ()
+  (should (equal (string-lines "") '("")))
+
   (should (equal (string-lines "foo") '("foo")))
   (should (equal (string-lines "foo\n") '("foo")))
   (should (equal (string-lines "foo\nbar") '("foo" "bar")))