Ticket #102 (closed defect: fixed)

Opened 5 years ago

Last modified 5 years ago

Parsing of parameter range attributes

Reported by: Knut Landmark Owned by:
Priority: minor Milestone:
Component: zoo-kernel Version:
Keywords: Cc:

Description

The following code fragment in service_internal.c parses the Range=[min,max] attribute of LiteralData? variables, but does not terminate the MinimumValue? string. It also gives a wrong result if there are trailing white spaces in the MaximumValue? string.

pToken=strtok(orig,",");
int nci0=0;
while(pToken!=NULL) {
   char *tmpStr=(char*) malloc((strlen(pToken))*sizeof(char));
   if(nci0==0) {
      nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
      int nci=1;
      for(nci=1;nci<strlen(pToken);nci++) {
         tmpStr[nci-1]=pToken[nci];
      }
   }
   else {
      nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
      int nci=0;
      for(nci=0;nci<strlen(pToken)-1;nci++){
         tmpStr[nci]=pToken[nci];
      }
   }
   xmlAddChild(nc7,xmlNewText(BAD_CAST tmpStr));
   xmlAddChild(nc8,nc7);
   nci0++;
   pToken = strtok(NULL,",");
}

The following alternative code has been briefly tested:

pToken=strtok(orig,",");	
int nci0=0;
while(pToken!=NULL) {
   char *tmpStr=(char*) malloc((strlen(pToken))*sizeof(char));
   if(nci0==0) {
      nc7 = xmlNewNode(ns_ows, BAD_CAST "MinimumValue");
      strncpy( tmpStr, pToken+1, strlen(pToken)-1 );
      tmpStr[strlen(pToken)-1] = '\0';
   }
   else {
      nc7 = xmlNewNode(ns_ows, BAD_CAST "MaximumValue");
      const char* bkt;
      if ( ( bkt = strchr(pToken, '[') ) != NULL || ( bkt = strchr(pToken, ']') ) != NULL )
      {	
         strncpy( tmpStr, pToken, bkt - pToken );
         tmpStr[bkt - pToken] = '\0';			
      }		
   }
   xmlAddChild(nc7,xmlNewText(BAD_CAST tmpStr));
   free(tmpStr);
   xmlAddChild(nc8,nc7);
   nci0++;
   pToken = strtok(NULL,",");
}

Change History

Changed 5 years ago by djay

  • status changed from new to closed
  • resolution set to fixed

Thanks for your productive feedbacks.

This is now fixed in r507 in trunk.

Note: See TracTickets for help on using tickets.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png