e08ae97dc288749c2454fd98a10dc79f06e27cb5 max Tue Aug 11 06:16:20 2026 -0700 hgBlat/hgc: fixes from the v502 code review of the BLAT results pages, refs #37893 #4 blatOldTracks now falls back to "keep" (with a warning) on any value other than keep/hide/delete, instead of dropping into the destructive delete branch, so a typo in hg.conf can never silently discard a user's earlier BLAT tracks. #5 htmlEncode() (js/utils.js) now also escapes " and ', which the browser's text->markup conversion leaves alone. Every hgBlat caller puts the result in a double-quoted attribute, so an unescaped quote in the cart position string could break out of the attribute; the shared helper now honors its documented contract. #6 The non-BLAT alignment title no longer starts with a stray space. #7 open_memstream() is checked for NULL: on that failure the alignment renders straight to stdout instead of writing to a NULL FILE and calling fclose(NULL). The section reorder keys on the literal "

"/"

" strings, so a note was added in fuzzyShow.c and pslShow.c to keep them intact. Found in the v502 final-build code review, refs #38069. diff --git src/lib/pslShow.c src/lib/pslShow.c index fb4e23e3e48..a53a68c0e47 100644 --- src/lib/pslShow.c +++ src/lib/pslShow.c @@ -110,30 +110,32 @@ { colorFlags[qs+j] = socBlue; qLetters[qs+j] = toupper(qLetters[qs+j]); } } } } cfm = cfmNew(10, lineWidth, TRUE, qIsRc, f, qcfmStart); for (i=0; i\n"); +/* hgc's htcBlatAlignment reorders these sections by matching the literal "

" + * and "

" prefixes; keep them intact (or update hgc.c) so the reorder still fires. */ fprintf(f, "

%s %s:

\n", tName, (tIsRc ? "(reverse strand)" : "")); fprintf(f, "
");
 
 /* Display DNA sequence. */
     {
     struct cfm *cfm;
     char *colorFlags = needMem(tSeq->size);
     int i,j;
     int curBlock = 0;
 
     for (i=0; iblockCount; ++i)
 	{
 	int qs = psl->qStarts[i] - qStart;
 	int ts = psl->tStarts[i] - tStart;