From b42c184f74a6ef92e5faed2ebc4c102d943f7c4d Mon Sep 17 00:00:00 2001 From: Olaf Bergmann Date: Mon, 21 Feb 2022 14:10:16 +0100 Subject: [PATCH] block.c: Fix possible null-pointer dereference Commit 9cb2f62a3 [1] has introduced library-internal handling of Block1 and Block2 requests. To add the data to the response body the function coap_add_data_large_internal() is used. This change calls the function independent of a Block2 request unless request is NULL. The response code is set to 500 if coap_add_data_large_internal() failed. Fixes Coverity-Id 1514379 [1] https://github.com/obgm/libcoap/commit/9cb2f62a3eef2e0aeb682615b785d4734b473bd4 --- src/block.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/block.c b/src/block.c index ea1166ee..5d1ff2f2 100644 --- a/src/block.c +++ b/src/block.c @@ -698,25 +698,15 @@ coap_add_data_large_response(coap_resource_t *resource, default: /* everything is good */ ; } - - if (!coap_add_data_large_internal(session, response, resource, query, - maxage, etag, length, data, - release_func, app_ptr, - request->code)) { - response->code = COAP_RESPONSE_CODE(500); - goto error; - } - - return 1; } - /* - * BLOCK2 not requested - */ - if (!coap_add_data_large_internal(session, response, resource, query, maxage, - etag, length, data, release_func, - app_ptr, request->code)) { - response->code = COAP_RESPONSE_CODE(400); + /* add data body */ + if (request && + !coap_add_data_large_internal(session, response, resource, query, + maxage, etag, length, data, + release_func, app_ptr, + request->code)) { + response->code = COAP_RESPONSE_CODE(500); goto error; }