2ebfbfc9042e880ad0cdda1643d4ec57621579df angie Mon Jan 4 18:03:11 2021 -0800 Warn about empty tree file and avoid seg fault. diff --git src/hg/hgTracks/vcfTrack.c src/hg/hgTracks/vcfTrack.c index 132a41d..2afb164 100644 --- src/hg/hgTracks/vcfTrack.c +++ src/hg/hgTracks/vcfTrack.c @@ -2141,30 +2141,36 @@ } static void vcfGtHapTreeFileDraw(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* Draw rows in the same fashion as vcfHapClusterDraw, but instead of clustering, use the * order in which samples appear in the VCF file. */ { struct vcfFile *vcff = tg->extraUiData; enum hapColorMode colorMode; struct seqWindow *gSeqWin; struct txInfo *txiList; if (!vcfHapClusterDrawInit(tg, vcff, hvg, &colorMode, &gSeqWin, &txiList)) return; struct phyloTree *tree = getTreeFromFile(tg->tdb); +if (tree == NULL) + { + warn("No tree in file '%s'", trackDbSetting(tg->tdb, VCF_HAP_METHOD_VAR)); + vcfGtHapFileOrderDraw(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis); + return; + } int gtHapCount; unsigned int *leafOrderToHapOrderStart, *leafOrderToHapOrderEnd; unsigned int *gtHapOrder = gtHapOrderFromTree(vcff, tree, &leafOrderToHapOrderStart, &leafOrderToHapOrderEnd, >HapCount); // Figure out rank (vertical position) and depth (horizontal position) of every node in tree: phyloTreeAddNodeCoords(tree, leafOrderToHapOrderStart, leafOrderToHapOrderEnd, 0); int extraPixel = (colorMode == altOnlyMode || colorMode == functionMode) ? 1 : 0; int hapHeight = tg->height - CLIP_PAD - 2*extraPixel; struct hash *highlightSamples = getHighlightSamples(tg->tdb); if (highlightSamples) { double pxPerHap = (double)hapHeight / gtHapCount; rHighlightSampleRows(tree, hvg, yOff+extraPixel, pxPerHap, highlightSamples); }