This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new 17b028e59 examples: wgetjson: check allocations before use
17b028e59 is described below

commit 17b028e5929ff656401b195125d521da5cc70fa2
Author: Old-Ding <[email protected]>
AuthorDate: Mon Jul 6 06:20:55 2026 +0800

    examples: wgetjson: check allocations before use
    
    Several malloc() results in the wgetjson example were used before checking 
for allocation failure, which could crash low-memory paths before cleanup ran.
    
    Return or propagate allocation errors before using the allocated buffers. 
Use explicit NULL comparisons for the new pointer checks to match review 
feedback.
    
    Signed-off-by: Old-Ding <[email protected]>
---
 examples/wgetjson/wgetjson_main.c | 51 +++++++++++++++++++++++++++++----------
 1 file changed, 38 insertions(+), 13 deletions(-)

diff --git a/examples/wgetjson/wgetjson_main.c 
b/examples/wgetjson/wgetjson_main.c
index 083d68e93..5e2679a6b 100644
--- a/examples/wgetjson/wgetjson_main.c
+++ b/examples/wgetjson/wgetjson_main.c
@@ -110,9 +110,14 @@ static int wgetjson_callback(FAR char **buffer, int 
offset, int datend,
       return 0;
     }
 
-  if (!g_json_buff)
+  if (g_json_buff == NULL)
     {
       g_json_buff = malloc(len + 1);
+      if (g_json_buff == NULL)
+        {
+          return -ENOMEM;
+        }
+
       memcpy(g_json_buff, &((*buffer)[offset]), len);
       g_json_buff[len] = 0;
       g_json_bufflen = len;
@@ -253,6 +258,11 @@ static void wgetjson_json_item_scan(cJSON *item, const 
char *prefix)
       const char *string = item->string ? item->string : "(null)";
       size_t len = strlen(prefix) + strlen(string) + 2;
       newprefix = malloc(len);
+      if (newprefix == NULL)
+        {
+          return;
+        }
+
       snprintf(newprefix, len, "%s/%s", prefix, string);
 
       dorecurse = wgetjson_json_item_callback(newprefix, item->type, item);
@@ -370,6 +380,11 @@ int main(int argc, FAR char *argv[])
     }
 
   buffer = malloc(buffer_len);
+  if (buffer == NULL)
+    {
+      return -ENOMEM;
+    }
+
   wgetjson_json_release();
 
   struct webclient_context ctx;
@@ -388,6 +403,12 @@ int main(int argc, FAR char *argv[])
                                            post_multi_values,
                                            MULTI_POST_NDATA);
           post_buff = malloc(post_buff_len);
+          if (post_buff == NULL)
+            {
+              ret = -ENOMEM;
+              goto out;
+            }
+
           web_posts_str(post_buff, &post_buff_len, post_multi_names,
                         post_multi_values, MULTI_POST_NDATA);
         }
@@ -396,21 +417,24 @@ int main(int argc, FAR char *argv[])
           post_buff_len = web_post_strlen(post_single_name,
                                           post_single_value);
           post_buff = malloc(post_buff_len);
+          if (post_buff == NULL)
+            {
+              ret = -ENOMEM;
+              goto out;
+            }
+
           web_post_str(post_buff, &post_buff_len, post_single_name,
                        post_single_value);
         }
 
-      if (post_buff)
-        {
-          const char *header = "Content-Type: "
-                               "application/x-www-form-urlencoded";
-          ctx.method = "POST";
-          ctx.url = url;
-          ctx.headers = &header;
-          ctx.nheaders = 1;
-          webclient_set_static_body(&ctx, post_buff, strlen(post_buff));
-          ret = webclient_perform(&ctx);
-        }
+      const char *header = "Content-Type: "
+                           "application/x-www-form-urlencoded";
+      ctx.method = "POST";
+      ctx.url = url;
+      ctx.headers = &header;
+      ctx.nheaders = 1;
+      webclient_set_static_body(&ctx, post_buff, strlen(post_buff));
+      ret = webclient_perform(&ctx);
     }
   else
     {
@@ -439,6 +463,7 @@ int main(int argc, FAR char *argv[])
       g_has_json = false;
     }
 
+out:
   wgetjson_json_release();
   free(buffer);
   if (post_buff)
@@ -446,5 +471,5 @@ int main(int argc, FAR char *argv[])
       free(post_buff);
     }
 
-  return 0;
+  return ret < 0 ? ret : 0;
 }

Reply via email to