buf_size: fix bug caused by get_implied_max() returning s32max
authorDan Carpenter <dan.carpenter@oracle.com>
Mon, 4 Feb 2013 14:20:33 +0000 (4 17:20 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Mon, 4 Feb 2013 14:20:33 +0000 (4 17:20 +0300)
Before we would never get s32max here so len.value + 1 was always positive
and probably a more reasonable positive at that.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch_buf_size.c

index 8a406b2..8fa5416 100644 (file)
@@ -279,9 +279,11 @@ static int get_size_from_strlen(struct expression *expr)
        state = get_state_expr(my_strlen_id, expr);
        if (!state || !state->data)
                return 0;
-       if (get_implied_max((struct expression *)state->data, &len))
-               return len.value + 1; /* add one because strlen doesn't include the NULL */
-       return 0;
+       if (!get_implied_max((struct expression *)state->data, &len))
+               return 0;
+       if (sval_is_max(len))
+               return 0;
+       return len.value + 1; /* add one because strlen doesn't include the NULL */
 }
 
 static struct expression *remove_addr_fluff(struct expression *expr)