aboutsummaryrefslogtreecommitdiffstats
path: root/main/libsndfile/fix-rf64-varargs-bug.patch
blob: 37c7c9c166ba623814bfd3a2aa9c0949f0739239 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
commit 9d470ee5577d3ccedb1c28c7e0a7295ba17feaf5
Author: Erik de Castro Lopo <erikd@mega-nerd.com>
Date:   Sun Apr 16 17:54:17 2017 +1000

    src/rf64.c: Fix varargs related bug
    
    C's <stargs.h> functionality isn't type checked so that passing an
    `sf_count_t` (64 bits) by mistake in place of a `unit32_t` can cause
    errors. This would be fine if it was an error on every architecture
    and platform, but its not. This particular problem only manifested
    on armhf and some other Arm architectures. It was not an issue on
    32 bit x86.
    
    I have now fixed variants of this same bug several times.
    
    Closes: https://github.com/erikd/libsndfile/issues/229

diff --git a/src/rf64.c b/src/rf64.c
index b3d637fa..02dd9046 100644
--- a/src/rf64.c
+++ b/src/rf64.c
@@ -742,7 +742,7 @@ rf64_write_header (SF_PRIVATE *psf, int calc_length)
 
 	pad_size = psf->dataoffset - 16 - psf->header.indx ;
 	if (pad_size >= 0)
-		psf_binheader_writef (psf, "m4z", PAD_MARKER, pad_size, make_size_t (pad_size)) ;
+		psf_binheader_writef (psf, "m4z", PAD_MARKER, (unsigned int) pad_size, make_size_t (pad_size)) ;
 
 	if (wpriv->rf64_downgrade && (psf->filelength < RIFF_DOWNGRADE_BYTES))
 		psf_binheader_writef (psf, "tm8", data_MARKER, psf->datalength) ;