f20e513a5dcae8e821aaf7dcccfaf57ee4cd3cb1
galt
Thu Feb 6 13:37:43 2025 -0800
Reapply "Fixing security concern in hgEncodeVocab. fixes #287. Note that actual full cleanup by removing the unneeded encode/cv.ra from trackDb files has not been done yet., and making the code tolerate its presence or absence in the trackDb.ra files, at the start of the controlledVocabulary setting."
This reverts commit c5af95b7146dde46f2d2f70ecad1eb9b4c37b57f.
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index a4256084735..cd259be1091 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -174,47 +174,38 @@
// until it's implemented
{
char *tbOff = trackDbSetting(tdb, "tableBrowser");
if (isNotEmpty(tbOff) && sameString(nextWord(&tbOff), "off"))
return FALSE;
char *hint = " title='Open data format (table schema) in new window'";
if (label == NULL)
label = " View data format";
struct trackDb *topLevel = trackDbTopLevelSelfOrParent(tdb);
printf(SCHEMA_LINKED, db, topLevel->grp, topLevel->track, tdb->table, hint, label);
return TRUE;
}
return FALSE;
}
-char *wgEncodeVocabLink(char *file,char *term,char *value,char *title, char *label,char *suffix)
+char *wgEncodeVocabLink(char *term,char *value,char *title, char *label,char *suffix)
// returns allocated string of HTML link to controlled vocabulary term
{
-#define VOCAB_LINK_WITH_FILE "%s"
#define VOCAB_LINK "%s"
struct dyString *dyLink = NULL;
char *encTerm = cgiEncode(term);
char *encValue = cgiEncode(value);
-if (file != NULL)
- {
- char *encFile = cgiEncode(file);
- dyLink = dyStringCreate(VOCAB_LINK_WITH_FILE,encFile,encTerm,encValue,title,label);
- freeMem(encFile);
- }
-else
dyLink = dyStringCreate(VOCAB_LINK,encTerm,encValue,title,label);
if (suffix != NULL)
dyStringAppend(dyLink,suffix); // Don't encode since this may contain HTML
freeMem(encTerm);
freeMem(encValue);
return dyStringCannibalize(&dyLink);
}
char *pairsAsHtmlTable( struct slPair *pairs, struct trackDb *tdb, boolean showLongLabel,boolean showShortLabel)
/* Return a string which is an HTML table of the tags for this track. */
{
if (pairs == NULL)
return "";
@@ -283,36 +274,36 @@
dyStringAppend(dyTable,"
");
slNameFree(&file);
}
dyStringAppend(dyTable,"");
}
else
{ // Don't bother with tableName
if (cvTermTypes && differentString(mdbVar->var,MDB_VAR_TABLENAME))
{
struct hash *cvTerm = hashFindVal(cvTermTypes,mdbVar->var);
if (cvTerm != NULL) // even if cvTerm isn't used,
{ // it proves that it exists and a link is desirable
if (!cvTermIsHidden(mdbVar->var))
{
char *label = (char *)cvLabel(NULL,mdbVar->var);
- char *linkOfType = wgEncodeVocabLink(NULL,CV_TYPE,mdbVar->var,label,
+ char *linkOfType = wgEncodeVocabLink(CV_TYPE,mdbVar->var,label,
label,NULL);
if (cvTermIsCvDefined(mdbVar->var))
{
label = (char *)cvLabel(mdbVar->var,mdbVar->val);
- char *linkOfTerm = wgEncodeVocabLink(NULL,CV_TERM,mdbVar->val,label,
+ char *linkOfTerm = wgEncodeVocabLink(CV_TERM,mdbVar->val,label,
label,NULL);
dyStringPrintf(dyTable,"