]> git.alsa-project.org Git - alsa-utils.git/commitdiff
axfer: Fix creation of v1.2 headers on big-endian systems
authorSamuel Holland <samuel@sholland.org>
Sun, 21 Apr 2019 00:15:54 +0000 (19:15 -0500)
committerJaroslav Kysela <perex@perex.cz>
Tue, 7 May 2019 06:28:31 +0000 (08:28 +0200)
struct block_v120_format defines these members as uint8_t. On
little-endian systems, no swapping is done, and the generated block
header is fine. However, on big-endian machines, the value is swapped to
the high byte and then truncated by the assignment, causing both
bits_per_sample and samples_per_frame to be zero.

This fixes an assertion failure in container-test when later
parsing the header ["assert(*samples_per_frame > 0);" in
container_context_pre_process()].

Fixes: 4ab7510f3a18: ("axfer: add support for a container of Creative Tech. voice format")
Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
axfer/container-voc.c

index 6fa59c3b819e6c202dd4ec6c1139e3f228f86bcb..ec0cfffa6d9bc02b76ecf26feb89536ff9cd4d12 100644 (file)
@@ -622,8 +622,8 @@ static int write_v120_format_block(struct container_context *cntr,
        build_block_data_size(block->size, 12 + byte_count);
 
        block->frames_per_second = htole32(frames_per_second);
-       block->bits_per_sample = htole16(state->bytes_per_sample * 8);
-       block->samples_per_frame = htole16(state->samples_per_frame);
+       block->bits_per_sample = state->bytes_per_sample * 8;
+       block->samples_per_frame = state->samples_per_frame;
        block->code_id = htole16(state->code_id);
 
        return container_recursive_write(cntr, block, sizeof(*block));