[mapserver-commits] r8521 - trunk/mapserver
svn at osgeo.org
svn at osgeo.org
Mon Feb 9 13:24:43 EST 2009
Author: pramsey
Date: 2009-02-09 13:24:43 -0500 (Mon, 09 Feb 2009)
New Revision: 8521
Modified:
trunk/mapserver/mappostgis.c
Log:
Make base64 decoding data validation optional, for a bit more speed.
Modified: trunk/mapserver/mappostgis.c
===================================================================
--- trunk/mapserver/mappostgis.c 2009-02-09 17:16:11 UTC (rev 8520)
+++ trunk/mapserver/mappostgis.c 2009-02-09 18:24:43 UTC (rev 8521)
@@ -721,14 +721,21 @@
** into "dest" (not null terminated).
** Returns length of decoded array or 0 on failure.
*/
-int msPostGISBase64Decode(unsigned char *dest, const char *src) {
+int msPostGISBase64Decode(unsigned char *dest, const char *src, int srclen) {
if (src && *src) {
unsigned char *p = dest;
- int i, j, k;
- unsigned char *buf = calloc(strlen(src) + 1, sizeof(unsigned char));
+#ifdef BASE64_VALIDATE
+ int i = 0, j = 0, k = 0;
+ unsigned char *buf = calloc(srclen + 1, sizeof(unsigned char));
+#else
+ int j = srclen, k = 0;
+ const char *buf = src;
+#endif
+
+#ifdef BASE64_VALIDATE
/* Drop illegal chars first */
for (i=0, j=0; src[i]; i++) {
unsigned char c = src[i];
@@ -736,6 +743,7 @@
buf[j++] = c;
}
}
+#endif
for (k=0; k<j; k+=4) {
register unsigned char c1='A', c2='A', c3='A', c4='A';
@@ -766,7 +774,9 @@
*p++=(((b3&0x3)<<6)|b4 );
}
}
+#ifdef BASE64_VALIDATE
free(buf);
+#endif
return(p-dest);
}
return 0;
@@ -1216,7 +1226,8 @@
char *wkb64 = NULL;
unsigned char *wkb = NULL;
msPostGISLayerInfo *layerinfo = NULL;
- int result;
+ int result = 0;
+ int wkb64len = 0;
if (layer->debug) {
msDebug("msPostGISReadShape called.\n");
@@ -1227,15 +1238,17 @@
/* Retrieve the geometry. */
wkb64 = (char*)PQgetvalue(layerinfo->pgresult, layerinfo->rownum, layer->numitems );
-
+ wkb64len = PQgetlength(layerinfo->pgresult, layerinfo->rownum, layer->numitems);
+
if ( ! wkb64 ) {
msSetError(MS_QUERYERR, "Base64 WKB returned is null!", "msPostGISReadShape()");
return MS_FAILURE;
}
- wkb = calloc(PQgetlength(layerinfo->pgresult, layerinfo->rownum, layer->numitems), sizeof(char));
- result = msPostGISBase64Decode(wkb, wkb64);
+ wkb = calloc(wkb64len, sizeof(char));
+ result = msPostGISBase64Decode(wkb, wkb64, wkb64len);
+
if( ! result ) {
free(wkb);
return MS_FAILURE;
More information about the mapserver-commits
mailing list