Print this page
11972 resync smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_common_functions.c
          +++ new/usr/src/tools/smatch/src/smatch_common_functions.c
↓ open down ↓ 61 lines elided ↑ open up ↑
  62   62  
  63   63          bound.value++;
  64   64          *rl = remove_range(*rl, bound, ulong_max);
  65   65  
  66   66          return 1;
  67   67  }
  68   68  
  69   69  static int match_sprintf(struct expression *call, void *_arg, struct range_list **rl)
  70   70  {
  71   71          int str_arg = PTR_INT(_arg);
  72      -        int size;
       72 +        int min, max;
  73   73  
  74      -        size = get_formatted_string_size(call, str_arg);
  75      -        if (size <= 0) {
       74 +        min = get_formatted_string_min_size(call, str_arg);
       75 +        max = get_formatted_string_size(call, str_arg);
       76 +        if (min < 0 || max < 0) {
  76   77                  *rl = alloc_whole_rl(&ulong_ctype);
  77   78          } else {
  78      -                /* FIXME:  This is bogus.  get_formatted_string_size() should be
  79      -                   returning a range_list.  Also it should not add the NUL. */
  80      -                size--;
  81      -                *rl = alloc_rl(ll_to_sval(0), ll_to_sval(size));
       79 +                *rl = alloc_rl(ll_to_sval(min), ll_to_sval(max));
       80 +                *rl = cast_rl(get_type(call), *rl);
  82   81          }
  83   82          return 1;
  84   83  }
  85   84  
  86   85  void register_common_functions(int id)
  87   86  {
  88   87          /*
  89   88           * When you add a new function here, then don't forget to delete it from
  90   89           * the database and smatch_data/.
  91   90           */
  92   91          add_implied_return_hook("strlen", &match_strlen, NULL);
  93   92          add_implied_return_hook("strnlen", &match_strnlen, NULL);
  94   93          add_implied_return_hook("sprintf", &match_sprintf, INT_PTR(1));
  95   94          add_implied_return_hook("snprintf", &match_sprintf, INT_PTR(2));
  96   95  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX