diff --git a/phpseclib/File/ANSI.php b/phpseclib/File/ANSI.php index dcb7df20..5ff1f2ea 100644 --- a/phpseclib/File/ANSI.php +++ b/phpseclib/File/ANSI.php @@ -419,7 +419,7 @@ class ANSI if ($this->x > $this->max_x) { $this->x = 0; - $this->y++; + $this->_newLine(); } else { $this->x++; } diff --git a/tests/Unit/File/ANSITest.php b/tests/Unit/File/ANSITest.php index 373504d1..a699446d 100644 --- a/tests/Unit/File/ANSITest.php +++ b/tests/Unit/File/ANSITest.php @@ -28,4 +28,22 @@ class Unit_File_ANSITest extends PhpseclibTestCase $this->assertSame($ansi->getScreen(), $expected); } + + public function testLineOverflow() + { + $str = ''; + foreach (range('a', 'y') as $char) { + $str.= "$char\r\n"; + } + $str.= str_repeat('z', 100); + + $ansi = new File_ANSI(); + $ansi->appendString($str); + + $screen = $ansi->getScreen(); + + $lines = explode("\r\n", $screen); + $this->assertSame(24, count($lines)); + $this->assertSame(str_repeat('z', 80), $lines[22]); + } }