]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Copy one byte less in strncpynt()
authorGert Doering <gert@greenie.muc.de>
Sat, 8 Jun 2019 07:56:22 +0000 (09:56 +0200)
committerGert Doering <gert@greenie.muc.de>
Sun, 9 Jun 2019 09:00:40 +0000 (11:00 +0200)
While the existing code is not wrong and will never cause an overflow,
it will copy (on a too-long source string) "maxlen" bytes to dest, and
then overwrite the last byte just copied with "0" - which causes a
warning in gcc 9 about filling the target buffer "up to the end,
with no room for a trailing 0 anymore".

Reducing the maximum bytes-to-be-copied to "maxlen -1", because the
last byte will be stamped with 0 anyway.

v2: do not ASSERT() on "maxlen == 0", but move the strncpy() call inside
the if() clause - so "just do nothing" on maxlen == 0, as before.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Antonio Quartulli <antonio@openvpn.net>
Message-Id: <20190608075622.11589-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg18502.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/buffer.h

index a4fe6f9be7b7c334b2cd774bbbda5e6240598d0f..1722ffd5065c2e450f8a47cfcd4ca6a48eb19203 100644 (file)
@@ -347,9 +347,9 @@ buf_set_read(struct buffer *buf, const uint8_t *data, int size)
 static inline void
 strncpynt(char *dest, const char *src, size_t maxlen)
 {
-    strncpy(dest, src, maxlen);
     if (maxlen > 0)
     {
+        strncpy(dest, src, maxlen-1);
         dest[maxlen - 1] = 0;
     }
 }