diff options
author | xengineering <me@xengineering.eu> | 2025-04-20 17:07:23 +0200 |
---|---|---|
committer | xengineering <me@xengineering.eu> | 2025-04-20 17:07:23 +0200 |
commit | 0276d0fcf82e837b6c87d73681a14ce24989dd9f (patch) | |
tree | 36506463a33aa274dc56f8332269eab096eb73c7 /fw/app/src | |
parent | 267b61fdb660f281c7366d779ebde1c6eb2a7fef (diff) | |
download | iot-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.c | 19 | ||||
-rw-r--r-- | fw/app/src/settings.h | 1 |
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 { |