The string length validation will not detect strings
that exceed the max length.
For example, when i = max_length-1 and utf8[i] is a valid
character (>= 0x20 and < 0x7f) no error is thrown and
the next iteration will end the loop.
This change extends the loop and the if check to
catch this issue.
int num_char_bytes = 0;
int i, j;
- for (i = 0; i < max_length; i++) {
+ for (i = 0; i <= max_length; i++) {
if (utf8[i] == 0) {
break;
+ } else if (i == max_length) {
+ result = VK_STRING_ERROR_LENGTH;
+ break;
} else if ((utf8[i] >= 0xa) && (utf8[i] < 0x7f)) {
num_char_bytes = 0;
} else if ((utf8[i] & UTF8_ONE_BYTE_MASK) == UTF8_ONE_BYTE_CODE) {
int num_char_bytes = 0;
int i, j;
- for (i = 0; i < max_length; i++) {
+ for (i = 0; i <= max_length; i++) {
if (utf8[i] == 0) {
break;
+ } else if (i == max_length) {
+ result |= VK_STRING_ERROR_LENGTH;
+ break;
} else if ((utf8[i] >= 0x20) && (utf8[i] < 0x7f)) {
num_char_bytes = 0;
} else if ((utf8[i] & UTF8_ONE_BYTE_MASK) == UTF8_ONE_BYTE_CODE) {