b04a39a028980ea32b2ac62950bdff0a67de16d0
galt
  Wed Jul 18 14:48:19 2018 -0700
Add missing CSP header to pages not handled automatically by library functions. refs #21729.

diff --git src/tabFile/tabToHtml/tabToHtml.c src/tabFile/tabToHtml/tabToHtml.c
index 5c3bed1..ccd217b 100644
--- src/tabFile/tabToHtml/tabToHtml.c
+++ src/tabFile/tabToHtml/tabToHtml.c
@@ -1,119 +1,121 @@
 /* tabToHtml - Convert tab-separated-file to an HTML file that is a table and not much else.. */
 #include "common.h"
 #include "linefile.h"
 #include "hash.h"
 #include "options.h"
+#include "htmshell.h"
 #include "fieldedTable.h"
 
 char *clTitle = NULL;	    // Title from command line
 
 boolean clEmbed;	// If true we embed in another page
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "tabToHtml - Convert tab-separated-file to an HTML file that is a table and not much else.\n"
   "usage:\n"
   "   tabToHtml in.tsv out.html\n"
   "options:\n"
   "   -embed - don't write beginning and end of page, just controls and tree.\n"
   "            useful for making html to be embedded in another page.\n"
   "   -title=\"Some sort of table title\"\n"
   );
 }
 
 /* Command line validation table. */
 static struct optionSpec options[] = {
    {"embed", OPTION_BOOLEAN},
    {"title", OPTION_STRING},
    {NULL, 0},
 };
 
 void writeHtml(struct fieldedTable *table, FILE *f)
 /* Write HTML version of table */
 {
 if (!clEmbed)
     {
-    fputs(
+    fprintf(f,
     "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n"
     "<HTML>\n"
     "<HEAD>\n"
+    "%s"
     "    <META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;CHARSET=iso-8859-1\">\n"
-    , f);
+    , getCspMetaHeader());
     if (clTitle)
 	fprintf(f, "    <TITLE>%s</TITLE>\n", clTitle);
     else
 	fprintf(f, "    <TITLE>table %s</TITLE>\n", table->name);
     fputs(
     "</HEAD>\n"
     "<BODY>\n"
     , f);
     fprintf(f, 
 	"<style>table, th, td "
 	"{ border: 1px solid black; "
 	"  border-collapse: collapse; "
 	"  padding: 3px;"
 	"}</style>");
     if (clTitle)
 	fprintf(f, "<H2>%s</H2>\n", clTitle);
     else
 	fprintf(f, "<H2>table from %s</H2>\n", table->name);
     }
 
 /* Print table tag and header row. */
 fprintf(f, "<table>\n");
 fprintf(f, "<tr>");
 int i;
 for (i=0; i<table->fieldCount; ++i)
     {
     char *field = table->fields[i];
     fprintf(f, " <th>%s</th>", field);
     }
 fprintf(f, "</tr>\n");
 
 /* Print data rows. */
 struct fieldedRow *fr;
 for (fr = table->rowList; fr != NULL; fr = fr->next)
     {
     char **row = fr->row;
     fprintf(f, "<tr>");
     for (i=0; i<table->fieldCount; ++i)
 	fprintf(f, " <td>%s</td>", row[i]);
     fprintf(f, "<tr>\n");
     }
 
 /* Close up table */
 fprintf(f, "</TABLE>\n");
 
 /* Unless embedded close up web page too. */
 if (!clEmbed)
     {
     fputs(
     "</BODY>\n"
     "</HTML>\n"
     "\n"
     , f);
     }
 }
 
 void tabToHtml(char *inTsv, char *outHtml)
 /* tabToHtml - Convert tab-separated-file to an HTML file that is a table and not much else.. */
 {
 struct fieldedTable *table = fieldedTableFromTabFile(inTsv, inTsv, NULL, 0);
 FILE *f = mustOpen(outHtml, "w");
 writeHtml(table, f);
 carefulClose(&f);
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc != 3)
     usage();
 clEmbed = optionExists("embed");
 clTitle = optionVal("title", NULL);
 tabToHtml(argv[1], argv[2]);
 return 0;
 }