• M
    Fix unintended sign extension · 3475c7a1
    Matt Caswell 提交于
    The function CRYPTO_128_unwrap_pad uses an 8 byte AIV (Alternative Initial
    Value). The least significant 4 bytes of this is placed into the local
    variable |ptext_len|. This is done as follows:
    
        ptext_len = (aiv[4] << 24) | (aiv[5] << 16) | (aiv[6] << 8) | aiv[7];
    
    aiv[4] is an unsigned char, but (aiv[4] << 24) is promoted to a *signed*
    int - therefore we could end up shifting into the sign bit and end up with
    a negative value. |ptext_len| is a size_t (typically 64-bits). If the
    result of the shifts is negative then the upper bits of |ptext_len| will
    all be 1.
    
    This commit fixes the issue by explicitly casting to an unsigned int.
    Reviewed-by: NRichard Levitte <levitte@openssl.org>
    3475c7a1
wrap128.c 13.8 KB