Update of /cvsroot/fink/dists/10.4/unstable/main/finkinfo/sound In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv7822/sound
Modified Files: libsndfile1.info Added Files: libsndfile1.patch Log Message: fix for new flac and possible overflows --- NEW FILE: libsndfile1.patch --- diff -ruN libsndfile-1.0.17/patches/flac-1.1.4.dpatch libsndfile-1.0.17.new/patches/flac-1.1.4.dpatch --- libsndfile-1.0.17/patches/flac-1.1.4.dpatch 1969-12-31 19:00:00.000000000 -0500 +++ libsndfile-1.0.17.new/patches/flac-1.1.4.dpatch 2008-02-24 21:22:48.000000000 -0500 @@ -0,0 +1,486 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## flac-1.1.4.dpatch by Samuel Mimram <[EMAIL PROTECTED]> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Adapt to FLAC 1.1.4 API. +## DP: Patch stolen from http://cvs.archlinux.org/cgi-bin/viewcvs.cgi/lib/libsndfile/flac-1.1.4.patch. + [EMAIL PROTECTED]@ +diff -urNad libsndfile-1.0.17~/configure.ac libsndfile-1.0.17/configure.ac +--- libsndfile-1.0.17~/configure.ac 2006-08-31 11:39:37.000000000 +0200 ++++ libsndfile-1.0.17/configure.ac 2007-06-15 12:38:53.000000000 +0200 +@@ -339,7 +339,8 @@ + if test "x$HAVE_FLAC_1_1_1" = xyes ; then + AC_DEFINE(HAVE_FLAC_1_1_1, [1], [Define to 1 if you have libflac 1.1.1]) + fi +- FLAC_LIBS="-lFLAC" ++ # in FLAC 1.1.3 libOggFLAC was merged into libFLAC, hence we need -logg ++ FLAC_LIBS="-lFLAC -logg" + fi + fi + +diff -urNad libsndfile-1.0.17~/src/flac.c libsndfile-1.0.17/src/flac.c +--- libsndfile-1.0.17~/src/flac.c 2006-08-31 11:22:19.000000000 +0200 ++++ libsndfile-1.0.17/src/flac.c 2007-06-15 12:38:53.000000000 +0200 +@@ -46,6 +46,13 @@ + #include "sfendian.h" + #include "float_cast.h" + ++/* FLAC 1.1.3 has FLAC_API_VERSION_CURRENT == 8 */ ++#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8 ++#define LEGACY_FLAC ++#else ++#undef LEGACY_FLAC ++#endif ++ + /*------------------------------------------------------------------------------ + ** Private static functions. + */ +@@ -60,8 +67,14 @@ + } PFLAC_PCM ; + + typedef struct +-{ FLAC__SeekableStreamDecoder *fsd ; ++{ ++#ifdef LEGACY_FLAC ++ FLAC__SeekableStreamDecoder *fsd ; + FLAC__SeekableStreamEncoder *fse ; ++#else ++ FLAC__StreamDecoder *fsd ; ++ FLAC__StreamEncoder *fse ; ++#endif + PFLAC_PCM pcmtype ; + void* ptr ; + unsigned pos, len, remain ; +@@ -108,6 +121,7 @@ + static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ; + + /* Decoder Callbacks */ ++#ifdef LEGACY_FLAC + static FLAC__SeekableStreamDecoderReadStatus sf_flac_read_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer [], unsigned *bytes, void *client_data) ; + static FLAC__SeekableStreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; + static FLAC__SeekableStreamDecoderTellStatus sf_flac_tell_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; +@@ -116,13 +130,29 @@ + static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ; + static void sf_flac_meta_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ; + static void sf_flac_error_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ; ++#else ++static FLAC__StreamDecoderReadStatus sf_flac_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer [], size_t *bytes, void *client_data) ; ++static FLAC__StreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; ++static FLAC__StreamDecoderTellStatus sf_flac_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; ++static FLAC__StreamDecoderLengthStatus sf_flac_length_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ; ++static FLAC__bool sf_flac_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) ; ++static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ; ++static void sf_flac_meta_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ; ++static void sf_flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ; ++#endif + + /* Encoder Callbacks */ ++#ifdef LEGACY_FLAC + static FLAC__SeekableStreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; + #ifdef HAVE_FLAC_1_1_1 + static FLAC__SeekableStreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; + #endif + static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder *encoder, const FLAC__byte buffer [], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data) ; ++#else ++static FLAC__StreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; ++static FLAC__StreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; ++static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__StreamEncoder *encoder, const FLAC__byte buffer [], size_t bytes, unsigned samples, unsigned current_frame, void *client_data) ; ++#endif + + static const int legal_sample_rates [] = + { 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000 +@@ -283,51 +313,99 @@ + } /* flac_buffer_copy */ + + ++#ifdef LEGACY_FLAC + static FLAC__SeekableStreamDecoderReadStatus + sf_flac_read_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__byte buffer [], unsigned *bytes, void *client_data) ++#else ++static FLAC__StreamDecoderReadStatus ++sf_flac_read_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__byte buffer [], size_t *bytes, void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + *bytes = psf_fread (buffer, 1, *bytes, psf) ; + if (*bytes > 0 && psf->error == 0) ++#ifdef LEGACY_FLAC + return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK ; + + return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR ; ++#else ++ return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE ; ++ ++ return FLAC__STREAM_DECODER_READ_STATUS_ABORT ; ++#endif + } /* sf_flac_read_callback */ + ++#ifdef LEGACY_FLAC + static FLAC__SeekableStreamDecoderSeekStatus + sf_flac_seek_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data) ++#else ++static FLAC__StreamDecoderSeekStatus ++sf_flac_seek_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + psf_fseek (psf, absolute_byte_offset, SEEK_SET) ; + if (psf->error) ++#ifdef LEGACY_FLAC + return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR ; + + return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK ; ++#else ++ return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR ; ++ ++ return FLAC__STREAM_DECODER_SEEK_STATUS_OK ; ++#endif + } /* sf_flac_seek_callback */ + ++#ifdef LEGACY_FLAC + static FLAC__SeekableStreamDecoderTellStatus + sf_flac_tell_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data) ++#else ++static FLAC__StreamDecoderTellStatus ++sf_flac_tell_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + *absolute_byte_offset = psf_ftell (psf) ; + if (psf->error) ++#ifdef LEGACY_FLAC + return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR ; + + return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK ; ++#else ++ return FLAC__STREAM_DECODER_TELL_STATUS_ERROR ; ++ ++ return FLAC__STREAM_DECODER_TELL_STATUS_OK ; ++#endif + } /* sf_flac_tell_callback */ + ++#ifdef LEGACY_FLAC + static FLAC__SeekableStreamDecoderLengthStatus + sf_flac_length_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data) ++#else ++static FLAC__StreamDecoderLengthStatus ++sf_flac_length_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + if ((*stream_length = psf->filelength) == 0) ++#ifdef LEGACY_FLAC + return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR ; + + return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK ; ++#else ++ return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR ; ++ ++ return FLAC__STREAM_DECODER_LENGTH_STATUS_OK ; ++#endif + } /* sf_flac_length_callback */ + + static FLAC__bool ++#ifdef LEGACY_FLAC + sf_flac_eof_callback (const FLAC__SeekableStreamDecoder *UNUSED (decoder), void *client_data) ++#else ++sf_flac_eof_callback (const FLAC__StreamDecoder *UNUSED (decoder), void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + if (psf_ftell (psf) == psf->filelength) +@@ -337,7 +415,11 @@ + } /* sf_flac_eof_callback */ + + static FLAC__StreamDecoderWriteStatus ++#ifdef LEGACY_FLAC + sf_flac_write_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ++#else ++sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ; + +@@ -353,7 +435,11 @@ + } /* sf_flac_write_callback */ + + static void ++#ifdef LEGACY_FLAC + sf_flac_meta_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data) ++#else ++sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + switch (metadata->type) +@@ -387,7 +473,11 @@ + } /* sf_flac_meta_callback */ + + static void ++#ifdef LEGACY_FLAC + sf_flac_error_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data) ++#else ++sf_flac_error_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ; +@@ -407,17 +497,29 @@ + return ; + } /* sf_flac_error_callback */ + ++#ifdef LEGACY_FLAC + static FLAC__SeekableStreamEncoderSeekStatus + sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data) ++#else ++static FLAC__StreamEncoderSeekStatus ++sf_flac_enc_seek_callback (const FLAC__StreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + psf_fseek (psf, absolute_byte_offset, SEEK_SET) ; + if (psf->error) ++#ifdef LEGACY_FLAC + return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_ERROR ; + + return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK ; ++#else ++ return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR ; ++ ++ return FLAC__STREAM_ENCODER_SEEK_STATUS_OK ; ++#endif + } /* sf_flac_enc_seek_callback */ + ++#ifdef LEGACY_FLAC + #ifdef HAVE_FLAC_1_1_1 + static FLAC__SeekableStreamEncoderTellStatus + sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data) +@@ -430,9 +532,25 @@ + return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_OK ; + } /* sf_flac_enc_tell_callback */ + #endif ++#else ++static FLAC__StreamEncoderTellStatus ++sf_flac_enc_tell_callback (const FLAC__StreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data) ++{ SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; ++ ++ *absolute_byte_offset = psf_ftell (psf) ; ++ if (psf->error) ++ return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR ; ++ ++ return FLAC__STREAM_ENCODER_TELL_STATUS_OK ; ++} /* sf_flac_enc_tell_callback */ ++#endif + + static FLAC__StreamEncoderWriteStatus ++#ifdef LEGACY_FLAC + sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], unsigned bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data) ++#else ++sf_flac_enc_write_callback (const FLAC__StreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], size_t bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data) ++#endif + { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; + + if (psf_fwrite (buffer, 1, bytes, psf) == bytes && psf->error == 0) +@@ -509,15 +627,27 @@ + return 0 ; + + if (psf->mode == SFM_WRITE) +- { FLAC__seekable_stream_encoder_finish (pflac->fse) ; ++ { ++#ifdef LEGACY_FLAC ++ FLAC__seekable_stream_encoder_finish (pflac->fse) ; + FLAC__seekable_stream_encoder_delete (pflac->fse) ; ++#else ++ FLAC__stream_encoder_finish (pflac->fse) ; ++ FLAC__stream_encoder_delete (pflac->fse) ; ++#endif + if (pflac->encbuffer) + free (pflac->encbuffer) ; + } ; + + if (psf->mode == SFM_READ) +- { FLAC__seekable_stream_decoder_finish (pflac->fsd) ; ++ { ++#ifdef LEGACY_FLAC ++ FLAC__seekable_stream_decoder_finish (pflac->fsd) ; + FLAC__seekable_stream_decoder_delete (pflac->fsd) ; ++#else ++ FLAC__stream_decoder_finish (pflac->fsd) ; ++ FLAC__stream_decoder_delete (pflac->fsd) ; ++#endif + } ; + + for (k = 0 ; k < ARRAY_LEN (pflac->rbuffer) ; k++) +@@ -546,17 +676,6 @@ + return SFE_FLAC_BAD_SAMPLE_RATE ; + + psf_fseek (psf, 0, SEEK_SET) ; +- if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL) +- return SFE_FLAC_NEW_DECODER ; +- FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ; +- FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ; +- +-#ifdef HAVE_FLAC_1_1_1 +- FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ; +-#endif +- FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ; +- FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ; +- FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ; + + switch (psf->sf.format & SF_FORMAT_SUBMASK) + { case SF_FORMAT_PCM_S8 : +@@ -574,12 +693,36 @@ + break ; + } ; + ++#ifdef LEGACY_FLAC ++ if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL) ++ return SFE_FLAC_NEW_DECODER ; ++ FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ; ++ FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ; ++ ++#ifdef HAVE_FLAC_1_1_1 ++ FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ; ++#endif ++ FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ; ++ FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ; ++ FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ; + FLAC__seekable_stream_encoder_set_bits_per_sample (pflac->fse, bps) ; + + if ((bps = FLAC__seekable_stream_encoder_init (pflac->fse)) != FLAC__SEEKABLE_STREAM_DECODER_OK) + { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__seekable_stream_encoder_get_resolved_state_string (pflac->fse)) ; + return SFE_FLAC_INIT_DECODER ; + } ; ++#else ++ if ((pflac->fse = FLAC__stream_encoder_new ()) == NULL) ++ return SFE_FLAC_NEW_DECODER ; ++ FLAC__stream_encoder_set_channels (pflac->fse, psf->sf.channels) ; ++ FLAC__stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ; ++ FLAC__stream_encoder_set_bits_per_sample (pflac->fse, bps) ; ++ ++ if ((bps = FLAC__stream_encoder_init_stream (pflac->fse, sf_flac_enc_write_callback, sf_flac_enc_seek_callback, sf_flac_enc_tell_callback, NULL, psf)) != FLAC__STREAM_DECODER_INIT_STATUS_OK) ++ { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__StreamEncoderInitStatusString[bps]) ; ++ return SFE_FLAC_INIT_DECODER ; ++ } ; ++#endif + + if (psf->error == 0) + psf->dataoffset = psf_ftell (psf) ; +@@ -593,6 +736,7 @@ + { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ; + + psf_fseek (psf, 0, SEEK_SET) ; ++#ifdef LEGACY_FLAC + if ((pflac->fsd = FLAC__seekable_stream_decoder_new ()) == NULL) + return SFE_FLAC_NEW_DECODER ; + +@@ -610,9 +754,22 @@ + return SFE_FLAC_INIT_DECODER ; + + FLAC__seekable_stream_decoder_process_until_end_of_metadata (pflac->fsd) ; ++#else ++ if ((pflac->fsd = FLAC__stream_decoder_new ()) == NULL) ++ return SFE_FLAC_NEW_DECODER ; ++ ++ if (FLAC__stream_decoder_init_stream (pflac->fsd, sf_flac_read_callback, sf_flac_seek_callback, sf_flac_tell_callback, sf_flac_length_callback, sf_flac_eof_callback, sf_flac_write_callback, sf_flac_meta_callback, sf_flac_error_callback, psf) != FLAC__STREAM_DECODER_INIT_STATUS_OK) ++ return SFE_FLAC_INIT_DECODER ; ++ ++ FLAC__stream_decoder_process_until_end_of_metadata (pflac->fsd) ; ++#endif + if (psf->error == 0) + { FLAC__uint64 position ; ++#ifdef LEGACY_FLAC + FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ; ++#else ++ FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ; ++#endif + psf->dataoffset = position ; + } ; + +@@ -676,10 +833,18 @@ + flac_buffer_copy (psf) ; + + while (pflac->pos < pflac->len) +- { if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0) ++ { ++#ifdef LEGACY_FLAC ++ if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0) + break ; + if (FLAC__seekable_stream_decoder_get_state (pflac->fsd) != FLAC__SEEKABLE_STREAM_DECODER_OK) + break ; ++#else ++ if (FLAC__stream_decoder_process_single (pflac->fsd) == 0) ++ break ; ++ if (FLAC__stream_decoder_get_state (pflac->fsd) >= FLAC__STREAM_DECODER_END_OF_STREAM) ++ break ; ++#endif + } ; + + pflac->ptr = NULL ; +@@ -795,7 +960,11 @@ + while (len > 0) + { writecount = (len >= bufferlen) ? bufferlen : (int) len ; + convert (ptr + total, buffer, writecount) ; ++#ifdef LEGACY_FLAC + if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#else ++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#endif + thiswrite = writecount ; + else + break ; +@@ -837,7 +1006,11 @@ + while (len > 0) + { writecount = (len >= bufferlen) ? bufferlen : (int) len ; + convert (ptr + total, buffer, writecount) ; ++#ifdef LEGACY_FLAC + if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#else ++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#endif + thiswrite = writecount ; + else + break ; +@@ -879,7 +1052,11 @@ + while (len > 0) + { writecount = (len >= bufferlen) ? bufferlen : (int) len ; + convert (ptr + total, buffer, writecount, psf->norm_float) ; ++#ifdef LEGACY_FLAC + if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#else ++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#endif + thiswrite = writecount ; + else + break ; +@@ -1011,7 +1188,11 @@ + while (len > 0) + { writecount = (len >= bufferlen) ? bufferlen : (int) len ; + convert (ptr + total, buffer, writecount, psf->norm_double) ; ++#ifdef LEGACY_FLAC + if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#else ++ if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) ++#endif + thiswrite = writecount ; + else + break ; +@@ -1131,10 +1312,17 @@ + + if (psf->mode == SFM_READ) + { FLAC__uint64 position ; ++#ifdef LEGACY_FLAC + if (FLAC__seekable_stream_decoder_seek_absolute (pflac->fsd, offset)) + { FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ; + return offset ; + } ; ++#else ++ if (FLAC__stream_decoder_seek_absolute (pflac->fsd, offset)) ++ { FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ; ++ return offset ; ++ } ; ++#endif + + return ((sf_count_t) -1) ; + } ; diff -ruN libsndfile-1.0.17/patches/lossy_comp_test-overflow.dpatch libsndfile-1.0.17.new/patches/lossy_comp_test-overflow.dpatch --- libsndfile-1.0.17/patches/lossy_comp_test-overflow.dpatch 1969-12-31 19:00:00.000000000 -0500 +++ libsndfile-1.0.17.new/patches/lossy_comp_test-overflow.dpatch 2008-02-24 21:22:48.000000000 -0500 @@ -0,0 +1,21 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## lossy_comp_test-overflow.dpatch by Martin Michlmayr <[EMAIL PROTECTED]> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Avoid a possible overflow in sum_abs. +## DP: See #362414. + [EMAIL PROTECTED]@ +diff -urNad libsndfile-1.0.17~/tests/lossy_comp_test.c libsndfile-1.0.17/tests/lossy_comp_test.c +--- libsndfile-1.0.17~/tests/lossy_comp_test.c 2006-08-31 11:22:07.000000000 +0200 ++++ libsndfile-1.0.17/tests/lossy_comp_test.c 2007-04-07 10:33:05.000000000 +0200 +@@ -691,7 +691,8 @@ + lcomp_test_int (const char *filename, int filetype, int channels, double margin) + { SNDFILE *file ; + SF_INFO sfinfo ; +- int k, m, *orig, *data, sum_abs ; ++ int k, m, *orig, *data ; ++ long long sum_abs ; + long datalen, seekpos ; + double scale ; + diff -ruN libsndfile-1.0.17/patches/overflow.dpatch libsndfile-1.0.17.new/patches/overflow.dpatch --- libsndfile-1.0.17/patches/overflow.dpatch 1969-12-31 19:00:00.000000000 -0500 +++ libsndfile-1.0.17.new/patches/overflow.dpatch 2008-02-24 21:22:48.000000000 -0500 @@ -0,0 +1,46 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## overflow.dpatch by Samuel Mimram <[EMAIL PROTECTED]> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix a buffer overflow (CVE-2007-4974). See #443386. + [EMAIL PROTECTED]@ +diff -urNad libsndfile-1.0.17~/src/flac.c libsndfile-1.0.17/src/flac.c +--- libsndfile-1.0.17~/src/flac.c 2007-09-20 23:38:16.000000000 +0000 ++++ libsndfile-1.0.17/src/flac.c 2007-09-20 23:38:16.000000000 +0000 +@@ -57,7 +57,7 @@ + ** Private static functions. + */ + +-#define ENC_BUFFER_SIZE 4096 ++#define ENC_BUFFER_SIZE 8192 + + typedef enum + { PFLAC_PCM_SHORT = 0, +@@ -202,6 +202,17 @@ + const FLAC__int32* const *buffer = pflac->wbuffer ; + unsigned i = 0, j, offset ; + ++ /* ++ ** frame->header.blocksize is variable and we're using a constant blocksize ++ ** of FLAC__MAX_BLOCK_SIZE. ++ ** Check our assumptions here. ++ */ ++ if (frame->header.blocksize > FLAC__MAX_BLOCK_SIZE) ++ { psf_log_printf (psf, "Ooops : frame->header.blocksize (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.blocksize, FLAC__MAX_BLOCK_SIZE) ; ++ psf->error = SFE_INTERNAL ; ++ return 0 ; ++ } ; ++ + if (pflac->ptr == NULL) + { /* + ** Not sure why this code is here and not elsewhere. +@@ -210,7 +221,7 @@ + pflac->bufferbackup = SF_TRUE ; + for (i = 0 ; i < frame->header.channels ; i++) + { if (pflac->rbuffer [i] == NULL) +- pflac->rbuffer [i] = calloc (frame->header.blocksize, sizeof (FLAC__int32)) ; ++ pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (FLAC__int32)) ; + memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ; + } ; + pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ; Index: libsndfile1.info =================================================================== RCS file: /cvsroot/fink/dists/10.4/unstable/main/finkinfo/sound/libsndfile1.info,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- libsndfile1.info 24 Feb 2008 22:44:59 -0000 1.11 +++ libsndfile1.info 25 Feb 2008 05:33:17 -0000 1.12 @@ -1,22 +1,31 @@ Package: libsndfile1 -Version: 1.0.18pre20 -Revision: 2 -Maintainer: Matthew Sachs <[EMAIL PROTECTED]> +Version: 1.0.17 +Revision: 4 +Maintainer: None <[EMAIL PROTECTED]> BuildDepends: libflac8-dev Depends: %N-shlibs (= %v-%r) -Source: http://www.mega-nerd.com/tmp/libsndfile-%v.tar.gz -Source-MD5: d96763f5f8161141a68d756f632fac8b +Source: http://www.mega-nerd.com/libsndfile/libsndfile-%v.tar.gz +Source-MD5: 2d126c35448503f6dbe33934d9581f6b +PatchFile: %n.patch +PatchFile-MD5: 076dae1c62c6b92fed47dc6213365e87 +PatchScript: << + #!/bin/sh -ex + patch -p1 < %{PatchFile} + patch -p1 < patches/flac-1.1.4.dpatch + patch -p1 < patches/lossy_comp_test-overflow.dpatch + patch -p1 < patches/overflow.dpatch +<< Conflicts: libsndfile, libsndfile0 Replaces: libsndfile, libsndfile0 NoSetMAKEFLAGS: true SetMAKEFLAGS: -j1 -# patchscript needed when removing --without-octave -# PatchScript: perl -pi -e 's,\$\(OCT_CXXFLAGS\) \$\(INCLUDES\),\$(INCLUDES) \$(OCT_CXXFLAGS),' Octave/Makefile.in -ConfigureParams: --mandir=%p/share/man --disable-dependency-tracking --disable-sqlite --disable-asm-optimizations --without-octave +ConfigureParams: --mandir=%p/share/man --disable-dependency-tracking --disable-sqlite InstallScript: << make install DESTDIR=%d + mkdir -p %i/share/doc/%n/html + cp doc/*.html doc/*.jpg doc/*.css %i/share/doc/%n/html/ << -DocFiles: AUTHORS ChangeLog COPYING NEWS README TODO doc/*.html doc/*.jpg doc/*.css +DocFiles: AUTHORS ChangeLog COPYING NEWS README TODO SplitOff: << Package: %N-shlibs Conflicts: libsndfile-shlibs ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Fink-commits mailing list Fink-commits@lists.sourceforge.net http://news.gmane.org/gmane.os.apple.fink.cvs