diff --git a/phpseclib/Net/SFTP.php b/phpseclib/Net/SFTP.php index e139be53..f87a0aee 100644 --- a/phpseclib/Net/SFTP.php +++ b/phpseclib/Net/SFTP.php @@ -1876,10 +1876,12 @@ class SFTP extends SSH2 if ($local_start >= 0) { fseek($fp, $local_start); + $size-= $local_start; } elseif ($mode & self::RESUME_START) { // do nothing } else { fseek($fp, $offset); + $size-= $offset; } } elseif ($dataCallback) { $size = 0; diff --git a/tests/Functional/Net/SFTPUserStoryTest.php b/tests/Functional/Net/SFTPUserStoryTest.php index 6539c675..6e607c30 100644 --- a/tests/Functional/Net/SFTPUserStoryTest.php +++ b/tests/Functional/Net/SFTPUserStoryTest.php @@ -651,5 +651,22 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase $this->assertSame($stat['type'], NET_SFTP_TYPE_SYMLINK); $sftp->enableStatCache(); + + return $sftp; + } + + /** + * @depends testStatVsLstat + * @group github830 + */ + public function testEndlessLoopOnUpload($sftp) + { + $sftp->put('endless.txt', 'res.txt', SFTP::SOURCE_LOCAL_FILE, 0, 10); + + $this->assertSame( + substr(self::$exampleData, 10), + $sftp->get('endless.txt'), + 'Failed asserting that portions of a file could be uploaded.' + ); } }