Skip to content

Commit

Permalink
FLTGetIsBetweenComparisonCommonExpresssion(): use appropriate backquo…
Browse files Browse the repository at this point in the history
…te escaping for Date fields (MapServer#5104)
  • Loading branch information
rouault committed Jun 23, 2015
1 parent 375e111 commit 631edba
Showing 1 changed file with 23 additions and 10 deletions.
33 changes: 23 additions & 10 deletions mapogcfiltercommon.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ char *FLTGetIsBetweenComparisonCommonExpresssion(FilterEncodingNode *psFilterNod
char **aszBounds = NULL;
int nBounds = 0;
int bString=0;
int bDateTime = 0;
char *pszExpression=NULL, *pszTmpEscaped;

if (!psFilterNode || !(strcasecmp(psFilterNode->pszValue, "PropertyIsBetween") == 0))
Expand All @@ -150,13 +151,17 @@ char *FLTGetIsBetweenComparisonCommonExpresssion(FilterEncodingNode *psFilterNod
/* -------------------------------------------------------------------- */
bString = 0;
if (aszBounds[0]) {
const char* pszType;
snprintf(szBuffer, bufferSize, "%s_type", psFilterNode->psLeftNode->pszValue);
if (msOWSLookupMetadata(&(lp->metadata), "OFG", szBuffer) != NULL && (strcasecmp(msOWSLookupMetadata(&(lp->metadata), "OFG", szBuffer), "Character") == 0))
pszType = msOWSLookupMetadata(&(lp->metadata), "OFG", szBuffer);
if (pszType != NULL && (strcasecmp(pszType, "Character") == 0))
bString = 1;
else if (pszType != NULL && (strcasecmp(pszType, "Date") == 0))
bDateTime = 1;
else if (FLTIsNumeric(aszBounds[0]) == MS_FALSE)
bString = 1;
}
if (!bString) {
if (!bString && !bDateTime) {
if (aszBounds[1]) {
if (FLTIsNumeric(aszBounds[1]) == MS_FALSE)
bString = 1;
Expand Down Expand Up @@ -185,17 +190,21 @@ char *FLTGetIsBetweenComparisonCommonExpresssion(FilterEncodingNode *psFilterNod
pszExpression = msStringConcatenate(pszExpression, szBuffer);

if (bString) {
sprintf(szBuffer,"%s", "\"");
pszExpression = msStringConcatenate(pszExpression, szBuffer);
pszExpression = msStringConcatenate(pszExpression, "\"");
}
else if (bDateTime) {
pszExpression = msStringConcatenate(pszExpression, "`");
}

pszTmpEscaped = msStringEscape(aszBounds[0]);
snprintf(szBuffer, bufferSize, "%s", pszTmpEscaped);
if(pszTmpEscaped != aszBounds[0] ) msFree(pszTmpEscaped);
pszExpression = msStringConcatenate(pszExpression, szBuffer);
if (bString) {
sprintf(szBuffer, "%s", "\"");
pszExpression = msStringConcatenate(pszExpression, szBuffer);
pszExpression = msStringConcatenate(pszExpression, "\"");
}
else if (bDateTime) {
pszExpression = msStringConcatenate(pszExpression, "`");
}

sprintf(szBuffer, "%s", " AND ");
Expand All @@ -219,17 +228,21 @@ char *FLTGetIsBetweenComparisonCommonExpresssion(FilterEncodingNode *psFilterNod
sprintf(szBuffer, "%s", " <= ");
pszExpression = msStringConcatenate(pszExpression, szBuffer);
if (bString) {
sprintf(szBuffer,"%s", "\"");
pszExpression = msStringConcatenate(pszExpression, szBuffer);
pszExpression = msStringConcatenate(pszExpression, "\"");
}
else if (bDateTime) {
pszExpression = msStringConcatenate(pszExpression, "`");
}
pszTmpEscaped = msStringEscape(aszBounds[1]);
snprintf(szBuffer, bufferSize, "%s", pszTmpEscaped);
if (pszTmpEscaped != aszBounds[1]) msFree(pszTmpEscaped);
pszExpression = msStringConcatenate(pszExpression, szBuffer);

if (bString) {
sprintf(szBuffer,"\"");
pszExpression = msStringConcatenate(pszExpression, szBuffer);
pszExpression = msStringConcatenate(pszExpression, "\"");
}
else if (bDateTime) {
pszExpression = msStringConcatenate(pszExpression, "`");
}
sprintf(szBuffer, "%s", ")");
pszExpression = msStringConcatenate(pszExpression, szBuffer);
Expand Down

0 comments on commit 631edba

Please sign in to comment.