• Show log

    Commit

  • Hash : 7f407710
    Author : Patrick Steinhardt
    Date : 2016-05-02T16:24:14

    odb_loose: fix undefined behavior when computing size
    
    An object's size is computed by reading the object header's size
    field until the most significant bit is not set anymore. To get
    the total size, we increase the shift on each iteration and add
    the shifted value to the total size.
    
    We read the current value into a variable of type `unsigned
    char`, from which we then take all bits except the most
    significant bit and shift the result. We will end up with a
    maximum shift of 60, but this exceeds the width of the value's
    type, resulting in undefined behavior.
    
    Fix the issue by instead reading the values into a variable of
    type `unsigned long`, which matches the required width. This is
    equivalent to git.git, which uses an `unsigned long` as well.