65d2977c726c1639d4a463f8178e43c08704f173 jcasper Fri Feb 21 15:33:35 2025 -0800 hgConvert should errAbort when it can't find a chain file instead of crashing, refs #35271 diff --git src/hg/hgConvert/hgConvert.c src/hg/hgConvert/hgConvert.c index 0e3c59fddfd..4bf139d49ad 100644 --- src/hg/hgConvert/hgConvert.c +++ src/hg/hgConvert/hgConvert.c @@ -267,40 +267,47 @@ next = chain->next; chainSubsetOnT(chain, start, end, &subChain, &chainToFree); if (subChain != NULL) slAddHead(&chainList, subChain); if (chainToFree != NULL) chainFree(&chain); } slSort(&chainList, chainCmpScore); return chainList; } static void doConvert(char *fromPos) /* Actually do the conversion */ { struct dbDb *fromDb = hDbDb(trackHubSkipHubName(database)), *toDb = hDbDb(cartString(cart, HGLFT_TODB_VAR)); +if (!fromDb || !toDb) + errAbort("Early error - unable to find matching database records in dbDb - please contact support"); + +cartWebStart(cart, database, "%s %s %s to %s %s", fromDb->organism, fromDb->description, + fromPos, toDb->organism, toDb->description); + char *fileName = liftOverChainFile(fromDb->name, 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; -cartWebStart(cart, database, "%s %s %s to %s %s", fromDb->organism, fromDb->description, - fromPos, toDb->organism, toDb->description); 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"); unsigned quickChain = 0; unsigned quickHub = 0; if (doQuickLift) { quickChain = quickLiftGetChain(fromDb->name, toDb->name); if (quickChain == 0)