2732520d27d9d63e274fd42c0ea225e1a4f35641
angie
  Thu Jul 13 13:06:44 2017 -0700
hgvsToVcfRow was not testing for NULL changeList -- fixed.  refs #19702 note-15

diff --git src/hg/lib/hgHgvs.c src/hg/lib/hgHgvs.c
index c470f64..7bc0ae6 100644
--- src/hg/lib/hgHgvs.c
+++ src/hg/lib/hgHgvs.c
@@ -2173,31 +2173,41 @@
 struct bed *mapping = hgvsValidateAndMap(hgvs, db, term, dyWarn, &pslTable);
 if (!mapping)
     {
     dyStringPrintf(dyError, "Unable to map '%s' to reference %s: %s",
                    term, db, dyStringContents(dyWarn));
     }
 else
     {
     if (dyStringIsNotEmpty(dyWarn))
         {
         dyStringAppend(dyError, dyStringContents(dyWarn));
         dyStringClear(dyWarn);
         }
     struct hgvsChange *changeList = hgvsParseNucleotideChange(hgvs->changes, hgvs->type,
                                                               dyWarn);
-    if (dyStringIsNotEmpty(dyWarn))
+    if (changeList == NULL)
+        {
+        if (isEmpty(hgvs->changes))
+            dyStringPrintf(dyError, "HGVS term '%s' does not specify any sequence changes", term);
+        else if (dyStringIsNotEmpty(dyWarn))
+            dyStringPrintf(dyError, "Unable to parse HGVS description in '%s': %s", term,
+                           dyStringContents(dyWarn));
+        else
+            dyStringPrintf(dyError, "Unable to parse HGVS description in '%s'", term);
+        }
+    else if (dyStringIsNotEmpty(dyWarn))
         {
         dyStringPrintf(dyError, "Unable to parse HGVS description in '%s': %s",
                        term, dyStringContents(dyWarn));
         }
     else if (changeList->type == hgvsctRepeat)
         {
         dyStringPrintf(dyError,
                        "Can't convert '%s' to VCF: HGVS repeat notation is not supported.", term);
         }
     else
         {
         row = vcfFromHgvs(db, term, mapping, hgvs, changeList, doLeftShift, dyWarn);
         if (dyStringIsNotEmpty(dyWarn))
             {
             dyStringPrintf(dyError, "Can't convert '%s' to VCF: %s",