You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2026/10/07 19:06:27 UTC
(nuttx-apps) 04/04: examples/nxflat: Fix the stack size and the argv[0] check of the task test.
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
commit 033b6c8d01e8cc7e686ab2b4e119075d1f158a24
Author: Marco Casaroli <ma...@gmail.com>
AuthorDate: Tue Oct 6 18:34:40 2026 +0200
examples/nxflat: Fix the stack size and the argv[0] check of the task test.
The child task had a 512 byte stack. Its first printf() overflows it and
overwrites the argument strings at the bottom of the stack, so the child
saw an empty argv[0]. Use CONFIG_DEFAULT_TASK_STACKSIZE.
With CONFIG_TASK_NAME_SIZE set to 0 the test expected argv[0] to be
"<noname>". But argv[0] is always the name given to task_create(); the
option only limits the copy in the TCB. Compare with that name in all
configurations.
Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Marco Casaroli <ma...@gmail.com>
---
examples/nxflat/tests/task/task.c | 22 +++++++---------------
1 file changed, 7 insertions(+), 15 deletions(-)
diff --git a/examples/nxflat/tests/task/task.c b/examples/nxflat/tests/task/task.c
index 8a208d5aa..82f9d3909 100644
--- a/examples/nxflat/tests/task/task.c
+++ b/examples/nxflat/tests/task/task.c
@@ -41,10 +41,6 @@ static char child_name[] = "child";
static char child_arg[] = "Hello from your parent!";
static sem_t g_sem;
-#if CONFIG_TASK_NAME_SIZE == 0
-static char no_name[] = "<noname>";
-#endif
-
/****************************************************************************
* Privite Functions
****************************************************************************/
@@ -68,21 +64,14 @@ int child_task(int argc, char **argv)
}
printf("Child: argv[0]=\"%s\"\n", argv[0]);
-#if CONFIG_TASK_NAME_SIZE == 0
- if (strcmp(argv[0], no_name) != 0)
- {
- printf("Child: expected argv[0] to be \"%s\"\n", no_name);
- printf("Child: Exit-ting with status=3\n");
- exit(3);
- }
-#else
- if (strncmp(argv[0], child_name, CONFIG_TASK_NAME_SIZE) != 0)
+ /* argv[0] is the name given to task_create(), whatever the TCB keeps */
+
+ if (strcmp(argv[0], child_name) != 0)
{
printf("Child: expected argv[0] to be \"%s\"\n", child_name);
printf("Child: Exit-ting with status=3\n");
exit(3);
}
-#endif
printf("Child: argv[1]=\"%s\"\n", argv[1]);
@@ -116,7 +105,10 @@ int main(int argc, char **argv)
child_argv[0] = child_arg;
child_argv[1] = 0;
- child_pid = task_create(child_name, 50, 512,
+
+ /* printf() alone overflows a 512 byte stack and overwrites argv */
+
+ child_pid = task_create(child_name, 50, CONFIG_DEFAULT_TASK_STACKSIZE,
child_task, (FAR char * const *)child_argv);
if (child_pid < 0)
{