fb50a1cca3a117bb964c43196671142484b13bf9 braney Fri Jun 12 12:10:47 2026 -0700 lib jkOwnLib hg/lib: fix warnings exposed by -O3 build At -O3 GCC does more inlining and interprocedural range analysis, which surfaces several warnings that -O -g never triggered. With -Werror these break the build, so fix them ahead of switching the default to -O3. - bamFile.c: move setenv() into the else of its NULL guard so it is not reachable with a NULL argument (-Wnonnull, seen via inlining of bamFetch). - basicBed.c, wormdna.c, bedDetail.c, customFactory.c, hdb.c, qaSeq.c: replace strncpy() with safecpy() where the result must be terminated (-Wstringop-truncation). - htmshell.c: use memcpy() for the intentional exact-length, non-terminated copy (-Wstringop-truncation). - obscure.c: compute the comma groups in sprintLongWithCommas() with % 1000 so the compiler can see each %03lld argument is bounded (-Wformat-overflow). - crudeali.c: do the endian type-pun through a union so strict-aliasing analysis no longer reports the value as uninitialized (-Wuninitialized). - jksql.c: wrap a possibly-NULL database name in naForNull() before passing it to %s (-Wformat-overflow). refs #37761 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> diff --git src/hg/lib/qaSeq.c src/hg/lib/qaSeq.c index 99082ec94ba..80b8f662a29 100644 --- src/hg/lib/qaSeq.c +++ src/hg/lib/qaSeq.c @@ -180,31 +180,31 @@ errAbort("Expecting '>' line %d of %s", lf->lineIx, lf->fileName); if (s[1] != 0) s += 1; else { if (wordCount == 1) errAbort("Expecting '>name' line %d of %s", lf->lineIx, lf->fileName); else s = words[1]; } break; } } if (s == NULL) return FALSE; -strncpy(name, s, sizeof(name)); +safecpy(name, sizeof(name), s); /* Read numbers until next '>' line or end of file. */ /* Read to first non-space line. Complain if it doesn't start with '>' */ while (lineFileNext(lf, &line, &lineSize)) { if (line[0] == '>') { lineFileReuse(lf); break; } wordCount = chopLine(line, words); for (i=0; i<wordCount; ++i) { if (bufIx >= bufSize) {