﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
102	Parsing of parameter range attributes	Knut Landmark		"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,"","");
}
}}}"	defect	closed	minor		zoo-kernel		fixed		
