• Tom Lane's avatar
    Prevent integer overflows in array subscripting calculations. · f02b9085
    Tom Lane authored
    While we were (mostly) careful about ensuring that the dimensions of
    arrays aren't large enough to cause integer overflow, the lower bound
    values were generally not checked.  This allows situations where
    lower_bound + dimension overflows an integer.  It seems that that's
    harmless so far as array reading is concerned, except that array
    elements with subscripts notionally exceeding INT_MAX are inaccessible.
    However, it confuses various array-assignment logic, resulting in a
    potential for memory stomps.
    
    Fix by adding checks that array lower bounds aren't large enough to
    cause lower_bound + dimension to overflow.  (Note: this results in
    disallowing cases where the last subscript position would be exactly
    INT_MAX.  In principle we could probably allow that, but there's a lot
    of code that computes lower_bound + dimension and would need adjustment.
    It seems doubtful that it's worth the trouble/risk to allow it.)
    
    Somewhat independently of that, array_set_element() was careless
    about possible overflow when checking the subscript of a fixed-length
    array, creating a different route to memory stomps.  Fix that too.
    
    Security: CVE-2021-32027
    f02b9085
arrayfuncs.c 175 KB