driver_settings: bufferSize being zero means buffer overflow
Change-Id: I87b4a57c651840ac6aa01d602eddabb192c8c323 Reviewed-on: https://review.haiku-os.org/c/haiku/+/9116 Tested-by: Commit checker robot <[email protected]> Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
63792e3fd0
commit
778fe0b67b
@@ -525,11 +525,12 @@ put_chars(char **_buffer, size_t *_bufferSize, const char *chars)
|
||||
return true;
|
||||
|
||||
length = strlen(chars);
|
||||
*_bufferSize -= length;
|
||||
|
||||
if (*_bufferSize <= 0)
|
||||
if (*_bufferSize <= length) {
|
||||
*_bufferSize = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
*_bufferSize -= length;
|
||||
memcpy(buffer, chars, length);
|
||||
buffer += length;
|
||||
buffer[0] = '\0';
|
||||
@@ -546,11 +547,12 @@ put_char(char **_buffer, size_t *_bufferSize, char c)
|
||||
{
|
||||
char *buffer = *_buffer;
|
||||
|
||||
*_bufferSize -= 1;
|
||||
|
||||
if (*_bufferSize <= 0)
|
||||
if (*_bufferSize <= 1) {
|
||||
*_bufferSize = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
*_bufferSize -= 1;
|
||||
buffer[0] = c;
|
||||
buffer[1] = '\0';
|
||||
|
||||
@@ -872,8 +874,7 @@ get_driver_settings_string(void *_handle, char *buffer, size_t *_bufferSize,
|
||||
0, flat);
|
||||
}
|
||||
|
||||
*_bufferSize -= bufferSize;
|
||||
return bufferSize >= 0 ? B_OK : B_BUFFER_OVERFLOW;
|
||||
return bufferSize > 0 ? B_OK : B_BUFFER_OVERFLOW;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user