3670b9f2a58342dcc0629bad9d221a9d5e4ae5ff braney Thu Apr 23 14:39:37 2026 -0700 hgGene: render all sections and the Methods page for QuickLift knownGene clicks. refs #36370 - synonym.c: wrap the coord-qualified kgProteinID lookup in emptyForNull. After quickLiftGenePred() rewrites curGeneChrom/Start/End to destination coords, the same-transaction lookup against the source assembly's knownGene table misses and sqlGetField returns NULL; strstr(NULL, "-") on the next line segfaulted, truncating the page at Protein: so GeneReviews, Methods, and any later sections never rendered. - hgGene.c doKgMethod: when the track is quickLifted and the hub trackDb has no html, refetch the trackDb from quickLiftDb using trackHubSkipHubName(tableName). The Methods "Click here" link was landing on a page whose entire body was printf("%s", NULL) => "(null)". Verified on hgwdev-braney with Gerardo's repro (hg38 -> hs1 QuickLift, chr7:156982676-156996015 window, MNX1 / ENST00000469500.5): all 13 sections now render and Methods serves the full GENCODE description. No change on the native hg38 path. diff --git src/hg/hgGene/synonym.c src/hg/hgGene/synonym.c index 8e7f732c3aa..ea69102c129 100644 --- src/hg/hgGene/synonym.c +++ src/hg/hgGene/synonym.c @@ -371,31 +371,31 @@ else /* do not show URL link if it is not found in gbCdnaInfoTable */ { hPrintf("Representative RNA: %s ", mrnaAcc); } } if (protAcc != NULL) { kgProteinID = cloneString(""); if (hTableExists(sqlGetDatabase(conn), "knownGene") && (isNotEmpty(curGeneChrom) && differentWord(curGeneChrom,"none"))) { sqlSafef(condStr, sizeof(condStr), "name = '%s' and chrom = '%s' and txStart=%d and txEnd=%d", id, curGeneChrom, curGeneStart, curGeneEnd); - kgProteinID = sqlGetField(sqlGetDatabase(conn), "knownGene", "proteinID", condStr); + kgProteinID = emptyForNull(sqlGetField(sqlGetDatabase(conn), "knownGene", "proteinID", condStr)); } hPrintf("Protein: "); if (strstr(kgProteinID, "-") != NULL) { parAcc = cloneString(kgProteinID); chp = strstr(parAcc, "-"); *chp = '\0'; /* show variant splice protein and the UniProt link here */ hPrintf("%s, splice isoform of ", kgProteinID, kgProteinID); hPrintf("%s\n",