summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2019-02-12 14:36:14 -0800
committerMicah Lee <micah@micahflee.com>2019-02-12 14:36:14 -0800
commit09c2696c27eb9a8bbf7a7d639530de64a4526c70 (patch)
treec1adb6bb1f6e5b13b92bab85997784633508280b
parent28eaf2f2beac99e4a217cff53514a935384f744d (diff)
downloadonionshare-09c2696c27eb9a8bbf7a7d639530de64a4526c70.tar.gz
onionshare-09c2696c27eb9a8bbf7a7d639530de64a4526c70.zip
Gracefully handle exceptions while writing a file during a receive mode transfer (like out of disk space error)
-rw-r--r--onionshare/web/receive_mode.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/onionshare/web/receive_mode.py b/onionshare/web/receive_mode.py
index b245042b..ea1dc2fd 100644
--- a/onionshare/web/receive_mode.py
+++ b/onionshare/web/receive_mode.py
@@ -193,10 +193,15 @@ class ReceiveModeFile(object):
"""
if self.upload_error or (not self.onionshare_request.stop_q.empty()):
self.close()
- self.onionshare_request.close()
+ self.onionshare_request.close(self.upload_error)
return
- bytes_written = self.f.write(b)
+ try:
+ bytes_written = self.f.write(b)
+ except:
+ # If we can't write the file, close early
+ self.upload_error = True
+ return
self.onionshare_write_func(self.onionshare_filename, bytes_written)
def close(self):
@@ -394,8 +399,12 @@ class ReceiveModeRequest(Request):
'progress': self.progress
})
- def file_close_func(self, filename):
+ def file_close_func(self, filename, upload_error=False):
"""
This function gets called when a specific file is closed.
"""
self.progress[filename]['complete'] = True
+
+ # If the file tells us there was an upload error, let the request know as well
+ if upload_error:
+ self.upload_error = True