chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
condition: properly allow passing back errors from condition checks
[elogind.git]
/
src
/
shared
/
strv.c
diff --git
a/src/shared/strv.c
b/src/shared/strv.c
index 0df978d23b911f53be7e7c597e01c8b26c28a2a6..00857e40a7a3b500865c9516a2bc69fd25a8432e 100644
(file)
--- a/
src/shared/strv.c
+++ b/
src/shared/strv.c
@@
-380,13
+380,19
@@
char *strv_join_quoted(char **l) {
int strv_push(char ***l, char *value) {
char **c;
int strv_push(char ***l, char *value) {
char **c;
- unsigned n;
+ unsigned n
, m
;
if (!value)
return 0;
n = strv_length(*l);
if (!value)
return 0;
n = strv_length(*l);
- c = realloc(*l, sizeof(char*) * (n + 2));
+
+ /* increase and check for overflow */
+ m = n + 2;
+ if (m < n)
+ return -ENOMEM;
+
+ c = realloc_multiply(*l, sizeof(char*), m);
if (!c)
return -ENOMEM;
if (!c)
return -ENOMEM;
@@
-399,13
+405,19
@@
int strv_push(char ***l, char *value) {
int strv_push_prepend(char ***l, char *value) {
char **c;
int strv_push_prepend(char ***l, char *value) {
char **c;
- unsigned n, i;
+ unsigned n,
m,
i;
if (!value)
return 0;
n = strv_length(*l);
if (!value)
return 0;
n = strv_length(*l);
- c = new(char*, n + 2);
+
+ /* increase and check for overflow */
+ m = n + 2;
+ if (m < n)
+ return -ENOMEM;
+
+ c = new(char*, m);
if (!c)
return -ENOMEM;
if (!c)
return -ENOMEM;