summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/system.nim4
-rw-r--r--lib/system/sysio.nim4
-rw-r--r--tests/stdlib/tio.nim11
3 files changed, 14 insertions, 5 deletions
diff --git a/lib/system.nim b/lib/system.nim
index 2e5d5ae19..8654f12a1 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -3127,8 +3127,8 @@ when not defined(JS): #and not defined(nimscript):
 
     proc readLine*(f: File, line: var TaintedString): bool {.tags: [ReadIOEffect],
                   benign.}
-      ## reads a line of text from the file `f` into `line`. `line` must not be
-      ## ``nil``! May throw an IO exception.
+      ## reads a line of text from the file `f` into `line`. May throw an IO
+      ## exception.
       ## A line of text may be delimited by ``LF`` or ``CRLF``. The newline
       ## character(s) are not part of the returned string. Returns ``false``
       ## if the end of the file has been reached, ``true`` otherwise. If
diff --git a/lib/system/sysio.nim b/lib/system/sysio.nim
index 40bbf97dc..df13ab628 100644
--- a/lib/system/sysio.nim
+++ b/lib/system/sysio.nim
@@ -161,7 +161,7 @@ proc readLine(f: File, line: var TaintedString): bool =
       var last = cast[ByteAddress](m) - cast[ByteAddress](addr line.string[0])
       if last > 0 and line.string[last-1] == '\c':
         line.string.setLen(last-1)
-        return fgetsSuccess
+        return last > 1 or fgetsSuccess
         # We have to distinguish between two possible cases:
         # \0\l\0 => line ending in a null character.
         # \0\l\l => last line without newline, null was put there by fgets.
@@ -169,7 +169,7 @@ proc readLine(f: File, line: var TaintedString): bool =
         if last < pos + sp - 1 and line.string[last+1] != '\0':
           dec last
       line.string.setLen(last)
-      return fgetsSuccess
+      return last > 0 or fgetsSuccess
     else:
       # fgets will have inserted a null byte at the end of the string.
       dec sp
diff --git a/tests/stdlib/tio.nim b/tests/stdlib/tio.nim
index 28e1881e8..b1057dee2 100644
--- a/tests/stdlib/tio.nim
+++ b/tests/stdlib/tio.nim
@@ -1,9 +1,12 @@
 discard """
   output: '''9
-b = false
+b = true
 123456789
 Second readLine raised an exception
 123456789
+1
+2aaaaaaaa
+3bbbbbbb
 '''
 """
 # bug #5349
@@ -38,3 +41,9 @@ echo line
 f.close()
 
 removeFile(fn)
+
+# bug #8961
+writeFile("test.txt", "1\C\L2aaaaaaaa\C\L3bbbbbbb")
+
+for line in lines("test.txt"):
+  echo line