ab5157a1c65a515ab009e4423b3ffb3373c027d3
angie
  Mon Jul 14 13:22:12 2014 -0700
VCF header's FILTER lines' end quotes need to be stripped from descriptions.fixes #13614.

diff --git src/lib/vcf.c src/lib/vcf.c
index 9e79390..4b21a6c 100644
--- src/lib/vcf.c
+++ src/lib/vcf.c
@@ -332,30 +332,33 @@
 	slAddHead((isInfo ? &(vcff->infoDefs) : &(vcff->gtFormatDefs)), def);
 	}
     else
 	vcfFileErr(vcff, "##%s line does not match expected pattern /%s/ or /%s/: \"%s\"",
 		   (isInfo ? "INFO" : "FORMAT"), infoOrFormatRegex, infoOrFormatRegex3_3, line);
     }
 else if (startsWith("##FILTER=", line) || startsWith("##ALT=", line))
     {
     boolean isFilter = startsWith("##FILTER", line);
     if (regexMatchSubstr(line, filterOrAltRegex, substrs, ArraySize(substrs)) ||
 	regexMatchSubstr(line, filterRegex3_3, substrs, ArraySize(substrs)))
 	{
 	// substrs[2] is ID/key, substrs[4] is Description.
 	struct vcfInfoDef *def = vcfFileAlloc(vcff, sizeof(struct vcfInfoDef));
 	def->key = vcfFileCloneSubstr(vcff, line, substrs[2]);
+	// greedy regex pulls in end quote, trim if found:
+	if (line[substrs[4].rm_eo-1] == '"')
+	    line[substrs[4].rm_eo-1] = '\0';
 	def->description = vcfFileCloneSubstr(vcff, line, substrs[4]);
 	slAddHead((isFilter ? &(vcff->filterDefs) : &(vcff->altDefs)), def);
 	}
     else
 	{
 	if (isFilter)
 	    vcfFileErr(vcff, "##FILTER line does not match expected pattern /%s/ or /%s/: \"%s\"",
 		       filterOrAltRegex, filterRegex3_3, line);
 	else
 	    vcfFileErr(vcff, "##ALT line does not match expected pattern /%s/: \"%s\"",
 		       filterOrAltRegex, line);
 	}
     }
 }