d9820e81306c41e9a2093bcd2166b5543bc16bd0
chmalee
  Thu Mar 2 17:21:23 2023 -0800
Fix broken table browser for assemblies without a valid 'tableBrowser' setting, refs #30727

diff --git src/hg/cgilib/cartTrackDb.c src/hg/cgilib/cartTrackDb.c
index 5a906e7..000d877 100644
--- src/hg/cgilib/cartTrackDb.c
+++ src/hg/cgilib/cartTrackDb.c
@@ -458,31 +458,35 @@
     hashAdd(uniqHash, trackTable, NULL);
     }
 addTablesAccordingToTrackType(db, &nameList, uniqHash, track);
 if (useJoiner)
     {
     if (allJoiner == NULL)
         allJoiner = joinerRead("all.joiner");
     struct slName *joinedList = NULL, *t;
     for (t = nameList;  t != NULL;  t = t->next)
         {
         struct joinerPair *jpList, *jp;
         jpList = joinerRelate(allJoiner, db, t->name, db);
         for (jp = jpList; jp != NULL; jp = jp->next)
             {
             struct joinerDtf *dtf = jp->b;
-            if (cartTrackDbIsAccessDenied(dtf->database, dtf->table))
+            // If we are checking a non-assembly database like hgFixed, then
+            // we can't have a valid tableBrowser setting to deny the table
+            // anyways (because we have no tracks for that database), so don't
+            // bother checking unless the joined tables have the same database
+            if (sameString(dtf->database, db) && cartTrackDbIsAccessDenied(dtf->database, dtf->table))
                 continue;
             char buf[256];
             char *s;
             if (sameString(dtf->database, db))
                 s = dtf->table;
             else
                 {
                 safef(buf, sizeof(buf), "%s.%s", dtf->database, dtf->table);
                 s = buf;
                 }
             if (!hashLookup(uniqHash, s))
                 {
                 hashAdd(uniqHash, s, NULL);
                 name = slNameNew(s);
                 slAddHead(&joinedList, name);