616f4b3c9fb1e234c4998202afd9718a7b00699c
braney
  Wed May 29 10:24:59 2019 -0700
put out a warning instead of crashing if the number of subtracks in a
subGroup is zero. #23364

diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index 05cafc2..585e876 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -2698,30 +2698,35 @@
     {
     // This should only get set through membersForAll which should not be freed.
     if ((*members)->selected != NULL || (*members)->subtrackList != NULL)
 	return;
     freeMem((*members)->setting);
     freeMem((*members)->tags);
     freeMem((*members)->titles);
     freez(members);
     }
 }
 
 static members_t *subgroupMembersWeedOutEmpties(struct trackDb *parentTdb, members_t *members,
 					    struct cart *cart)
 // Weed out members of a subgroup without any subtracks, alters memory in place!
 {
+if (members->count == 0)
+    {
+    warn("No subtracks in group: %s.  This indicates a problem in the subGroup line for this group.", members->groupTitle);
+    return members;
+    }
 // First tally all subtrack counts
 int ixIn=0;
 struct slRef *subtrackRef, *subtrackRefList =
 				    trackDbListGetRefsToDescendantLeaves(parentTdb->subtracks);
 struct trackDb *subtrack;
 members->subtrackCount    = needMem(members->count * sizeof(int));
 members->currentlyVisible = needMem(members->count * sizeof(int));
 members->subtrackList     = needMem(members->count * sizeof(struct slRef *));
 for (subtrackRef = subtrackRefList; subtrackRef != NULL; subtrackRef = subtrackRef->next)
     {
     subtrack = subtrackRef->val;
     char *belongsTo =NULL;
     if (subgroupFind(subtrack,members->groupTag,&belongsTo))
 	{
 	if (-1 != (ixIn = stringArrayIx(belongsTo, members->tags, members->count)))