e_info_protocol: Avoid overflow 27/305127/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 26 Jan 2024 08:03:08 +0000 (17:03 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 29 Jan 2024 03:48:03 +0000 (12:48 +0900)
Change-Id: I7baf6c4b5ffeb37d4e4aaf055973fad3c97f56f2

src/bin/e_info_protocol.c

index 76a1a36..d8e21fc 100644 (file)
@@ -272,6 +272,7 @@ _e_info_parser_statement_parse(E_Info_Tree *tree, E_Info_Token_Data *token)
 {
    E_Info_Tree_Node *node = NULL;
    E_Info_Rule_Node *data;
+   int min;
 
    if (token->last_token == E_INFO_TOKEN_L_BR)
      {
@@ -296,8 +297,9 @@ _e_info_parser_statement_parse(E_Info_Tree *tree, E_Info_Token_Data *token)
 
    data = (E_Info_Rule_Node *)_e_info_bintree_get_node_data(node);
 
-   strncpy(data->variable_name, token->last_symbol, token->symbol_len);
-   data->variable_name[token->symbol_len] = '\0';
+   min = MIN(STRING_MAX - 1, token->symbol_len);
+   strncpy(data->variable_name, token->last_symbol, min);
+   data->variable_name[min] = '\0';
 
    if (!strcasecmp(data->variable_name, "all"))
      {
@@ -345,8 +347,9 @@ _e_info_parser_statement_parse(E_Info_Tree *tree, E_Info_Token_Data *token)
    else if (token->last_token == E_INFO_TOKEN_SYMBOL)
      {
         data->value_type = E_INFO_DATA_TYPE_STRING;
-        strncpy(data->value.string, token->last_symbol, token->symbol_len);
-        data->value.string[token->symbol_len] = '\0';
+        min = MIN(STRING_MAX - 1, token->symbol_len);
+        strncpy(data->value.string, token->last_symbol, min);
+        data->value.string[min] = '\0';
      }
    else
      {