From 507296ce3f50da0fef131ea59e75b8d6cf2eb842 Mon Sep 17 00:00:00 2001 From: Charlie Lenahan Date: Tue, 16 Jun 2015 18:01:27 -0400 Subject: [PATCH] Fix segfault in ocserver on invalid PUT json If a client does a PUT with json that has the old "oc" instead of "oic" it will cause a crash. Change-Id: I05764cf7fe5613486d55d3a81cc757f45204dad3 Signed-off-by: Charlie Lenahan Reviewed-on: https://gerrit.iotivity.org/gerrit/1286 Tested-by: jenkins-iotivity Reviewed-by: Erich Keane --- .../samples/linux/SimpleClientServer/ocserver.cpp | 28 ++++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp b/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp index e6fed19..68a15fa 100644 --- a/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp +++ b/resource/csdk/stack/samples/linux/SimpleClientServer/ocserver.cpp @@ -123,20 +123,28 @@ char* constructJsonResponse (OCEntityHandlerRequest *ehRequest) // Get root of JSON payload, then the 1st resource. cJSON* carrier = cJSON_GetObjectItem(putJson, "oic"); - carrier = cJSON_GetArrayItem(carrier, 0); - carrier = cJSON_GetObjectItem(carrier, "rep"); - - cJSON* prop = cJSON_GetObjectItem(carrier,"power"); - if (prop) + if (carrier) { - currLightResource->power =prop->valueint; - } + carrier = cJSON_GetArrayItem(carrier, 0); + carrier = cJSON_GetObjectItem(carrier, "rep"); + + cJSON* prop = cJSON_GetObjectItem(carrier,"power"); + if (prop) + { + currLightResource->power =prop->valueint; + } - prop = cJSON_GetObjectItem(carrier,"state"); - if (prop) + prop = cJSON_GetObjectItem(carrier,"state"); + if (prop) + { + currLightResource->state = prop->valueint; + } + } + else { - currLightResource->state = prop->valueint; + OC_LOG_V(WARNING, TAG, "Failed to find oic node"); } + cJSON_Delete(putJson); } -- 2.7.4