e30f8b3d5580f0be19ce22334dd97ccb497c49dc
jcasper
  Thu Mar 19 11:40:59 2026 -0700
Handle empty highlight cart variable appropriately (i.e. don't crash), refs #37268

diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c
index 306cb390c49..bf26fd7d894 100644
--- src/hg/hgTracks/hgTracks.c
+++ src/hg/hgTracks/hgTracks.c
@@ -2307,31 +2307,31 @@
 long chromEnd;
 char *hexColor;
 };
 
 struct highlightVar *parseHighlightInfo()
 // Parse highlight info from cart var to a linked list of highlightVar structs
 // Accepts four input formats for the highlight variable:
 // 0) chrom:start-end (format in very old carts)
 // 1) db.chrom:start-end (format in very old carts)
 // 2) db.chrom:start-end#hexColor|db.chrom:start-end#hexColor|... (old format)
 // 3) db#chrom#start#end#hexColor|db#chrom#start#end#hexColor|... (current format, to allow . in seq names)
 //
 {
 struct highlightVar *hlList = NULL;
 char *highlightDef = cartOptionalString(cart, "highlight");
-if(highlightDef)
+if(isNotEmpty(highlightDef))
     {
     int hlCount = chopByChar(highlightDef, '|', NULL, 0);
     char **hlArr = AllocN(char *, hlCount);
     char *hlStringCopy = cloneString(highlightDef);
     chopByChar(hlStringCopy, '|', hlArr, hlCount);
     int i;
     for (i=0; i<hlCount; i++)
         {
         char *oneHl = hlArr[i];
         struct highlightVar *h;
         char *chromStart, *chromEnd;
         AllocVar(h);
         if (countSeparatedItems(oneHl, '#')==5)
             // the new format: db#chrom#start#end#color
             {