Detect integer overflows in string_new_length()
These overflows were caught in object_new() until now.
This commit is contained in:
parent
6324df6d88
commit
40e276659b
10
src/string.c
10
src/string.c
|
@ -20,6 +20,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "System/error.h"
|
#include "System/error.h"
|
||||||
#include "System/object.h"
|
#include "System/object.h"
|
||||||
|
@ -106,9 +107,14 @@ String * string_new_length(String const * string, size_t length)
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s(\"%s\", %zu)\n", __func__, string, length);
|
fprintf(stderr, "DEBUG: %s(\"%s\", %zu)\n", __func__, string, length);
|
||||||
#endif
|
#endif
|
||||||
if((ret = object_new(++length)) == NULL)
|
if(length == SIZE_T_MAX)
|
||||||
|
{
|
||||||
|
error_set_code(-ERANGE, "%s", strerror(ERANGE));
|
||||||
return NULL;
|
return NULL;
|
||||||
snprintf(ret, length, "%s", (string != NULL) ? string : "");
|
}
|
||||||
|
if((ret = object_new(length + 1)) == NULL)
|
||||||
|
return NULL;
|
||||||
|
snprintf(ret, length + 1, "%s", (string != NULL) ? string : "");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user