From: Amos Jeffries Date: Tue, 18 Sep 2018 17:43:59 +0000 (+0000) Subject: Bug 4875 pt1: GCC-8 compile errors with -O3 optimization (#287) X-Git-Tag: M-staged-PR285~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5358a024892cdbdabd1401d0d214456023ffbb89;p=thirdparty%2Fsquid.git Bug 4875 pt1: GCC-8 compile errors with -O3 optimization (#287) Use xstrncpy instead of strncat for String appending Our xstrncpy() is safer, not assuming the existing char* is nul-terminated and accounting explicitly for the nul-terminator byte. GCC-8 -O3 optimizations were exposing a strncat() output truncation of the terminator when insufficient space was available in the String buffer. We suspect the GCC error to be a false-positive for -O3 builds and, even it it is accurate, these changes should not affect builds with lower optimization levels. --- diff --git a/src/String.cc b/src/String.cc index 17d75b04da..2c03f77d97 100644 --- a/src/String.cc +++ b/src/String.cc @@ -163,8 +163,8 @@ String::append( char const *str, int len) assert(str && len >= 0); PROF_start(StringAppend); - if (len_ + len < size_) { - strncat(buf_, str, len); + if (len_ + len + 1 /*'\0'*/ < size_) { + xstrncpy(buf_+len_, str, len+1); len_ += len; } else { // Create a temporary string and absorb it later.