22d3654d2287e4bc26ec0ac27bf0d8ac7cc8a116
angie
  Wed Mar 5 13:09:35 2014 -0800
Added a few tests for 0-length (insertion) variants, to avoid errAbortwhen trying to fetch sequence for empty region.

diff --git src/hg/lib/pgSnp.c src/hg/lib/pgSnp.c
index d8ecaae..14d96db 100644
--- src/hg/lib/pgSnp.c
+++ src/hg/lib/pgSnp.c
@@ -286,57 +286,66 @@
         int end = rv->cdEnd;
         if (rv->cdEnd > (codStart + gene->blockSizes[i] - 1))
             end = codStart + gene->blockSizes[i] - 1;
         if (posStrand)
             {
             cStart = gene->chromStart + gene->chromStarts[i] + (st - codStart + 1);
             cEnd = gene->chromStart + gene->chromStarts[i] + (end - codStart + 1);
             }
         else
             {
             /* minus strand coding start == chromEnd */
             cEnd = gene->chromStart + gene->chromStarts[i] + gene->blockSizes[i] - (st - codStart + 1);
             cStart = gene->chromStart + gene->chromStarts[i] + gene->blockSizes[i] - (end - codStart + 1);
             }
 //printf("TESTING fetching sequence for %s:%d-%d\n", gene->chrom, cStart, cEnd);
+	if (cStart < cEnd)
+	    {
 	    struct dnaSeq *s = hDnaFromSeq(db, gene->chrom, cStart, cEnd, dnaUpper);
 	    dyStringPrintf(seq, "%s", s->dna);
 //printf("TESTING got seq=%s<br>\n", s->dna);
 	    //freeDnaSeq(&s);
+	    }
         /* check following exons, chrom order */
         if (posStrand && rv->cdEnd >= codStart + gene->blockSizes[i])
             {
             int st = codStart + gene->blockSizes[i] + 1;
             int end = rv->cdEnd;
             cStart = gene->chromStart + gene->chromStarts[i+1] - 1;
             cEnd = gene->chromStart + gene->chromStarts[i+1] + (end - st + 1);
+	    if (cStart < cEnd)
+		{
 		struct dnaSeq *s = hDnaFromSeq(db, gene->chrom, cStart, cEnd, dnaUpper);
 		dyStringPrintf(seq, "%s", s->dna);
 		//freeDnaSeq(&s);
 		}
+            }
         else if (!posStrand && rv->cdStart < (codStart - 1))
             {
             int st = rv->cdStart;
             int end = codStart - 1;
             cStart = gene->chromStart + gene->chromStarts[i+1];
             cEnd = gene->chromStart + gene->chromStarts[i+1] + (end - st);
 //printf("TESTING fetching sequence for %s:%d-%d\n", gene->chrom, cStart, cEnd);
+	    if (cStart < cEnd)
+		{
 		struct dnaSeq *s = hDnaFromSeq(db, gene->chrom, cStart, cEnd, dnaUpper);
 		dyStringPrintf(seq, "%s", s->dna);
 		//freeDnaSeq(&s);
 //printf("TESTING got seq=%s<br>\n", s->dna);
 		}
+            }
         rv->seq = dyStringCannibalize(&seq);
         break;
         }
     /* increment values past this exon */
     codNum += trunc((gene->blockSizes[i] - frame) / 3);
     if (frame > 0) codNum++;
     cPos += gene->blockSizes[i];
     frame = 3 - ((gene->blockSizes[i] - frame) % 3);
     }
 if (rv->seq == NULL)
     return NULL; /* not found */
 return rv;
 }
 
 char *replaceString(char *old, int from, int to, char *rep)