1d677ef02ee511f17c526869d9d058158771f6dc
jcasper
  Fri Apr 15 17:15:05 2022 -0700
Enforcing non-negative values for hicDistanceMin and hicDistanceMax, refs #29280

diff --git src/hg/lib/hicUi.c src/hg/lib/hicUi.c
index 1ff21ad..8eabb72 100644
--- src/hg/lib/hicUi.c
+++ src/hg/lib/hicUi.c
@@ -313,46 +313,52 @@
     printf("<div class='trackUiHicHiddenAttributes hicAttr%d'>\n", i);
     printf("<pre>%s</pre>", htmlEncode(trackMeta->attributes[i+1]));
     printf("</div>\n");
     
     safef(scriptline, sizeof(scriptline), "$('label.trackUiHicAttrToggle%d').click(function() {$(this).children('img').toggleClass('open'); $('div.hicAttr%d').toggle();});", i, i);
     jsInline(scriptline);
     }
 printf("</div>\n");
 printf("<p>For questions concerning the content of a file's metadata header, please contact the file creator.</p>\n");
 }
 
 double hicUiMaxInteractionRange(struct cart *cart, struct trackDb *tdb)
 /* Retrieve the maximum range for an interaction to be drawn.  Range is
  * calculated from the left-most start to the right-most end of the interaction. */
 {
-double defaultValue = 0;
+double defaultValue = 0, returnVal = 0;
 char *tdbString = trackDbSetting(tdb, HIC_TDB_MAX_DISTANCE);
 if (!isEmpty(tdbString))
     defaultValue = atof(tdbString);
-return cartUsualDoubleClosestToHome(cart, tdb, FALSE, HIC_DRAW_MAX_DISTANCE, defaultValue);
+returnVal = cartUsualDoubleClosestToHome(cart, tdb, FALSE, HIC_DRAW_MAX_DISTANCE, defaultValue);
+if (returnVal < 0)
+    return 0;
+return returnVal;
 }
 
 double hicUiMinInteractionRange(struct cart *cart, struct trackDb *tdb)
 /* Retrieve the minimum range for an interaction to be drawn.  Range is
  * calculated from the left-most start to the right-most end of the interaction. */
 {
-double defaultValue = 0;
+double defaultValue = 0, returnVal = 0;
 char *tdbString = trackDbSetting(tdb, HIC_TDB_MIN_DISTANCE);
 if (!isEmpty(tdbString))
     defaultValue = atof(tdbString);
-return cartUsualDoubleClosestToHome(cart, tdb, FALSE, HIC_DRAW_MIN_DISTANCE, defaultValue);
+returnVal = cartUsualDoubleClosestToHome(cart, tdb, FALSE, HIC_DRAW_MIN_DISTANCE, defaultValue);
+if (returnVal < 0)
+    return 0;
+return returnVal;
 }
 
 void hicUiMinMaxRangeMenu(struct cart *cart, struct trackDb *tdb)
 {
 char cartVar[2048];
 double minRange = hicUiMinInteractionRange(cart, tdb);
 double maxRange = hicUiMaxInteractionRange(cart, tdb);
 printf("<b>Filter by interaction distance in bp (0 for no limit):</b> ");
 safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_DRAW_MIN_DISTANCE);
 printf("minimum ");
 cgiMakeDoubleVarWithMin(cartVar, minRange, NULL, 0, 0);
 safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_DRAW_MAX_DISTANCE);
 printf(" maximum ");
 cgiMakeDoubleVarWithMin(cartVar, maxRange, NULL, 0, 0);
 }