Skip to content

Commit

Permalink
[CBRD-25229] Check the maximum length of the name in sm_check_system_…
Browse files Browse the repository at this point in the history
…class_by_name (#4953)

http://jira.cubrid.org/browse/CBRD-25229

If the length of the table name exceeds 222 bytes, a segmentation fault occurs in sm_check_system_class_by_name. To prevent this, there are the following changes:

1. Check the maximum length of the name in sm_check_system_class_by_name.

In CBRD-24929, sm_check_system_class_by_name was refactored to no longer be an issue.
  • Loading branch information
youngjinj authored Feb 23, 2024
1 parent 645de75 commit 4afd5d3
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/object/schema_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -3446,7 +3446,7 @@ sm_check_system_class_by_name (const char *name)
static int count = sizeof (system_classes) / sizeof (system_classes[0]);

SYSTEM_CLASS_DEF sa;
char downcase_name[SM_MAX_IDENTIFIER_LENGTH - SM_MAX_USER_LENGTH] = { '\0' };
char downcase_name[SM_MAX_IDENTIFIER_LENGTH] = { '\0' };
int len = 0;
int cmp = 0;
int i = 0;
Expand All @@ -3468,6 +3468,11 @@ sm_check_system_class_by_name (const char *name)
return false;
}

if (strlen (name) >= SM_MAX_IDENTIFIER_LENGTH - SM_MAX_USER_LENGTH)
{
return false;
}

sm_downcase_name (name, downcase_name, SM_MAX_IDENTIFIER_LENGTH - SM_MAX_USER_LENGTH);
sa.name = downcase_name;
sa.len = strlen (downcase_name);
Expand Down

0 comments on commit 4afd5d3

Please sign in to comment.