]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
string-util: make sure strrepa() doesn't doubly evaluate expressions
authorLennart Poettering <lennart@poettering.net>
Wed, 22 May 2024 13:42:56 +0000 (15:42 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 14 Jun 2024 22:50:03 +0000 (23:50 +0100)
src/basic/string-util.h

index ff5efbcf557b820e44c099139d02c274478a286c..a032ee8d6a7ae4da8b3e93a901d074d512ee617c 100644 (file)
@@ -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_;                                            \
         })