52cee2eff9e953d4584a415b8a9b84bd2326d3cd
braney
Tue Aug 18 11:14:37 2026 -0700
hgTables: encode track menu and schema text consistently, refs #38123
diff --git src/hg/hgTables/mainPage.c src/hg/hgTables/mainPage.c
index 840f1925b7d..d281ec61132 100644
--- src/hg/hgTables/mainPage.c
+++ src/hg/hgTables/mainPage.c
@@ -80,33 +80,34 @@
/* If the saved selection is a QuickLift group, fall back to a visible default
* since QuickLift groups are filtered from the dropdown below. */
if (selGroup != NULL && startsWith("QuickLift", selGroup->label))
{
cartRemove(cart, groupVar);
selGroup = findSelectedGroup(groupList, groupVar);
}
hPrintf("\n", groupVar);
hPrintf("\n");
return selGroup;
}
static void addIfExists(struct hash *hash, struct slName **pList, char *name)
/* Add name to tail of list if it exists in hash. */
{
if (hashLookup(hash, name))
slNameAddTail(pList, name);
}
struct slName *getDbListForGenome()
/* Get list of selectable databases. */
{
@@ -175,31 +176,32 @@
for (track = fullTrackList; track != NULL; track = track->next)
{
if (allTracks || sameString(selGroup->name, track->grp))
{
hPrintf(" ", track->shortLabel);
+ // shortLabel comes from trackDb, which a track hub controls
+ hPrintf(">%s", htmlEncode(track->shortLabel));
}
}
if (selTrackIsDisabled)
selTrack = firstEnabled;
hPrintf("\n");
}
hPrintf("\n");
return selTrack;
}
char *unsplitTableName(char *table)
/* Convert chr*_name to name */
{
if (startsWith("chr", table))
{