projects
/
systemd
/
.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
94a8a4b
)
string-util: make sure strrepa() doesn't doubly evaluate expressions
author
Lennart Poettering
<lennart@poettering.net>
Wed, 22 May 2024 13:42:56 +0000
(15:42 +0200)
committer
Luca Boccassi
<luca.boccassi@gmail.com>
Fri, 14 Jun 2024 22:50:03 +0000
(23:50 +0100)
src/basic/string-util.h
patch
|
blob
|
history
diff --git
a/src/basic/string-util.h
b/src/basic/string-util.h
index ff5efbcf557b820e44c099139d02c274478a286c..a032ee8d6a7ae4da8b3e93a901d074d512ee617c 100644
(file)
--- a/
src/basic/string-util.h
+++ b/
src/basic/string-util.h
@@
-202,11
+202,14
@@
char *strrep(const char *s, unsigned n);
#define strrepa(s, n) \
({ \
+ const char *_sss_ = (s); \
+ size_t _nnn_ = (n), _len_ = strlen(_sss_); \
+ assert(!size_multiply_overflow(_len_, _nnn_)); \
+ _len_ *= _nnn_; \
char *_d_, *_p_; \
- size_t _len_ = strlen(s) * n; \
_p_ = _d_ = newa(char, _len_ + 1); \
- for (
unsigned _i_ = 0; _i_ < n; _i_++)
\
- _p_ = stpcpy(_p_,
s);
\
+ for (
size_t _i_ = 0; _i_ < _nnn_; _i_++)
\
+ _p_ = stpcpy(_p_,
_sss_);
\
*_p_ = 0; \
_d_; \
})