90dc829b2d87b15c4fc4bbc1d814f83d1274ef52
braney
  Fri Sep 4 14:00:05 2026 -0700
Pass element counts, not byte sizes, to the chop routines

chopByWhite, chopString and chopByChar take their last argument as a
count of elements in the output array.  Fifteen call sites passed
sizeof(array) instead.  For an array of pointers that is eight times
the real capacity on a 64-bit build, so the chop could write well past
the end of the array.

Switched each to ArraySize().  Behaviour is unchanged for any input
that already fitted in the array.

Built clean: lib, hg/lib, hg/hgTracks, hg/hgc, hg/utils/hubCheck,
utils/bedScore, parasol/lib, parasol/parasol.  Three directories do not
build, but they fail the same way without this change: checkExp is
missing htslib link flags, and cgapSageFind and affySplice have stale
prototypes in files this does not touch.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

diff --git src/hg/lib/hubSearchText.c src/hg/lib/hubSearchText.c
index 8b5955df15d..7cad7644c9a 100644
--- src/hg/lib/hubSearchText.c
+++ src/hg/lib/hubSearchText.c
@@ -260,35 +260,35 @@
  * expansion) as appropriate. */
 {
 char *cloneTerms = cloneString(hubSearchTerms);
 struct dyString *modifiedTerms = dyStringNew(0);
 if (isNotEmpty(cloneTerms))
     {
     int i;
     for (i=0; i<strlen(cloneTerms); i++)
         {
         // allowed punctuation is underscore and apostrophe, and we'll do special handling for hyphen
         if (!isalnum(cloneTerms[i]) && cloneTerms[i] != '_' && cloneTerms[i] != '\'' &&
                 cloneTerms[i] != '-')
             cloneTerms[i] = ' ';
         }
     char *splitTerms[1024];
-    int termCount = chopByWhite(cloneTerms, splitTerms, sizeof(splitTerms));
+    int termCount = chopByWhite(cloneTerms, splitTerms, ArraySize(splitTerms));
     for (i=0; i<termCount; i++)
         {
         char *hyphenatedTerms[1024];
-        int hyphenTerms = chopString(splitTerms[i], "-", hyphenatedTerms, sizeof(hyphenatedTerms));
+        int hyphenTerms = chopString(splitTerms[i], "-", hyphenatedTerms, ArraySize(hyphenatedTerms));
         int j;
         for (j=0; j<hyphenTerms-1; j++)
             {
             dyStringPrintf(modifiedTerms, "+%s ", hyphenatedTerms[j]);
             }
         if (isStrictSearch)
             dyStringPrintf(modifiedTerms, "+%s ", hyphenatedTerms[j]);
         else
             {
             dyStringPrintf(modifiedTerms, "+%s* ", hyphenatedTerms[j]);
             }
         }
     }
 return dyStringCannibalize(&modifiedTerms);
 }