freedomofpress / securedrop

GitHub repository for the SecureDrop whistleblower platform. Do not submit tips here!
https://securedrop.org/
Other
3.62k stars 685 forks source link

division by zero in `manage.py delete-disconnected-fs-submissions` #7201

Open cfm opened 2 months ago

cfm commented 2 months ago

Description

On iteration $i$ through the for-loop in securedrop.management.submissions.delete_disconnected_fs_submissions(), bytes_deleted = 0 can cause rate to be set to 0 in—

https://github.com/freedomofpress/securedrop/blob/f5ca29b6a279cc7d681ab6d7f08c98cedce2c8bd/securedrop/management/submissions.py#L161

—leading to a ZeroDivisionError in the next iteration $i + 1$ in:

https://github.com/freedomofpress/securedrop/blob/f5ca29b6a279cc7d681ab6d7f08c98cedce2c8bd/securedrop/management/submissions.py#L153

Steps to Reproduce

  1. Delete something in /var/lib/securedrop/store
  2. manage.py delete-disconnected-fs-submissions --force

Expected Behavior

Disconnected submissions are deleted.

Actual Behavior

Securely removing file 1/16299 /var/lib/securedrop/store/3ASULFX2WGAMVUXRYL6V2LNP77DA34TUKV4ARDHIU5OUJZQXJKVGL6VLAPGA2BJRGFFZ477RUKJBDIIQGVBGNIGKRGNCZLTIHMKCXCY=/4-stuffed_branch-reply.gpg...
elapsed: 0.06s rate: 0.0 MB/s overall rate: 0.0 MB/s
Traceback (most recent call last):
  File "/var/www/securedrop/manage.py", line 452, in <module>
    _run_from_commandline()
  File "/var/www/securedrop/manage.py", line 442, in _run_from_commandline
    rc = args.func(args)
  File "/var/www/securedrop/management/submissions.py", line 153, in delete_disconnected_fs_submissions
    eta = filesize / rate
ZeroDivisionError: float division by zero