49ed0c54f0be428a7c3d694e90a36fdeb8fe0f07 kate Thu Apr 25 10:02:32 2019 -0700 Up subgroup member size again, to 1000. Add friendlier user notification. refs #23366 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index dc278c7..3e85bec 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -2631,33 +2631,35 @@ 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[512]; +#define MAX_SUBGROUP_MEMBERS 1000 +char *words[MAX_SUBGROUP_MEMBERS+3]; // members preceded by tag and title, one extra to detect count = chopLine(members->setting, words); -assert(count < ArraySize(words)); +if (count == ArraySize(words)) + warn("Subgroup %s exceeds maximum %d members", words[1], MAX_SUBGROUP_MEMBERS); 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,31 +3101,31 @@ // 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[512]; +char *words[SMALLBUF]; cnt = chopLine(membership->setting, 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))