diff --git a/mapgeos.c b/mapgeos.c index 93e4775709..a64aceb927 100644 --- a/mapgeos.c +++ b/mapgeos.c @@ -239,6 +239,7 @@ static GEOSGeom msGEOSShape2Geometry_polygon(shapeObj *shape) } g = GEOSGeom_createCollection(GEOS_MULTIPOLYGON, polygons, numOuterRings); + free(polygons); } free(outerList); diff --git a/mapogcfiltercommon.c b/mapogcfiltercommon.c index 23657e291d..73fc033b68 100644 --- a/mapogcfiltercommon.c +++ b/mapogcfiltercommon.c @@ -536,21 +536,22 @@ char *FLTGetSpatialComparisonCommonExpression(FilterEncodingNode *psNode, layerO pszExpression = msStringConcatenate(pszExpression, szBuffer); - if (strncasecmp(psNode->pszValue, "intersect", 9) == 0) - pszTmp = msStrdup("intersects"); - if (strncasecmp(psNode->pszValue, "equals", 6) == 0) - pszTmp = msStrdup("eq"); - else - pszTmp = msStrdup(psNode->pszValue); - msStringToLower(pszTmp); - if (bBBoxQuery) + if (bBBoxQuery) { sprintf(szBuffer, " %s ", "intersects"); - /* sprintf(szBuffer, " %s ", "disjoint"); */ - else - sprintf(szBuffer, " %s ", pszTmp); + } else { + if (strncasecmp(psNode->pszValue, "intersect", 9) == 0) + sprintf(szBuffer, " %s ", "intersects"); + else if (strncasecmp(psNode->pszValue, "equals", 6) == 0) + sprintf(szBuffer, " %s ", "eq"); + else { + pszTmp = msStrdup(psNode->pszValue); + msStringToLower(pszTmp); + sprintf(szBuffer, " %s ", pszTmp); + msFree(pszTmp); + } + } pszExpression = msStringConcatenate(pszExpression, szBuffer); - msFree(pszTmp); pszWktText = msGEOSShapeToWKT(psTmpShape); sprintf(szBuffer, "%s", " fromText('"); @@ -560,8 +561,14 @@ char *FLTGetSpatialComparisonCommonExpression(FilterEncodingNode *psNode, layerO pszExpression = msStringConcatenate(pszExpression, szBuffer); msGEOSFreeWKT(pszWktText); } - if (psBufferShape) + if (psBufferShape) { msFreeShape(psBufferShape); + msFree(psBufferShape); + } + if(bBBoxQuery) { + msFreeShape(psTmpShape); + msFree(psTmpShape); + } sprintf(szBuffer, "%s", ")"); diff --git a/mapogcsld.c b/mapogcsld.c index a45f20a609..654175c475 100644 --- a/mapogcsld.c +++ b/mapogcsld.c @@ -185,6 +185,7 @@ int msSLDApplySLD(mapObj *map, char *psSLDXML, int iLayer, msFree(pasLayers[l].name); pasLayers[l].name = strdup(tmpId); msInsertLayer(map, psTmpLayer, -1); + MS_REFCNT_DECR(psTmpLayer); } } } @@ -238,8 +239,7 @@ int msSLDApplySLD(mapObj *map, char *psSLDXML, int iLayer, /*unset the classgroup on the layer if it was set. This allows the layer to render with all the classes defined in the SLD*/ - if (GET_LAYER(map, i)->classgroup) - msFree(GET_LAYER(map, i)->classgroup); + msFree(GET_LAYER(map, i)->classgroup); GET_LAYER(map, i)->classgroup = NULL; iClass = 0; @@ -290,8 +290,7 @@ int msSLDApplySLD(mapObj *map, char *psSLDXML, int iLayer, break; } if (k < GET_LAYER(map, i)->numclasses) { - if ( GET_LAYER(map, i)->classgroup) - msFree( GET_LAYER(map, i)->classgroup); + msFree( GET_LAYER(map, i)->classgroup); GET_LAYER(map, i)->classgroup = msStrdup(pasLayers[j].classgroup); } else { /* TODO we throw an exception ?*/ @@ -774,12 +773,14 @@ int msSLDParseNamedLayer(CPLXMLNode *psRoot, layerObj *psLayer) psFilter = CPLGetXMLNode(psRule, "Filter"); if (psFilter && psFilter->psChild && psFilter->psChild->pszValue) { - + CPLXMLNode *psTmpNextNode = NULL; /* clone the tree and set the next node to null */ /* so we only have the Filter node */ psTmpNode = CPLCloneXMLTree(psFilter); + psTmpNextNode = psTmpNode->psNext; psTmpNode->psNext = NULL; pszTmpFilter = CPLSerializeXMLTree(psTmpNode); + psTmpNode->psNext = psTmpNextNode; CPLDestroyXMLNode(psTmpNode); if (pszTmpFilter) { @@ -888,8 +889,10 @@ int msSLDParseNamedLayer(CPLXMLNode *psRoot, layerObj *psLayer) psNamedStyle = CPLGetXMLNode(psRoot, "NamedStyle"); if (psNamedStyle) { psSLDName = CPLGetXMLNode(psNamedStyle, "Name"); - if (psSLDName && psSLDName->psChild && psSLDName->psChild->pszValue) + if (psSLDName && psSLDName->psChild && psSLDName->psChild->pszValue) { + msFree(psLayer->classgroup); psLayer->classgroup = msStrdup(psSLDName->psChild->pszValue); + } } } @@ -1573,15 +1576,17 @@ int msSLDParseGraphicFillOrStroke(CPLXMLNode *psRoot, /* default symbol is square */ - if (!pszSymbolName || + if (!pszSymbolName || !*pszSymbolName || (strcasecmp(pszSymbolName, "square") != 0 && strcasecmp(pszSymbolName, "circle") != 0 && strcasecmp(pszSymbolName, "triangle") != 0 && strcasecmp(pszSymbolName, "star") != 0 && strcasecmp(pszSymbolName, "cross") != 0 && strcasecmp(pszSymbolName, "x") != 0)) { - if (msGetSymbolIndex(&map->symbolset, pszSymbolName, MS_FALSE) < 0) + if (!pszSymbolName || !*pszSymbolName || msGetSymbolIndex(&map->symbolset, pszSymbolName, MS_FALSE) < 0) { + msFree(pszSymbolName); pszSymbolName = msStrdup("square"); + } } @@ -1712,6 +1717,7 @@ int msSLDParseGraphicFillOrStroke(CPLXMLNode *psRoot, if (psExternalGraphic) msSLDParseExternalGraphic(psExternalGraphic, psStyle, map); } + msFree(pszSymbolName); } return MS_SUCCESS; diff --git a/mapserver.h b/mapserver.h index 1ba5345d6e..d6491d4171 100644 --- a/mapserver.h +++ b/mapserver.h @@ -2729,8 +2729,8 @@ extern "C" { MS_DLL_EXPORT int msPopulateRendererVTableGD( rendererVTableObj *renderer ); MS_DLL_EXPORT int msPopulateRendererVTableKML( rendererVTableObj *renderer ); MS_DLL_EXPORT int msPopulateRendererVTableOGR( rendererVTableObj *renderer ); -#ifdef CAIRO - MS_DLL_EXPORT void msCairoCleanup(); +#ifdef USE_CAIRO + MS_DLL_EXPORT void msCairoCleanup(void); #endif /* allocate 50k for starters */ diff --git a/mapwms.c b/mapwms.c index 8e43bcddc8..f397d16823 100644 --- a/mapwms.c +++ b/mapwms.c @@ -198,9 +198,8 @@ int msWMSException(mapObj *map, int nVersion, const char *exception_code, msIO_printf("\n"); msIO_printf("\n"); - free(schemalocation); - } + free(schemalocation); return MS_FAILURE; /* so that we can call 'return msWMSException();' anywhere */ } @@ -637,14 +636,14 @@ int msWMSValidateDimensionValue(char *value, const char *dimensionextent, int fo } if (j == nextentranges) { valueisvalid = MS_FALSE; + msFreeCharArray(onerange, ntmp); break; } } } else { valueisvalid = MS_FALSE; } - if (onerange && ntmp > 0) - msFreeCharArray(onerange, ntmp); + msFreeCharArray(onerange, ntmp); } uservaluevalid = valueisvalid; } @@ -858,6 +857,8 @@ int msWMSLoadGetMapParams(mapObj *map, int nVersion, layers = msStringSplit(values[i], ',', &numlayers); if (layers==NULL || strlen(values[i]) <=0 || numlayers < 1) { + msFreeCharArray(layers,numlayers); + msFree(layerOrder); numlayers = 0; if (sld_url == NULL && sld_body == NULL) { msSetError(MS_WMSERR, "At least one layer name required in LAYERS.", @@ -870,6 +871,8 @@ int msWMSLoadGetMapParams(mapObj *map, int nVersion, layerlimit = msOWSLookupMetadata(&(map->web.metadata), "MO", "layerlimit"); if(layerlimit) { if (numlayers > atoi(layerlimit)) { + msFreeCharArray(layers,numlayers); + msFree(layerOrder); msSetError(MS_WMSERR, "Number of layers requested exceeds LayerLimit.", "msWMSLoadGetMapParams()"); return msWMSException(map, nVersion, NULL, wms_exception_format); @@ -1244,12 +1247,16 @@ int msWMSLoadGetMapParams(mapObj *map, int nVersion, wms_exception_format)) { msFreeCharArray(tokens, ntokens); msFree(dimensionname); + msFree(stmp); return msWMSException(lp->map, nVersion, "InvalidDimensionValue", wms_exception_format); } + msFree(dimensionname); + msFree(stmp); break; } msFree(dimensionname); + msFree(stmp); } } msFreeCharArray(tokens, ntokens); @@ -1583,6 +1590,8 @@ this request. Check wms/ows_enable_request settings.", layers[l] = strdup(tmpId); msInsertLayer(map, psTmpLayer, -1); bLayerInserted =MS_TRUE; + /* layer was copied, we need to decrement its refcount */ + MS_REFCNT_DECR(psTmpLayer); } } } @@ -1602,8 +1611,7 @@ this request. Check wms/ows_enable_request settings.", lp = GET_LAYER(map, j); for (k=0; knumclasses; k++) { if (lp->class[k]->group && strcasecmp(lp->class[k]->group, tokens[i]) == 0) { - if (lp->classgroup) - msFree(lp->classgroup); + msFree(lp->classgroup); lp->classgroup = msStrdup( tokens[i]); break; } @@ -1640,16 +1648,14 @@ this request. Check wms/ows_enable_request settings.", } else { msSetError(MS_WMSERR, "Invalid style (%s). Mapserver is expecting an empty string for the STYLES : STYLES= or STYLES=,,, or using keyword default STYLES=default,default, ...", "msWMSLoadGetMapParams()", styles); - if (tokens && n > 0) - msFreeCharArray(tokens, n); - if (layers && numlayers > 0) - msFreeCharArray(layers, numlayers); + msFreeCharArray(tokens, n); + msFreeCharArray(layers, numlayers); return msWMSException(map, nVersion, "StyleNotDefined", wms_exception_format); } } } - if (tokens && n > 0) - msFreeCharArray(tokens, n); + msFreeCharArray(tokens, n); + msFreeCharArray(layers, numlayers); } /* @@ -2227,6 +2233,7 @@ int msDumpLayer(mapObj *map, layerObj *lp, int nVersion, const char *script_url_ msFree(pszDimension); msFree(pszDimensionItemName); msFree(pszDimensionUnitName); + msFree(pszDimensionExtentName); msFree(pszDimensionDefaultName); } @@ -4505,8 +4512,7 @@ this request. Check wms/ows_enable_request settings.", "msWMSGetLegendGraphic()"); return msWMSException(map, nVersion, "StyleNotDefined", wms_exception_format); } else { - if (GET_LAYER(map, iLayerIndex)->classgroup) - msFree(GET_LAYER(map, iLayerIndex)->classgroup); + msFree(GET_LAYER(map, iLayerIndex)->classgroup); GET_LAYER(map, iLayerIndex)->classgroup = msStrdup(pszStyle); }