080a160c7b9595d516c9c70e83689a09b60839d0
galt
Mon Jun 3 12:16:53 2013 -0700
fix SQL Injection
diff --git src/hg/hgTables/schema.c src/hg/hgTables/schema.c
index 7fbbf72..092d751 100644
--- src/hg/hgTables/schema.c
+++ src/hg/hgTables/schema.c
@@ -77,33 +77,33 @@
struct asObject *asObj, struct sqlConnection *conn)
/* Print out an HTML table showing table fields and types, and optionally
* offering histograms for the text/enum fields. */
{
struct sqlResult *sr;
char **row;
#define TOO_BIG_FOR_HISTO 500000
boolean tooBig = (sqlTableSize(conn, table) > TOO_BIG_FOR_HISTO);
char query[256];
struct slName *exampleList, *example;
boolean showItemRgb = FALSE;
showItemRgb=bedItemRgb(findTdbForTable(db, curTrack, table, ctLookupName));
// should we expect itemRgb instead of "reserved"
-safef(query, sizeof(query), "select * from %s limit 1", table);
+sqlSafef(query, sizeof(query), "select * from %s limit 1", table);
exampleList = storeRow(conn, query);
-safef(query, sizeof(query), "describe %s", table);
+sqlSafef(query, sizeof(query), "describe %s", table);
sr = sqlGetResult(conn, query);
hTableStart();
hPrintf("
field | ");
if (exampleList != NULL)
hPrintf("example | ");
hPrintf("SQL type | ");
if (!tooBig)
hPrintf("info | ");
if (asObj != NULL)
hPrintf("description | ");
puts("
\n");
example = exampleList;
while ((row = sqlNextRow(sr)) != NULL)
{
@@ -206,50 +206,50 @@
static void printSampleRows(int sampleCount, struct sqlConnection *conn, char *table)
/* Put up sample values. */
{
char query[256];
struct sqlResult *sr;
char **row;
int i, columnCount = 0;
int itemRgbCol = -1;
boolean showItemRgb = FALSE;
showItemRgb=bedItemRgb(findTdbForTable(database, curTrack, table, ctLookupName));
// should we expect itemRgb instead of "reserved"
/* Make table with header row containing name of fields. */
-safef(query, sizeof(query), "describe %s", table);
+sqlSafef(query, sizeof(query), "describe %s", table);
sr = sqlGetResult(conn, query);
hTableStart();
hPrintf("");
while ((row = sqlNextRow(sr)) != NULL)
{
if (showItemRgb && sameWord(row[0],"reserved"))
{
hPrintf("itemRgb | ");
itemRgbCol = columnCount;
}
else
hPrintf("%s | ", row[0]);
++columnCount;
}
hPrintf("
");
sqlFreeResult(&sr);
/* Get some sample fields. */
-safef(query, sizeof(query), "select * from %s limit %d", table, sampleCount);
+sqlSafef(query, sizeof(query), "select * from %s limit %d", table, sampleCount);
sr = sqlGetResult(conn, query);
while ((row = sqlNextRow(sr)) != NULL)
{
hPrintf("");
for (i=0; i%d,%d,%d", (rgb & 0xff0000) >> 16,
(rgb & 0xff00) >> 8, (rgb & 0xff));
}
else
{
if (row[i] == NULL)
@@ -719,38 +719,38 @@
/* Wrap some error catching around asForTable. */
{
struct trackDb *tdb = hashFindVal(fullTableToTdbHash, table);
if (tdb != NULL)
return asForTdb(conn,tdb);
// Some cases are for tables with no tdb!
struct asObject *asObj = NULL;
if (sqlTableExists(conn, "tableDescriptions"))
{
struct errCatch *errCatch = errCatchNew();
if (errCatchStart(errCatch))
{
char query[256];
- safef(query, sizeof(query),
+ sqlSafef(query, sizeof(query),
"select autoSqlDef from tableDescriptions where tableName='%s'", table);
char *asText = asText = sqlQuickString(conn, query);
// If no result try split table. (not likely)
if (asText == NULL)
{
- safef(query, sizeof(query),
+ sqlSafef(query, sizeof(query),
"select autoSqlDef from tableDescriptions where tableName='chrN_%s'", table);
asText = sqlQuickString(conn, query);
}
if (asText != NULL && asText[0] != 0)
{
asObj = asParseText(asText);
}
freez(&asText);
}
errCatchEnd(errCatch);
errCatchFree(&errCatch);
}
return asObj;
}