From: Lennart Poettering Date: Wed, 22 May 2024 13:42:56 +0000 (+0200) Subject: string-util: make sure strrepa() doesn't doubly evaluate expressions X-Git-Tag: v257-rc1~1153 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b22635083aaf937ffad11eddb55a4f1a837b6b0c;p=thirdparty%2Fsystemd.git string-util: make sure strrepa() doesn't doubly evaluate expressions --- diff --git a/src/basic/string-util.h b/src/basic/string-util.h index ff5efbcf557..a032ee8d6a7 100644 --- 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_; \ })