From: Victor Julien Date: Fri, 21 Jul 2023 08:05:41 +0000 (+0200) Subject: mime: replace small memcpy with loop X-Git-Tag: suricata-7.0.1~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b018818a6236a4ca48782ac79b55b415208c044;p=thirdparty%2Fsuricata.git mime: replace small memcpy with loop To address: In file included from /usr/include/string.h:535, from suricata-common.h:108, from util-decode-mime.c:26: In function ‘memcpy’, inlined from ‘ProcessBase64Remainder’ at util-decode-mime.c:1201:13: /usr/include/mipsel-linux-gnu/bits/string_fortified.h:29:10: warning: ‘__builtin_memcpy’ forming offset 4 is out of the bounds [0, 4] of object ‘block’ with type ‘uint8_t[4]’ {aka ‘unsigned char[4]’} [-Warray-bounds=] 29 | return __builtin___memcpy_chk (__dest, __src, __len, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 | __glibc_objsize0 (__dest)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~ util-decode-mime.c: In function ‘ProcessBase64Remainder’: util-decode-mime.c:1174:13: note: ‘block’ declared here 1174 | uint8_t block[B64_BLOCK]; | ^~~~~ Copy data should be <= 4 bytes. --- diff --git a/src/util-decode-mime.c b/src/util-decode-mime.c index e13216118a..7ee5263b76 100644 --- a/src/util-decode-mime.c +++ b/src/util-decode-mime.c @@ -1197,8 +1197,9 @@ static uint32_t ProcessBase64Remainder( } buf_consumed++; } - if (cnt != 0) { - memcpy(state->bvremain, block, cnt); + DEBUG_VALIDATE_BUG_ON(cnt > B64_BLOCK); + for (uint32_t i = 0; i < cnt; i++) { + state->bvremain[i] = block[i]; } state->bvr_len = cnt; } else if (!force && cnt != B64_BLOCK) {