mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-10 16:43:33 +02:00
Fix Bug 504 (P2) - PPC Macs crash importing MP3 files with "guess_file_type" error
in id3.c: psf->fileoffset is a sf_count_t, which is int64_t, which is larger than size_t on a G4 PPC. Since psf_binheader_readf expects that argument to be the smaller size_t, it ends up seeking over and over to the zero position since the larger bits of the variable are all zeros. Patch simply casts to size_t. Patch sent upstream as well.
This commit is contained in:
@@ -96,6 +96,8 @@ Patches: endian.m4, lrint.m4, llrint.m4, lrintf.m4, clip_mode.m4 copied from
|
|||||||
libsndfile's M4/.
|
libsndfile's M4/.
|
||||||
signal.m4 created out of the tail of acinclude.m4 with the remaining
|
signal.m4 created out of the tail of acinclude.m4 with the remaining
|
||||||
necessary macro
|
necessary macro
|
||||||
|
libsndfile-ppc-crash-on-some-id3-mp3s.patch - submitted to libsndfile
|
||||||
|
list on may 22 2012 (mchinen)
|
||||||
AM_MAINTAINER_MODE has been added to configure.ac to disable autotools rebuilds
|
AM_MAINTAINER_MODE has been added to configure.ac to disable autotools rebuilds
|
||||||
by default
|
by default
|
||||||
Upstream Version: 0.1.7
|
Upstream Version: 0.1.7
|
||||||
|
@@ -0,0 +1,22 @@
|
|||||||
|
Index: libsndfile/src/id3.c
|
||||||
|
===================================================================
|
||||||
|
--- libsndfile/src/id3.c (revision 11748)
|
||||||
|
+++ libsndfile/src/id3.c (working copy)
|
||||||
|
@@ -32,7 +32,7 @@
|
||||||
|
{ unsigned char buf [10] ;
|
||||||
|
|
||||||
|
memset (buf, 0, sizeof (buf)) ;
|
||||||
|
- psf_binheader_readf (psf, "pb", 0, buf, 10) ;
|
||||||
|
+ psf_binheader_readf (psf, "pb", (size_t)0, buf, 10) ;
|
||||||
|
|
||||||
|
if (buf [0] == 'I' && buf [1] == 'D' && buf [2] == '3')
|
||||||
|
{ int offset = buf [6] & 0x7f ;
|
||||||
|
@@ -48,7 +48,7 @@
|
||||||
|
|
||||||
|
/* Calculate new file offset and position ourselves there. */
|
||||||
|
psf->fileoffset += offset + 10 ;
|
||||||
|
- psf_binheader_readf (psf, "p", psf->fileoffset) ;
|
||||||
|
+ psf_binheader_readf (psf, "p", (size_t)psf->fileoffset) ;
|
||||||
|
|
||||||
|
return 1 ;
|
||||||
|
} ;
|
@@ -32,7 +32,7 @@ id3_skip (SF_PRIVATE * psf)
|
|||||||
{ unsigned char buf [10] ;
|
{ unsigned char buf [10] ;
|
||||||
|
|
||||||
memset (buf, 0, sizeof (buf)) ;
|
memset (buf, 0, sizeof (buf)) ;
|
||||||
psf_binheader_readf (psf, "pb", 0, buf, 10) ;
|
psf_binheader_readf (psf, "pb", (size_t)0, buf, 10) ;
|
||||||
|
|
||||||
if (buf [0] == 'I' && buf [1] == 'D' && buf [2] == '3')
|
if (buf [0] == 'I' && buf [1] == 'D' && buf [2] == '3')
|
||||||
{ int offset = buf [6] & 0x7f ;
|
{ int offset = buf [6] & 0x7f ;
|
||||||
@@ -48,7 +48,7 @@ id3_skip (SF_PRIVATE * psf)
|
|||||||
|
|
||||||
/* Calculate new file offset and position ourselves there. */
|
/* Calculate new file offset and position ourselves there. */
|
||||||
psf->fileoffset += offset + 10 ;
|
psf->fileoffset += offset + 10 ;
|
||||||
psf_binheader_readf (psf, "p", psf->fileoffset) ;
|
psf_binheader_readf (psf, "p", (size_t)psf->fileoffset) ;
|
||||||
|
|
||||||
return 1 ;
|
return 1 ;
|
||||||
} ;
|
} ;
|
||||||
|
Reference in New Issue
Block a user