9b8560a9176523093c93e05e5c40e294abec59d4
braney
  Mon Apr 13 06:37:15 2026 -0700
Fix crash in hNibForChrom for assembly hubs by falling back to trackHubGetGenomeUndecorated before dereferencing genome pointer, refs #37356

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

diff --git src/hg/lib/hdb.c src/hg/lib/hdb.c
index 3950824e761..68d953b9431 100644
--- src/hg/lib/hdb.c
+++ src/hg/lib/hdb.c
@@ -1116,30 +1116,37 @@
 
 
 int hChromSize(char *db, char *chromName)
 /* Return size of chromosome. */
 {
 struct chromInfo *ci = mustGetChromInfo(db, chromName);
 return ci->size;
 }
 
 void hNibForChrom(char *db, char *chromName, char retNibName[HDB_MAX_PATH_STRING])
 /* Get .nib file associated with chromosome. */
 {
 if (startsWith("GC", db))
     {
     struct trackHubGenome *genome = trackHubGetGenome(db);
+
+    if (genome == NULL)
+        genome = trackHubGetGenomeUndecorated(db);
+
+    if (genome == NULL)
+        errAbort("cannot find %s in loaded track hubs", db);
+
     if (genome->twoBitPath)
         safef(retNibName, HDB_MAX_PATH_STRING, "%s", genome->twoBitPath);
     return;
     }
 if (cfgOptionBooleanDefault("forceTwoBit", TRUE) == TRUE && !trackHubDatabase(db))
     {
     char buf[HDB_MAX_PATH_STRING];
     safef(buf, HDB_MAX_PATH_STRING, "/gbdb/%s/%s.2bit", db, db);
     char *newPath = hReplaceGbdb(buf);
     safecpy(retNibName, HDB_MAX_PATH_STRING, newPath);
     freeMem(newPath);
     return;
     }
 
 if (hDbIsActive(db))