-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Description
When uploading sub-directories containing more than 1 file with scp, an extra \x00 is inserted in channel, causing error while parsing record in recv_inner().
How to reproduce :
--- a/sftpcloudfs/scp.py
+++ b/sftpcloudfs/scp.py
@@ -143,9 +143,15 @@ class SCPHandler(threading.Thread):
if '\n' not in self.buffer:
while True:
chunk = self.channel.recv(1024)
+ self.log.info('[recv_line] chunk=%s', chunk)
+ hex_chunk = "".join(x.encode('hex') for x in chunk)
+ self.log.info('[recv_line] hex chunk=%s', hex_chunk)
self.buffer += chunk
+ self.log.info('[recv_line] buffer=%s', self.buffer)
+ hex_buffer = "".join(x.encode('hex') for x in self.buffer)
+ self.log.info('[recv_line] hex buffer=%s', hex_buffer)
if '\n' in chunk:
break
Logs :
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] chunk=D0755 0 in
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] hex chunk=4430373535203020696e0a
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] buffer=D0755 0 in
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] hex buffer=4430373535203020696e0a
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] chunk=D0755 0 sub1
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] hex chunk=4430373535203020737562310a
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] buffer=D0755 0 sub1
Jan 6 14:56:17 node-xxx paramiko[18892]: INFO: [recv_line] hex buffer=4430373535203020737562310a
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] chunk=C0644 65536 file2
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] hex chunk=43303634342036353533362066696c65320a
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] buffer=C0644 65536 file2
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] hex buffer=43303634342036353533362066696c65320a
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] chunk=
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] hex chunk=00
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] buffer=
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] hex buffer=00
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] chunk=C0644 32768 file1
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] hex chunk=43303634342033323736382066696c65310a
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] buffer=
Jan 6 14:56:18 node-xxx paramiko[18892]: INFO: [recv_line] hex buffer=0043303634342033323736382066696c65310a
My (dirty) workaround :
--- a/sftpcloudfs/scp.py
+++ b/sftpcloudfs/scp.py
@@ -143,6 +143,8 @@ class SCPHandler(threading.Thread):
if '\n' not in self.buffer:
while True:
chunk = self.channel.recv(1024)
+ if chunk == '\x00':
+ continue
self.buffer += chunk
if '\n' in chunk:
break
Any hints on what's causing this behaviour ?
Metadata
Metadata
Assignees
Labels
No labels