b53daca8cdd27a292f6ae01f8aeb822a2b4468dc
braney
  Wed Nov 14 11:29:56 2018 -0800
fix bug found in code review.  Thanks Chris!

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 8c50b44..5a950ec 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -3637,34 +3637,33 @@
 filterBy->useIndex = FALSE;
 filterBy->slValues = slNameListFromComma(value);
 chopUpValues(filterBy);
 if (cart != NULL)
     {
     char suffix[256];
     safef(suffix, sizeof(suffix), "%s.%s", "filterBy", filterBy->column);
     boolean parentLevel = isNameAtParentLevel(tdb,tdb->track);
     if (cartLookUpVariableClosestToHome(cart,tdb,parentLevel,suffix,&(filterBy->htmlName)))
         {
         filterBy->slChoices = cartOptionalSlNameList(cart,filterBy->htmlName);
         freeMem(filterBy->htmlName);
         }
     }
 
-// Note: cannot use found name above because that may be at a higher (composite/view) level
-int len = strlen(tdb->track) + strlen(filterBy->column) + 15;
-filterBy->htmlName = needMem(len);
-safef(filterBy->htmlName, len, "%s.%s.%s", name,"filterBy",filterBy->column);
+struct dyString *dy = newDyString(128);
+dyStringPrintf(dy, "%s.%s.%s", name, "filterBy", filterBy->column);
+filterBy->htmlName = dy->string;
 
 return filterBy;
 }
 
 filterBy_t *filterByValues(struct trackDb *tdb, struct cart *cart, struct slName *filterValues, char *name)
 /* Build a filterBy_t list from tdb variables of the form *FilterValues */
 {
 struct asObject *as = asForTdb(NULL, tdb);
 filterBy_t *filterByList = NULL, *filter;
 struct slName *fieldFilter;
 while ((fieldFilter = slPopHead(&filterValues)) != NULL)
     {
     if ((filter = buildFilterBy(tdb, cart, as, fieldFilter->name, name)) != NULL)
         slAddHead(&filterByList, filter);
     }