b88e4615c7ce7ea3f0d05c84365509670493840c braney Tue Aug 18 14:49:17 2026 -0700 lib, hgc, hgTracks: small output-encoding cleanups, refs #38123 diff --git src/hg/lib/jsHelper.c src/hg/lib/jsHelper.c index 5c2631a3082..6b3b5076c08 100644 --- src/hg/lib/jsHelper.c +++ src/hg/lib/jsHelper.c @@ -527,31 +527,33 @@ char *indentBuf = makeIndentBuf(indentLevel); switch (ele->type) { case jsonObject: { dyStringPrintf(dy,"{%s",nl); if(hashNumEntries(ele->val.jeHash)) { struct hashEl *el, *list = hashElListHash(ele->val.jeHash); slSort(&list, hashElCmp); for (el = list; el != NULL; el = el->next) { struct jsonElement *val = el->val; // the key is not always a literal: an assembly hub's genome name ends up here, // so it is encoded the same way a string value is - dyStringPrintf(dy,"%s%s\"%s\": ", indentBuf, tab, jsonStringEscape(el->name)); + char *escapedName = jsonStringEscape(el->name); + dyStringPrintf(dy,"%s%s\"%s\": ", indentBuf, tab, escapedName); + freeMem(escapedName); jsonDyStringPrintRecurse(dy, val, indentLevel); dyStringPrintf(dy,"%s%s", el->next == NULL ? "" : ",",nl); } hashElFreeList(&list); } dyStringPrintf(dy,"%s}", indentBuf); break; } case jsonList: { struct slRef *el; dyStringPrintf(dy,"[%s",nl); if(ele->val.jeList) { for (el = ele->val.jeList; el != NULL; el = el->next)