validate string to number conversion
This commit is contained in:
		
							parent
							
								
									cb4dbce82d
								
							
						
					
					
						commit
						10a031eda3
					
				@ -988,6 +988,9 @@ static int ptql_branch_parse(char *query, ptql_parse_branch_t *branch)
 | 
				
			|||||||
    return SIGAR_OK;
 | 
					    return SIGAR_OK;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define strtonum_failed(src, ptr) \
 | 
				
			||||||
 | 
					    ((src == ptr) || (errno == ERANGE) || (*ptr != '\0'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int ptql_branch_add(ptql_parse_branch_t *parsed,
 | 
					static int ptql_branch_add(ptql_parse_branch_t *parsed,
 | 
				
			||||||
                           ptql_branch_list_t *branches)
 | 
					                           ptql_branch_list_t *branches)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -995,6 +998,7 @@ static int ptql_branch_add(ptql_parse_branch_t *parsed,
 | 
				
			|||||||
    ptql_entry_t *entry = NULL;
 | 
					    ptql_entry_t *entry = NULL;
 | 
				
			||||||
    ptql_lookup_t *lookup = NULL;
 | 
					    ptql_lookup_t *lookup = NULL;
 | 
				
			||||||
    int i, is_set=0;
 | 
					    int i, is_set=0;
 | 
				
			||||||
 | 
					    char *ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    PTQL_BRANCH_LIST_GROW(branches);
 | 
					    PTQL_BRANCH_LIST_GROW(branches);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1096,19 +1100,28 @@ static int ptql_branch_add(ptql_parse_branch_t *parsed,
 | 
				
			|||||||
      case PTQL_VALUE_TYPE_UI64:
 | 
					      case PTQL_VALUE_TYPE_UI64:
 | 
				
			||||||
        branch->match.ui64 = ptql_op_ui64[branch->op_name];
 | 
					        branch->match.ui64 = ptql_op_ui64[branch->op_name];
 | 
				
			||||||
        if (!is_set) {
 | 
					        if (!is_set) {
 | 
				
			||||||
            branch->value.ui64 = strtoull(parsed->value, NULL, 10);
 | 
					            branch->value.ui64 = strtoull(parsed->value, &ptr, 10);
 | 
				
			||||||
 | 
					            if (strtonum_failed(parsed->value, ptr)) {
 | 
				
			||||||
 | 
					                return SIGAR_PTQL_MALFORMED_QUERY;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case PTQL_VALUE_TYPE_UI32:
 | 
					      case PTQL_VALUE_TYPE_UI32:
 | 
				
			||||||
        branch->match.ui32 = ptql_op_ui32[branch->op_name];
 | 
					        branch->match.ui32 = ptql_op_ui32[branch->op_name];
 | 
				
			||||||
        if (!is_set) {
 | 
					        if (!is_set) {
 | 
				
			||||||
            branch->value.ui32 = strtoul(parsed->value, NULL, 10);
 | 
					            branch->value.ui32 = strtoul(parsed->value, &ptr, 10);
 | 
				
			||||||
 | 
					            if (strtonum_failed(parsed->value, ptr)) {
 | 
				
			||||||
 | 
					                return SIGAR_PTQL_MALFORMED_QUERY;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case PTQL_VALUE_TYPE_DBL:
 | 
					      case PTQL_VALUE_TYPE_DBL:
 | 
				
			||||||
        branch->match.dbl = ptql_op_dbl[branch->op_name];
 | 
					        branch->match.dbl = ptql_op_dbl[branch->op_name];
 | 
				
			||||||
        if (!is_set) {
 | 
					        if (!is_set) {
 | 
				
			||||||
            branch->value.dbl = strtod(parsed->value, NULL);
 | 
					            branch->value.dbl = strtod(parsed->value, &ptr);
 | 
				
			||||||
 | 
					            if (strtonum_failed(parsed->value, ptr)) {
 | 
				
			||||||
 | 
					                return SIGAR_PTQL_MALFORMED_QUERY;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case PTQL_VALUE_TYPE_CHR:
 | 
					      case PTQL_VALUE_TYPE_CHR:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user