diff --git a/mapogcsos.c b/mapogcsos.c index 7665247496..cdea3f7c88 100644 --- a/mapogcsos.c +++ b/mapogcsos.c @@ -102,7 +102,7 @@ static int msSOSException(mapObj *map, char *locator, char *exceptionCode) xmlDocSetRootElement(psDoc, psRootNode); - psNsOws = xmlNewNs(psRootNode, BAD_CAST "http://www.opengis.net/ows/1.1", BAD_CAST "ows"); + xmlNewNs(psRootNode, BAD_CAST "http://www.opengis.net/ows/1.1", BAD_CAST "ows"); if (encoding) msIO_setHeader("Content-type","text/xml; charset=%s", encoding); @@ -120,6 +120,7 @@ static int msSOSException(mapObj *map, char *locator, char *exceptionCode) free(schemasLocation); xmlFree(buffer); xmlFreeDoc(psDoc); + xmlFreeNs(psNsOws); /* ** The typical pattern is to call msSOSException() right after @@ -932,6 +933,7 @@ char* msSOSReturnMemberResult(layerObj *lp, int iFeatureId, char **ppszProcedure } } } + msFreeShape(&sShape); return pszFinalValue; } @@ -2538,11 +2540,12 @@ int msSOSDescribeSensor(mapObj *map, sosParamsObj *sosparams, owsRequestObj *ows bFound = 1; pszProcedureId = msStrdup(tokens[k]); msFree(pszProcedureURI); - msFreeCharArray(tokens, n); break; } + msFree(pszProcedureURI); } } + msFreeCharArray(tokens, n); if (bFound) { pszUrl = msOWSLookupMetadata(&(lp->metadata), "S", "describesensor_url"); if (pszUrl) { diff --git a/mapwcs.c b/mapwcs.c index fc28ee49e0..15699ca0ce 100644 --- a/mapwcs.c +++ b/mapwcs.c @@ -962,7 +962,7 @@ static int msWCSGetCapabilities(mapObj *map, wcsParamsObj *params, cgiRequestObj else { /* set default updatesequence */ if(!updatesequence) - updatesequence = msStrdup("0"); + updatesequence = "0"; params->updatesequence = msStrdup(updatesequence); } @@ -995,7 +995,7 @@ static int msWCSGetCapabilities(mapObj *map, wcsParamsObj *params, cgiRequestObj /* TODO: DocType? */ if (!updatesequence) - updatesequence = msStrdup("0"); + updatesequence = "0"; msOWSPrintEncodeMetadata(stdout, &(map->web.metadata), NULL, "wcs_encoding", OWS_NOERR, "\n", "ISO-8859-1"); @@ -1280,6 +1280,7 @@ static int msWCSDescribeCoverage_CoverageOffering(layerObj *layer, wcsParamsObj if( (value = msOWSGetEncodeMetadata( &(layer->metadata), "CO", "formats", "GTiff" )) != NULL ) { tokens = msStringSplit(value, ' ', &numtokens); + msFree((char*)value); if(tokens && numtokens > 0) { for(i=0; i%s\n", tokens[i]); @@ -1335,8 +1336,11 @@ static int msWCSDescribeCoverage(mapObj *map, wcsParamsObj *params, owsRequestOb for(i=0; inumlayers; i++) { coverageName = msOWSGetEncodeMetadata(&(GET_LAYER(map, i)->metadata), "CO", "name", GET_LAYER(map, i)->name); if( EQUAL(coverageName, coverages[k]) && - (msIntegerInArray(GET_LAYER(map, i)->index, ows_request->enabled_layers, ows_request->numlayers)) ) + (msIntegerInArray(GET_LAYER(map, i)->index, ows_request->enabled_layers, ows_request->numlayers)) ) { + msFree(coverageName); break; + } + msFree(coverageName); } /* i = msGetLayerIndex(map, coverages[k]); */ @@ -1346,6 +1350,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSDescribeCoverage()" return msWCSException(map, "CoverageNotDefined", "coverage", params->version ); } } /* next coverage */ + msFreeCharArray(coverages,numcoverages); } } @@ -1378,10 +1383,15 @@ this request. Check wcs/ows_enable_request settings.", "msWCSDescribeCoverage()" for(k=0; knumlayers; i++) { coverageName = msOWSGetEncodeMetadata(&(GET_LAYER(map, i)->metadata), "CO", "name", GET_LAYER(map, i)->name); - if( EQUAL(coverageName, coverages[k]) ) break; + if( EQUAL(coverageName, coverages[k]) ) { + msFree(coverageName); + break; + } + msFree(coverageName); } msWCSDescribeCoverage_CoverageOffering((GET_LAYER(map, i)), params); } + msFreeCharArray(coverages,numcoverages); } } else { /* return all layers */ for(i=0; inumlayers; i++) { diff --git a/mapwcs11.c b/mapwcs11.c index 77232c2f07..afa7f9dc9b 100644 --- a/mapwcs11.c +++ b/mapwcs11.c @@ -72,7 +72,6 @@ int msWCSException11(mapObj *map, const char *locator, xmlChar *buffer = NULL; psNsOws = xmlNewNs(NULL, BAD_CAST "http://www.opengis.net/ows/1.1", BAD_CAST "ows"); - //TODO leak? encoding = msOWSLookupMetadata(&(map->web.metadata), "CO", "encoding"); errorString = msGetErrorString("\n"); @@ -85,8 +84,7 @@ int msWCSException11(mapObj *map, const char *locator, xmlDocSetRootElement(psDoc, psRootNode); - psNsOws = xmlNewNs(psRootNode, BAD_CAST "http://www.opengis.net/ows/1.1", BAD_CAST "ows"); - //TODO leak? + xmlNewNs(psRootNode, BAD_CAST "http://www.opengis.net/ows/1.1", BAD_CAST "ows"); if (encoding) msIO_setHeader("Content-type","text/xml; charset=%s", encoding); @@ -104,6 +102,7 @@ int msWCSException11(mapObj *map, const char *locator, free(schemasLocation); xmlFree(buffer); xmlFreeDoc(psDoc); + xmlFreeNs(psNsOws); /* clear error since we have already reported it */ msResetErrorList(); @@ -125,7 +124,7 @@ static char *msWCSGetFormatsList11( mapObj *map, layerObj *layer ) char *format_list = msStrdup(""); char **tokens = NULL, **formats = NULL; int i, numtokens = 0, numformats; - const char *value; + char *value; msApplyDefaultOutputFormats(map); @@ -136,6 +135,7 @@ static char *msWCSGetFormatsList11( mapObj *map, layerObj *layer ) && (value = msOWSGetEncodeMetadata( &(layer->metadata),"CO","formats", "GTiff" )) != NULL ) { tokens = msStringSplit(value, ' ', &numtokens); + msFree(value); } /* -------------------------------------------------------------------- */ @@ -144,6 +144,7 @@ static char *msWCSGetFormatsList11( mapObj *map, layerObj *layer ) else if((value = msOWSGetEncodeMetadata( &(map->web.metadata), "CO", "formats", NULL)) != NULL ) { tokens = msStringSplit(value, ' ', &numtokens); + msFree(value); } /* -------------------------------------------------------------------- */ @@ -461,6 +462,8 @@ int msWCSGetCapabilities11(mapObj *map, wcsParamsObj *params, xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, schemaLocation); xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, "/ows/1.1.0/owsAll.xsd"); xmlNewNsProp(psRootNode, NULL, BAD_CAST "xsi:schemaLocation", BAD_CAST xsi_schemaLocation); + msFree(schemaLocation); + msFree(xsi_schemaLocation); /* -------------------------------------------------------------------- */ /* Service metadata. */ @@ -775,7 +778,7 @@ msWCSDescribeCoverage_CoverageDescription11( /* -------------------------------------------------------------------- */ { xmlNodePtr psField, psInterpMethods, psAxis; - const char *value; + char *value; psField = xmlNewChild( @@ -786,12 +789,15 @@ msWCSDescribeCoverage_CoverageDescription11( "rangeset_label", NULL ); if( value ) xmlNewChild( psField, psOwsNs, BAD_CAST "Title", BAD_CAST value ); + msFree(value); + /* ows:Abstract? TODO */ value = msOWSGetEncodeMetadata( &(layer->metadata), "CO", "rangeset_name", "raster" ); xmlNewChild( psField, NULL, BAD_CAST "Identifier", BAD_CAST value ); + msFree(value); xmlNewChild( xmlNewChild( psField, NULL, BAD_CAST "Definition", NULL ), @@ -803,6 +809,7 @@ msWCSDescribeCoverage_CoverageDescription11( if( value ) xmlNewChild( psField, NULL, BAD_CAST "NullValue", BAD_CAST value ); + msFree(value); /* InterpolationMethods */ psInterpMethods = @@ -823,6 +830,7 @@ msWCSDescribeCoverage_CoverageDescription11( "bands_name", "bands" ); psAxis = xmlNewChild( psField, NULL, BAD_CAST "Axis", NULL ); xmlNewProp( psAxis, BAD_CAST "identifier", BAD_CAST value ); + msFree(value); psKeys = xmlNewChild( psAxis, NULL, BAD_CAST "AvailableKeys", NULL ); @@ -954,6 +962,8 @@ int msWCSDescribeCoverage11(mapObj *map, wcsParamsObj *params, owsRequestObj *ow xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, schemaLocation); xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, "/ows/1.1.0/owsAll.xsd"); xmlNewNsProp(psRootNode, NULL, BAD_CAST "xsi:schemaLocation", BAD_CAST xsi_schemaLocation); + msFree(schemaLocation); + msFree(xsi_schemaLocation); /* -------------------------------------------------------------------- */ /* Generate a CoverageDescription for each requested coverage. */ diff --git a/mapwcs20.c b/mapwcs20.c index 9b6ce10e1f..46070fdad5 100644 --- a/mapwcs20.c +++ b/mapwcs20.c @@ -1556,6 +1556,7 @@ static void msWCSCommon20_CreateRangeType(layerObj* layer, wcs20coverageMetadata xmlNewChild(psAllowedValues, psSweNs, BAD_CAST "significantFigures", BAD_CAST significant_figures); } } + msFreeCharArray(arr,num); } /************************************************************************/ @@ -3165,7 +3166,10 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p } /* retrieve coverage metadata */ status = msWCSGetCoverageMetadata20(layer, &cm); - if (status != MS_SUCCESS) return MS_FAILURE; + if (status != MS_SUCCESS) { + msWCSClearCoverageMetadata20(&cm); + return MS_FAILURE; + } /* fill in bands rangeset info, if required. */ /* msWCSSetDefaultBandsRangeSetInfo(NULL, &cm, layer ); */ @@ -3186,11 +3190,13 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p msSetError(MS_WCSERR, "Error loading CRS %s.", "msWCSGetCoverage20()", params->subsetcrs); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "projection", params->version); } if(msWCSGetCoverage20_FinalizeParamsObj(params) == MS_FAILURE) { + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "extent", params->version); } @@ -3235,6 +3241,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p msSetError(MS_WCSERR, "Error loading CRS %s.", "msWCSGetCoverage20()", params->subsetcrs); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "projection", params->version); } @@ -3257,6 +3264,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p /* extent and bbox do not overlap -> exit */ msSetError(MS_WCSERR, "Image extent does not intersect with desired region.", "msWCSGetCoverage20()"); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "ExtentError", "extent", params->version); } @@ -3271,6 +3279,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p || (params->height != 0 && params->resolutionY != MS_WCS20_UNBOUNDED)) { msSetError(MS_WCSERR, "GetCoverage operation supports only one of SIZE or RESOLUTION per axis.", "msWCSGetCoverage20()"); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "TooManyParameterValues", "coverage", params->version); } @@ -3329,6 +3338,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p msInitProjection(&outputProj); if(msLoadProjectionString(&outputProj, params->outputcrs) == -1) { msFreeProjection(&outputProj); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "coverage", params->version); } @@ -3357,6 +3367,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p "resulting coverage must be no more than MAXSIZE=%d.", "msWCSGetCoverage20()", map->maxsize); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "size", params->version); } @@ -3390,6 +3401,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p msSetError(MS_WCSERR, "Output format could not be automatically determined. " "Use the FORMAT parameter to specify a format.", "msWCSGetCoverage20()"); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "MissingParameterValue", "format", params->version); } @@ -3408,6 +3420,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p if (msGetOutputFormatIndex(map, params->format) == -1) { msSetError(MS_WCSERR, "Unrecognized value '%s' for the FORMAT parameter.", "msWCSGetCoverage20()", params->format); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "format", params->version); } @@ -3418,6 +3431,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p MS_NOOVERRIDE, MS_NOOVERRIDE); if(msWCSGetCoverage20_GetBands(map, layer, params, &cm, &bandlist) != MS_SUCCESS) { + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "rangesubset", params->version); } @@ -3437,6 +3451,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p } else { msSetError( MS_WCSERR, "'%s' specifies an unsupported interpolation method.", "msWCSGetCoverage20()", params->interpolation ); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, "InvalidParameterValue", "interpolation", params->version); } } else { @@ -3455,6 +3470,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p if (!map->outputformat) { msSetError(MS_WCSERR, "The map outputformat is missing!", "msWCSGetCoverage20()"); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, NULL, NULL, params->version); } else if (MS_RENDERER_PLUGIN(map->outputformat)) { image = msImageCreate(map->width, map->height, map->outputformat, @@ -3466,6 +3482,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p map->defresolution, &map->imagecolor); } else { msFree(bandlist); + msWCSClearCoverageMetadata20(&cm); msSetError(MS_WCSERR, "Map outputformat not supported for WCS!", "msWCSGetCoverage20()"); return msWCSException(map, NULL, NULL, params->version); @@ -3473,6 +3490,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p if (image == NULL) { msFree(bandlist); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, NULL, NULL, params->version); } @@ -3488,6 +3506,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p if( status != MS_SUCCESS ) { msFree(bandlist); msFreeImage(image); + msWCSClearCoverageMetadata20(&cm); return msWCSException(map, NULL, NULL, params->version ); } @@ -3560,6 +3579,7 @@ this request. Check wcs/ows_enable_request settings.", "msWCSGetCoverage20()", p file_ref = msSmallMalloc(length); strlcpy(file_ref, "cid:coverage/", length); strlcat(file_ref, filename, length); + msFree(default_filename); if(EQUAL(MS_IMAGE_MIME_TYPE(map->outputformat), "image/tiff")) { length = strlen(MS_WCS_20_PROFILE_GML_GEOTIFF) + 1; diff --git a/mapwms.c b/mapwms.c index f397d16823..a731fe447a 100644 --- a/mapwms.c +++ b/mapwms.c @@ -3303,6 +3303,7 @@ int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, owsReque msFree(pszLegendURL); msFree(pszMimetype); } + msFree(group_layers); } msIO_fprintf(stdout, " \n"); msFree(pszEncodedName);