summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Clayton <a.clayton@nginx.com>2024-09-05 21:27:00 +0100
committerAndrew Clayton <a.clayton@nginx.com>2024-09-06 01:35:43 +0100
commit8c83f5cc5aae007ffab5fc53e1e7db2298f6b7f6 (patch)
treed294994807f083ee5c3720b195a4eda7d4e89ca8
parentc1c220bf0599166a41681dc3824c7be38631c0e0 (diff)
downloadproject_blackbird-8c83f5cc5aae007ffab5fc53e1e7db2298f6b7f6.tar.gz
project_blackbird-8c83f5cc5aae007ffab5fc53e1e7db2298f6b7f6.tar.bz2
w-h/0.2.0/large-upload: Add some primitive error checking
Check the status of the open(2) call and return an appropriate HTTP response code on error. Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
-rw-r--r--c/wasi-http/0.2.0/large-upload/component.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/c/wasi-http/0.2.0/large-upload/component.c b/c/wasi-http/0.2.0/large-upload/component.c
index 1030b01..a4eeba6 100644
--- a/c/wasi-http/0.2.0/large-upload/component.c
+++ b/c/wasi-http/0.2.0/large-upload/component.c
@@ -14,6 +14,7 @@
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
+#include <errno.h>
#include "proxy.h"
@@ -51,6 +52,37 @@ void exports_wasi_http_incoming_handler_handle(
fd = open("/var/tmp/wasm-wasi-component-upload.dat",
O_CREAT|O_TRUNC|O_WRONLY, 0666);
+ if (fd == -1) {
+ wasi_http_types_status_code_t sc;
+ wasi_http_types_borrow_outgoing_response_t b_resp;
+
+ printf("E: %s (/var/tmp/wasm-wasi-component-upload.dat)\n",
+ strerror(errno));
+
+ switch (errno) {
+ case EACCES:
+ case EFAULT:
+ case EPERM:
+ sc = 403;
+ break;
+ case EBADF:
+ case ENAMETOOLONG:
+ case ENODEV:
+ case ENOENT:
+ case ENOTDIR:
+ sc = 404;
+ break;
+ default:
+ sc = 500;
+ }
+
+ b_resp = wasi_http_types_borrow_outgoing_response(resp);
+ wasi_http_types_method_outgoing_response_set_status_code(b_resp,
+ sc);
+ rerr.val.ok = resp;
+
+ goto out_response;
+ }
b_req = wasi_http_types_borrow_incoming_request(request);
@@ -87,6 +119,7 @@ void exports_wasi_http_incoming_handler_handle(
total_bytes_wrote += data.len;
} while (total_bytes_wrote < content_len);
+out_response:
wasi_http_types_static_response_outparam_set(response_out, &rerr);
close(fd);