aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ionite34 <[email protected]>2022-11-24 11:59:33 +0800
committerGravatar ionite34 <[email protected]>2022-11-24 11:59:33 +0800
commit8f101080828c3aa752995a107646b6b548827f67 (patch)
tree84ab1d1a5e4e68144f9a7fd786c45e1678b64ae5
parentAdd unit test for MemFS access before __enter__ (diff)
Add request file IO error handling
-rw-r--r--snekbox/nsjail.py10
-rw-r--r--tests/test_nsjail.py8
2 files changed, 16 insertions, 2 deletions
diff --git a/snekbox/nsjail.py b/snekbox/nsjail.py
index ec5c6b1..b33e41e 100644
--- a/snekbox/nsjail.py
+++ b/snekbox/nsjail.py
@@ -218,8 +218,14 @@ class NsJail:
# Write provided files if any
for file in files:
- file.save_to(fs.home)
- log.info(f"Created file at {(fs.home / file.path)!r}.")
+ try:
+ file.save_to(fs.home)
+ log.info(f"Created file at {(fs.home / file.path)!r}.")
+ except OSError as e:
+ log.info(f"Failed to create file at {(fs.home / file.path)!r}.", exc_info=e)
+ return EvalResult(
+ args, None, f"{e.__class__.__name__}: Failed to create file '{file.path}'."
+ )
msg = "Executing code..."
if DEBUG:
diff --git a/tests/test_nsjail.py b/tests/test_nsjail.py
index d63180d..127753e 100644
--- a/tests/test_nsjail.py
+++ b/tests/test_nsjail.py
@@ -207,6 +207,14 @@ class NsJailTests(unittest.TestCase):
)
self.assertEqual(result.stderr, None)
+ def test_file_write_error(self):
+ """Test errors during file write."""
+ result = self.nsjail.python3([""], [FileAttachment("output", "hello")])
+
+ self.assertEqual(result.returncode, None)
+ self.assertEqual(result.stdout, "IsADirectoryError: Failed to create file 'output'.")
+ self.assertEqual(result.stderr, None)
+
def test_sigsegv_returns_139(self): # In honour of Juan.
code = dedent(
"""