Shouldn't the last term be buffer[3] << 24 ?
>
> making it:
> *value = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3]
> << 24)
>
Yes, you are 100% right. It was not noticed in tests because they are no
such big integer in PAK files headers (buffer[3] is always 0)