Ticket #102 (closed defect: fixed)
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
Note: See
TracTickets for help on using
tickets.













