8fe5712649e5da23ba5e4a0416fbea08fa75451a
kate
  Tue Apr 23 17:04:45 2019 -0700
Fix UI matrix bug ignoring subgroup members > 256. refs #23366

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 7732f74..47d6e0b 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -2631,33 +2631,33 @@
     if (members == &nullMember)
         return NULL;
     return members;
     }
 
 
 int ix,count;
 char *setting = subgroupSettingByTagOrName(parentTdb, groupNameOrTag);
 if (setting == NULL)
     {
     tdbExtrasMembersSet(parentTdb, groupNameOrTag, &nullMember);
     return NULL;
     }
 members = needMem(sizeof(members_t));
 members->setting = cloneString(setting);
-char *words[SMALLBUF];
+char *words[512];
 count = chopLine(members->setting, words);
-assert(count <= ArraySize(words));
+assert(count < ArraySize(words));
 if (count <= 1)
     {
     freeMem(members->setting);
     freeMem(members);
     tdbExtrasMembersSet(parentTdb, groupNameOrTag, &nullMember);
     return NULL;
     }
 members->groupTag   = words[0];
 members->groupTitle = strSwapChar(words[1],'_',' '); // Titles replace '_' with space
 members->tags       = needMem(count*sizeof(char*));
 members->titles     = needMem(count*sizeof(char*));
 for (ix = 2,members->count=0; ix < count; ix++)
     {
     char *name,*value;
     if (parseAssignment(words[ix], &name, &value))
@@ -3099,33 +3099,33 @@
 // gets all the subgroup membership for a child track
 {
 membership_t *membership = tdbExtrasMembership(childTdb);
 if (membership != NULL)
     return membership;  // Already retrieved, so don't do it again
 
 membership = needMem(sizeof(membership_t));
 membership->setting = cloneString(trackDbSetting(childTdb, "subGroups"));
 if (membership->setting == NULL)
     {
     freeMem(membership);
     return NULL;
     }
 
 int ix,cnt;
-char *words[SMALLBUF];
+char *words[512];
 cnt = chopLine(membership->setting, words);
-assert(cnt <= ArraySize(words));
+assert(cnt < ArraySize(words));
 if (cnt <= 0)
     {
     freeMem(membership->setting);
     freeMem(membership);
     return NULL;
     }
 membership->subgroups  = needMem(cnt*sizeof(char*));
 membership->membership = needMem(cnt*sizeof(char*));
 membership->titles     = needMem(cnt*sizeof(char*));
 for (ix = 0,membership->count=0; ix < cnt; ix++)
     {
     char *name,*value;
     if (parseAssignment(words[ix], &name, &value))
 	{
 	membership->subgroups[membership->count]  = name;