080a160c7b9595d516c9c70e83689a09b60839d0
galt
Mon Jun 3 12:16:53 2013 -0700
fix SQL Injection
diff --git src/hg/hgc/retroClick.c src/hg/hgc/retroClick.c
index b8fe4a0..90b8a30 100644
--- src/hg/hgc/retroClick.c
+++ src/hg/hgc/retroClick.c
@@ -87,31 +87,31 @@
}
static void getGenbankInfo(struct sqlConnection *conn, struct mappingInfo *mi)
/* get source gene info and version from gbCdnaInfo and save in mi */
{
char query[512], **row;
struct sqlResult *sr;
char *defDb = database;
/* if id has been modified for multi-level ancestor mappings:
* NM_012345.1-1.1 -> db:NM_012345a.1.1
* then hack it back to the original accession. However, don't get version,
* since the sequence is different.
*/
-safef(query, sizeof(query),
+sqlSafef(query, sizeof(query),
"select gbCdnaInfo.version, geneName.name, description.name "
"from %s.gbCdnaInfo, %s.geneName, %s.description "
"where gbCdnaInfo.acc=\"%s\" and gbCdnaInfo.geneName=geneName.id and gbCdnaInfo.description = description.id",
defDb, defDb, defDb, mi->gbAcc);
sr = sqlGetResult(conn, query);
row = sqlNextRow(sr);
if (row != NULL)
{
mi->gbCurVer = sqlSigned(row[0]);
mi->sym = cloneString(row[1]);
mi->desc = cloneString(row[2]);
}
sqlFreeResult(&sr);
}
@@ -216,31 +216,31 @@
safef(orthoTable, sizeof(orthoTable), "%s%sOrtho%s",
mi->tblPre, mi->geneSet, mi->suffix);
else
safef(orthoTable, sizeof(orthoTable), "%s%sOrtho",
mi->tblPre, mi->geneSet);
printf("
\n");
printf("Breaks in Orthology:
\n");
printf("\n");
printf("Organism | %% Coverage |
\n");
printf("\n");
if (hTableExists(database, orthoTable))
{
struct sqlResult *sr;
char **row;
- safef(query, sizeof(query), "select * from %s where name = '%s' ",
+ sqlSafef(query, sizeof(query), "select * from %s where name = '%s' ",
orthoTable, pg->name);
sr = sqlGetResult(conn, query);
while ((row = sqlNextRow(sr)) != NULL)
{
struct ucscRetroOrtho *puro = ucscRetroOrthoLoad(row);
/* get substring after "net" prefix and convert first char to lower
case then get organism name */
safecpy(orgDb, sizeof(orgDb), puro->db+3);
orgDb[0] = tolower(orgDb[0]);
org = hOrganism(orgDb);
printf("%s (%s) ", org, orgDb);
printf(" | %d |
\n", puro->overlap);
}
sqlFreeResult(&sr);
}
@@ -249,31 +249,31 @@
printf("
\n");
}
static struct psl *loadPslRangeT(char *table, char *qName, char *tName, int tStart, int tEnd)
/* Load a list of psls given qName tName tStart tEnd */
{
struct sqlResult *sr = NULL;
char **row;
struct psl *psl = NULL, *pslList = NULL;
boolean hasBin;
char splitTable[64];
char query[256];
struct sqlConnection *conn = hAllocConn(database);
hFindSplitTable(database, seqName, table, splitTable, &hasBin);
-safef(query, sizeof(query), "select * from %s where qName = '%s' and tName = '%s' and tEnd > %d and tStart < %d", splitTable, qName, tName, tStart, tEnd);
+sqlSafef(query, sizeof(query), "select * from %s where qName = '%s' and tName = '%s' and tEnd > %d and tStart < %d", splitTable, qName, tName, tStart, tEnd);
sr = sqlGetResult(conn, query);
while ((row = sqlNextRow(sr)) != NULL)
{
psl = pslLoad(row+hasBin);
slAddHead(&pslList, psl);
}
sqlFreeResult(&sr);
slReverse(&pslList);
hFreeConn(&conn);
return pslList;
}
/* get overlap with psl and set the number of overlapping blocks to numBlocks */
int getOverlap(struct psl *psl, int start, int end, int *numBlocks)
{
@@ -422,37 +422,37 @@
struct psl *pslList = NULL;
char query[512];
if (startsWith("August",mi->geneSet))
{
if (hTableExists(database, "augustusXAli"))
{
*table = cloneString( "augustusXAli");
pslList = loadPslRangeT(*table, mi->seqId, pg->gChrom, pg->gStart, pg->gEnd);
}
else if (hTableExists(database, "augustusX"))
{
struct sqlResult *sr;
char **row;
int targetSize = 0;
*table = cloneString( "augustusX");
- safef(query, sizeof(query), "select * from augustusX where chrom = '%s' and txEnd > %d and txStart < %d and name like '%s%%'",
+ sqlSafef(query, sizeof(query), "select * from augustusX where chrom = '%s' and txEnd > %d and txStart < %d and name like '%s%%'",
pg->gChrom, pg->gStart, pg->gEnd , mi->seqId );
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) != NULL)
{
struct genePred *gp = genePredLoad(row+1);
- safef(query, sizeof(query),
+ sqlSafef(query, sizeof(query),
"select size from chromInfo where chrom = '%s' " , gp->chrom);
sqlFreeResult(&sr);
targetSize = sqlNeedQuickNum(conn, query) ;
pslList = pslFromGenePred(gp, targetSize);
}
}
}
else if (hTableExists(database, "all_mrna"))
{
char parent[255];
char *dotPtr ;
*table = cloneString( "all_mrna");
safef(parent, sizeof(parent), "%s",pg->name);
/* strip off version and unique suffix when looking for parent gene*/
@@ -502,36 +502,36 @@
static void displayMappingInfo(struct sqlConnection *conn, struct mappingInfo *mi)
/* display information from a transMap table */
{
struct ucscRetroInfo *pg = mi->pg;
double wt[12]; /* weights on score function*/
char query[512];
char *name;
char alignTbl[128];
char scoreSql[128];
struct psl *psl;
float coverFactor = 0;
float maxOverlap = 0;
if (mi->suffix == NULL)
{
safef(alignTbl, sizeof(alignTbl), "%s%sAli", mi->tblPre, mi->geneSet);
- safef(scoreSql, sizeof(scoreSql), "select max(score) from %s%sInfo", mi->tblPre, mi->geneSet);
+ sqlSafef(scoreSql, sizeof(scoreSql), "select max(score) from %s%sInfo", mi->tblPre, mi->geneSet);
}
else
{
safef(alignTbl, sizeof(alignTbl), "%s%sAli%s", mi->tblPre, mi->geneSet, mi->suffix);
- safef(scoreSql, sizeof(scoreSql), "select max(score) from %s%sInfo%s", mi->tblPre, mi->geneSet, mi->suffix);
+ sqlSafef(scoreSql, sizeof(scoreSql), "select max(score) from %s%sInfo%s", mi->tblPre, mi->geneSet, mi->suffix);
}
printf("\n");
printf("Retrogene Statistics:
\n");
printf("\n");
printf("Feature | Value |
\n");
printf("\n");
if (sameString(pg->type, "singleExon"))
printf("Type of Parent | %s |
\n",pg->type);
else
printf("Expression of Retrogene | %s |
\n",pg->type);
printf("Score | %d (range from 0 - %d) |
\n",
pg->score,
sqlQuickNum(conn, scoreSql) );
printf("Parent Gene Alignment Coverage (Bases Matching Parent) | %d %% (%d bp) |
\n", pg->coverage, pg->matches);
printf("Introns Processed Out | %d out of %d (%d exons covered)\n", pg->processedIntrons, (pg->parentSpliceCount/2), pg->exonCover);
@@ -600,56 +600,56 @@
printf(" |
---|
score function | %4.1f+ %4.1f+ %4.1f+ %4.1f+ %4.1f - %4.1f - %4.1f+ %4.1f - %4.1f - %4.1f |
\n",
wt[1]*(log(pg->exonCover+1)/log(2))*200 ,
wt[2]*(((log(pg->axtScore>0?pg->axtScore:1)/log(2))*170)-1000),
wt[3]*(log(pg->polyAlen+2)*200) ,
wt[4]*overlapOrtholog*10 ,
wt[5]*(((log(pg->processedIntrons > 0 ? pg->processedIntrons : 1))/log(2))*600) ,
(float)wt[6]*pow(pg->intronCount,0.5)*750 ,
(float)wt[7]*(maxOverlap*300),
wt[8]*((pg->coverage/100.0)*(1.0-coverFactor)*300.0),
wt[9]*(pg->tReps*10),
wt[10]*pg->alignGapCount);
if (pg->kaku > 0 && pg->kaku < 1000000)
printf("KA/KU mutation rate in non-syn sites vs utr with repect to parent gene | %4.2f |
\n", pg->kaku);
#endif
#ifdef xxx
-safef(query, sizeof(query), "select * from refGene where chrom = '%d' and txEnd > %d and txStart %d and name = '%s'",
+sqlSafef(query, sizeof(query), "select * from refGene where chrom = '%d' and txEnd > %d and txStart %d and name = '%s'",
pg->chrom, pg->gStart, pg->gEnd , pg->overName );
sr = sqlGetResult(conn, query);
if ((row = sqlNextRow(sr)) != NULL)
overlappingGene = genePredLoad(row);
if (overlappingGene != NULL)
{
printf ("CDS exons %d ",genePredcountCdsExons(overlappingGene));
}
#endif
printf("\n");
if ( differentString("none",pg->overName) &&
sqlFieldIndex(conn, "refGene", "exonFrames") != -1)
{
- safef(query, sizeof(query),
+ sqlSafef(query, sizeof(query),
"select concat(exonFrames,'(',cdsStart,')') from refGene where name = '%s' and chrom = '%s'" ,
pg->overName, pg->chrom);
if (sqlQuickString(conn, query) != NULL)
printf("Frame of retro %s (start) | %s |
\n",
pg->overName, sqlQuickString(conn, query));
}
name = cloneString(pg->name);
chopSuffix(name);
-safef(query, sizeof(query),
+sqlSafef(query, sizeof(query),
"select concat(exonFrames,'(',cdsStart,')') from rbRetroParent where name like '%s%%' and chrom = '%s'" ,
name, pg->chrom);
if (hTableExists(database, "rbRetroParent"))
{
if ( sqlQuickString(conn, query) != NULL)
printf("Frames of mapped parent %s (start) | %s |
\n",
name, sqlQuickString(conn, query));
}
printf("
\n");
}
static void printRetroAlignments(struct psl *pslList, int startFirst, char *hgcCommand,
char *aliTable, char *itemIn)
/* Print list of mRNA alignments. */
{
@@ -737,60 +737,60 @@
#if 0
geneCheckFree(&gc);
#endif
mappingInfoFree(&mi);
hFreeConn(&conn);
}
static struct genbankCds getCds(struct sqlConnection *conn, struct mappingInfo *mi)
/* Get CDS, return empty genebankCds if not found or can't parse */
{
char query[256];
struct sqlResult *sr;
struct genbankCds cds;
char **row;
-safef(query, sizeof(query),
+sqlSafef(query, sizeof(query),
"select cds.name "
"from %s.gbCdnaInfo, %s.cds "
"where gbCdnaInfo.acc=\"%s\" and gbCdnaInfo.cds=cds.id",
database, database, mi->gbAcc);
sr = sqlMustGetResult(conn, query);
row = sqlNextRow(sr);
if ((row == NULL) || !genbankCdsParse(row[0], &cds))
ZeroVar(&cds); /* can't get or parse cds */
sqlFreeResult(&sr);
return cds;
}
static struct psl *loadAlign(struct sqlConnection *conn, struct mappingInfo *mi, int start)
/* load a psl that must exist */
{
char rootTable[256], table[256], query[256];
boolean hasBin;
struct sqlResult *sr;
char **row;
struct psl *psl;
if (mi->suffix == NULL)
safef(rootTable, sizeof(rootTable), "%s%sAli", mi->tblPre, mi->geneSet);
else
safef(rootTable, sizeof(rootTable), "%s%sAli%s", mi->tblPre, mi->geneSet,mi->suffix);
hFindSplitTable(database, seqName, rootTable, table, &hasBin);
-safef(query, sizeof(query), "select * from %s where qName = '%s' and tStart = %d",
+sqlSafef(query, sizeof(query), "select * from %s where qName = '%s' and tStart = %d",
table, mi->pg->name, start);
sr = sqlMustGetResult(conn, query);
row = sqlNextRow(sr);
psl = pslLoad(row+hasBin);
sqlFreeResult(&sr);
return psl;
}
void retroShowCdnaAli(char *mappedId)
/* Show alignment for accession, mostly ripped off from htcCdnaAli */
{
char *track = cartString(cart, "aliTable");
struct trackDb *tdb = hashMustFindVal(trackHash, track);
char *table = cartString(cart, "table");
int start = cartInt(cart, "o");