Details

There's a bug in get_long_be etc. in apps/metadata/metadata_common.c on 64-bit systems. An unsigned char is shifted left, so it's converted to an int, which can result in a negative value. This value is sign-extended to 64 bits when it's returned as an unsigned long. Changing the return type to uint32_t fixes the problem for now, although these functions should eventually be refactored.

This problem is unlikely to affect most formats, since they don't have values >0x7fffffff. The exception is AIFF, when it reads the file's frequency; this bug prevents 44100Hz AIFF files from being played.