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

Reply via email to