genotrance / nimarchive

libarchive wrapper for Nim
MIT License
17 stars 3 forks source link

Permission denied on temp dir deletion when extracting archive with read-only directory on GNU/Linux #13

Open rominf opened 3 years ago

rominf commented 3 years ago

Steps to reproduce

On GNU/Linux with zip installed:

$ cd /tmp
$ mkdir readonly_dir
$ touch readonly_dir/readonly_file
$ chmod 400 readonly_dir/readonly_file
$ chmod 500 readonly_dir/
$ zip archive.zip readonly_dir/ readonly_dir/readonly_file
adding: readonly_dir/ (stored 0%)
adding: readonly_dir/readonly_file (stored 0%)
$ echo -e 'import nimarchive\n\nextract("/tmp/archive.zip", "/tmp/output")' >/tmp/test_nimarchive.nim
$ nim run /tmp/test_nimarchive.nim
Hint: used config file '/home/rominf/dev/nim/config/nim.cfg' [Conf]
Hint: used config file '/home/rominf/dev/nim/config/config.nims' [Conf]
Hint: 7841 lines; 0.016s; 7.008MiB peakmem; Debug build; proj: /tmp/test_nimarchive.nim; out: /home/rominf/.cache/nim/test_nimarchive_d/test_nimarchive [SuccessX]
Hint: /home/rominf/.cache/nim/test_nimarchive_d/test_nimarchive  [Exec]
/tmp/test_nimarchive.nim(4) test_nimarchive
/home/rominf/.nimble/pkgs/nimarchive-0.5.4/nimarchive.nim(72) extract
/home/rominf/dev/nim/lib/pure/os.nim(2232) removeDir
/home/rominf/dev/nim/lib/pure/os.nim(2231) removeDir
/home/rominf/dev/nim/lib/pure/os.nim(1780) removeFile
/home/rominf/dev/nim/lib/pure/includes/oserr.nim(94) raiseOSError
Error: unhandled exception: Permission denied
Additional info: "/tmp/nimarchive-3939553936/readonly_dir/readonly_file" [OSError]
Error: execution of an external program failed: '/home/rominf/.cache/nim/test_nimarchive_d/test_nimarchive '

Proposed solution

Recursively add user write permissions to temporary dir.

Notes