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.