hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/scripts/kconfig/preprocess.c
....@@ -2,6 +2,7 @@
22 //
33 // Copyright (C) 2018 Masahiro Yamada <yamada.masahiro@socionext.com>
44
5
+#include <ctype.h>
56 #include <stdarg.h>
67 #include <stdbool.h>
78 #include <stdio.h>
....@@ -9,10 +10,12 @@
910 #include <string.h>
1011
1112 #include "list.h"
13
+#include "lkc.h"
1214
1315 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
1416
1517 static char *expand_string_with_args(const char *in, int argc, char *argv[]);
18
+static char *expand_string(const char *in);
1619
1720 static void __attribute__((noreturn)) pperror(const char *format, ...)
1821 {
....@@ -393,6 +396,9 @@
393396
394397 p++;
395398 }
399
+
400
+ if (new_argc >= FUNCTION_MAX_ARGS)
401
+ pperror("too many function arguments");
396402 new_argv[new_argc++] = prev;
397403
398404 /*
....@@ -548,15 +554,14 @@
548554 return __expand_string(&in, is_end_of_str, argc, argv);
549555 }
550556
551
-char *expand_string(const char *in)
557
+static char *expand_string(const char *in)
552558 {
553559 return expand_string_with_args(in, 0, NULL);
554560 }
555561
556562 static bool is_end_of_token(char c)
557563 {
558
- /* Why are '.' and '/' valid characters for symbols? */
559
- return !(isalnum(c) || c == '_' || c == '-' || c == '.' || c == '/');
564
+ return !(isalnum(c) || c == '_' || c == '-');
560565 }
561566
562567 /*