d0942d5563ca2fdd0170c4730bb6bf1ecc8258ea
braney
  Thu Aug 27 09:16:16 2026 -0700
quickLift: take out the unused visibility string, refs #38032

trackHubBuild and walkTree never wrote visDy.  hgConvert allocated it, passed it
down, then reassigned it inside the chain loop, leaking a dyString per chain.

diff --git src/hg/hgConvert/hgConvert.c src/hg/hgConvert/hgConvert.c
index a5dc8d44f05..e4bbc50ba49 100644
--- src/hg/hgConvert/hgConvert.c
+++ src/hg/hgConvert/hgConvert.c
@@ -650,54 +650,52 @@
     errAbort("Early error - unable to find matching database records in dbDb - please contact support");
 
 chromAliasSetup(database);
 cartWebStart(cart, database, "%s %s %s to %s %s", fromDb->organism, fromDb->description,
 	fromPos, toDb->organism, toDb->description);
 
 char *fileName = liftOverChainFile(trackHubSkipHubName(fromDb->name), trackHubSkipHubName(toDb->name));
 if (isEmpty(fileName))
     errAbort("Unable to find a chain file from %s to %s - please contact support", fromDb->name, toDb->name);
 
 fileName = hReplaceGbdbMustDownload(fileName);
 char *chrom;
 int start, end;
 int origSize;
 struct chain *chainList, *chain;
-struct dyString *visDy = NULL;
 
 if (!hgParseChromRange(database, fromPos, &chrom, &start, &end))
     errAbort("position %s is not in chrom:start-end format", fromPos);
 origSize = end - start;
 
 boolean doQuickLift = cartUsualBoolean(cart, "doQuickLift", FALSE);
 cartRemove(cart, "doQuickLift");
 boolean hideOtherTracks = cartUsualBoolean(cart, "hideTracksOnConvert", TRUE);
 cartRemove(cart, "hideTracksOnConvert");
 
 unsigned quickChain = 0;
 unsigned quickHub = 0;
 struct trackDb *badList = NULL;
 
 if (doQuickLift)
     {
     quickChain = quickLiftGetChainId(cart, trackHubSkipHubName(fromDb->name), trackHubSkipHubName(toDb->name));
 
     if (quickChain == 0)
         errAbort("can't find quickChain from %s to %s", fromDb->name, toDb->name);
 
-    visDy = newDyString(1024);
-    char *newHub = trackHubBuild(fromDb->name, cart, visDy, &badList);
+    char *newHub = trackHubBuild(fromDb->name, cart, &badList);
     char *error = NULL;
     quickHub = hubFindOrAddUrlInStatusTable(cart, newHub, &error);
     if (error != NULL)
         errAbort("can't add quickLift hub (error %s)",error);
     }
 
 chainList = chainLoadAndTrimIntersecting(fileName, chrom, start, end);
 if (chainList == NULL)
     printf("Sorry this position couldn't be found in new assembly");
 else
     {
     for (chain = chainList; chain != NULL; chain = chain->next)
         {
 	int blockSize;
 	int qStart, qEnd;
@@ -711,31 +709,30 @@
 	    qStart = chain->qStart;
 	    qEnd = chain->qEnd;
 	    }
 	blockSize = chainTotalBlockSize(chain);
         /* Check if the toDb database exists and if the chromosome
            sequence file (of the hgConvert result) exists in the location
            specified in chromInfo for the toDb. */
 
         boolean chromSeqExists = (sqlDatabaseExists(toDb->name) &&
 				  chromSeqFileExists(toDb->name, chain->qName));
         /* Check if the toDb has active set to 1 in dbDb if the toDb
            database exists.
            If these conditions are met then print position link to
            browser for toDb, otherwise just print position without link. */
         boolean startedAnchor = FALSE;
-        visDy = newDyString(20);
         if ((hDbIsActive(toDb->name) && chromSeqExists) || startsWith("hub:",toDb->nibPath) || sameString(toDb->nibPath, "genark"))
             {
             if (quickChain)
                 printf("<A HREF=\"%s?db=%s&position=%s:%d-%d&quickLift.%d.%s=%d%s\">",
                    hgTracksName(),  toDb->name,  chain->qName, qStart+1, qEnd, quickHub, toDb->name, quickChain,
                    hideOtherTracks ? "&hideTracks=on" : "");
             else
                 printf("<A HREF=\"%s?db=%s&position=%s:%d-%d\">",
 		   hgTracksName(), toDb->name, chain->qName, qStart+1, qEnd);
             startedAnchor = TRUE;
             }
 	printf("%s:%d-%d",  chain->qName, qStart+1, qEnd);
         if (startedAnchor)
 	    printf("</A>");
 	printf(" (%3.1f%% of bases, %3.1f%% of span)<BR>\n",