summaryrefslogtreecommitdiff
path: root/fw/app/src
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2025-04-20 17:07:23 +0200
committerxengineering <me@xengineering.eu>2025-04-20 17:07:23 +0200
commit0276d0fcf82e837b6c87d73681a14ce24989dd9f (patch)
tree36506463a33aa274dc56f8332269eab096eb73c7 /fw/app/src
parent267b61fdb660f281c7366d779ebde1c6eb2a7fef (diff)
downloadiot-contact-0276d0fcf82e837b6c87d73681a14ce24989dd9f.tar
iot-contact-0276d0fcf82e837b6c87d73681a14ce24989dd9f.tar.zst
iot-contact-0276d0fcf82e837b6c87d73681a14ce24989dd9f.zip
fw: app: http: Refactor settings handlersettings
Diffstat (limited to 'fw/app/src')
-rw-r--r--fw/app/src/http.c19
-rw-r--r--fw/app/src/settings.h1
2 files changed, 13 insertions, 7 deletions
diff --git a/fw/app/src/http.c b/fw/app/src/http.c
index 88cf579..f9016c1 100644
--- a/fw/app/src/http.c
+++ b/fw/app/src/http.c
@@ -100,26 +100,31 @@ static int settings_handler(
struct http_response_ctx *response_ctx,
void *user_data
) {
- static char buffer[100];
+ static char buffer[SETTINGS_JSON_MAX_LEN];
- int ret = settings_to_json(buffer, sizeof(buffer) - 1);
+ int ret = settings_to_json(buffer, sizeof(buffer));
if (ret < 0) {
LOG_ERR("Could not serialize payload for settings request");
return ret;
}
size_t len = strnlen(buffer, sizeof(buffer));
- if (len + 2 > sizeof(buffer)) {
- LOG_ERR("Settings JSON requires %d octets but buffer has only %d",
- len + 2, sizeof(buffer));
+ if (len >= sizeof(buffer)) {
+ LOG_ERR("End of settings JSON string not found (strnlen returned %d)",
+ sizeof(buffer));
return -ENOMEM;
}
- buffer[len] = '\n';
+ if (sizeof(buffer) < len + 2) {
+ LOG_ERR("Settings JSON buffer too small to hold \\n and \\0");
+ return -ENOMEM;
+ }
+ buffer[len + 0] = '\n';
buffer[len + 1] = '\0';
+ len += 1;
response_ctx->body = (const uint8_t *)buffer;
- response_ctx->body_len = len + 1;
+ response_ctx->body_len = len;
response_ctx->final_chunk = true;
response_ctx->status = HTTP_200_OK;
diff --git a/fw/app/src/settings.h b/fw/app/src/settings.h
index 290d1ff..8c7b4e3 100644
--- a/fw/app/src/settings.h
+++ b/fw/app/src/settings.h
@@ -12,6 +12,7 @@
#include <zephyr/data/json.h>
#define IPV6_STRLEN_MAX 39 // excluding '\0'
+#define SETTINGS_JSON_MAX_LEN (IPV6_STRLEN_MAX + 50)
struct settings_syslog_target {