[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#859538: unblock: libsndfile/1.0.27-2



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package libsndfile

upstream recently discovered two buffer overruns in the code (handling FLAC and
ID3 files), and promptly rolled out a new release.
the updated Debian package backports these fixes.

since libsndfile is a widely used library for reading soundfiles (e.g. it is a
dependency of the both pulseaudio (the general purpose sound system for
Desktops) and jackd (the sound server for "professional" (studio) use),
i'd consider having the fixed version in stretch a high priority.

thanks for your consideration.

msard
IOhannes


unblock libsndfile/1.0.27-2

-- System Information:
Debian Release: 9.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-2-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
diff -Nru libsndfile-1.0.27/debian/changelog libsndfile-1.0.27/debian/changelog
--- libsndfile-1.0.27/debian/changelog	2016-10-05 22:32:40.000000000 +0200
+++ libsndfile-1.0.27/debian/changelog	2017-04-04 15:33:45.000000000 +0200
@@ -1,3 +1,11 @@
+libsndfile (1.0.27-2) unstable; urgency=medium
+
+  * Backported fixes for buffer-write overflows from 1.0.28.
+    Thanks to Erik de Castro Lopo
+  * Added myself to uploaders
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Tue, 04 Apr 2017 15:33:45 +0200
+
 libsndfile (1.0.27-1) unstable; urgency=low
 
   [ Erik de Castro Lopo ]
diff -Nru libsndfile-1.0.27/debian/control libsndfile-1.0.27/debian/control
--- libsndfile-1.0.27/debian/control	2016-10-05 22:32:40.000000000 +0200
+++ libsndfile-1.0.27/debian/control	2017-04-04 15:33:45.000000000 +0200
@@ -2,6 +2,8 @@
 Section: devel
 Priority: optional
 Maintainer: Erik de Castro Lopo <erikd@mega-nerd.com>
+Uploaders:
+ IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>,
 Build-Depends: debhelper (>= 8.1.3), pkg-config, dh-autoreconf,
  libvorbis-dev (>= 1.2.3), libflac-dev (>= 1.1.4-3),
  libasound2-dev [linux-any]
diff -Nru libsndfile-1.0.27/debian/patches/fix_bufferoverflows.patch libsndfile-1.0.27/debian/patches/fix_bufferoverflows.patch
--- libsndfile-1.0.27/debian/patches/fix_bufferoverflows.patch	1970-01-01 01:00:00.000000000 +0100
+++ libsndfile-1.0.27/debian/patches/fix_bufferoverflows.patch	2017-04-04 15:33:45.000000000 +0200
@@ -0,0 +1,570 @@
+Description: fixes buffer write overflows
+Author: Erik de Castro Lopo
+Origin: upstream
+Applied-Upstream: 1.0.28
+Reviewed-by: IOhannes m zmölnig
+Last-Update: 2017-04-03
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- libsndfile.orig/src/id3.c
++++ libsndfile/src/id3.c
+@@ -1,5 +1,5 @@
+ /*
+-** Copyright (C) 2010-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
++** Copyright (C) 2010-2017 Erik de Castro Lopo <erikd@mega-nerd.com>
+ **
+ ** This program is free software; you can redistribute it and/or modify
+ ** it under the terms of the GNU Lesser General Public License as published by
+@@ -48,9 +48,11 @@
+ 
+ 		/* Calculate new file offset and position ourselves there. */
+ 		psf->fileoffset += offset + 10 ;
+-		psf_binheader_readf (psf, "p", psf->fileoffset) ;
+ 
+-		return 1 ;
++		if (psf->fileoffset < psf->filelength)
++		{	psf_binheader_readf (psf, "p", psf->fileoffset) ;
++			return 1 ;
++			} ;
+ 		} ;
+ 
+ 	return 0 ;
+--- libsndfile.orig/src/flac.c
++++ libsndfile/src/flac.c
+@@ -61,10 +61,10 @@
+ 
+ 	FLAC__StreamMetadata *metadata ;
+ 
+-	const FLAC__int32 * const * wbuffer ;
+-	FLAC__int32 * rbuffer [FLAC__MAX_CHANNELS] ;
++	const int32_t * const * wbuffer ;
++	int32_t * rbuffer [FLAC__MAX_CHANNELS] ;
+ 
+-	FLAC__int32* encbuffer ;
++	int32_t* encbuffer ;
+ 	unsigned bufferpos ;
+ 
+ 	const FLAC__Frame *frame ;
+@@ -95,18 +95,18 @@
+ static sf_count_t	flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
+ static sf_count_t	flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
+ 
+-static void		f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
+-static void		d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
++static void		f2flac8_array (const float *src, int32_t *dest, int count, int normalize) ;
++static void		f2flac16_array (const float *src, int32_t *dest, int count, int normalize) ;
++static void		f2flac24_array (const float *src, int32_t *dest, int count, int normalize) ;
++static void		f2flac8_clip_array (const float *src, int32_t *dest, int count, int normalize) ;
++static void		f2flac16_clip_array (const float *src, int32_t *dest, int count, int normalize) ;
++static void		f2flac24_clip_array (const float *src, int32_t *dest, int count, int normalize) ;
++static void		d2flac8_array (const double *src, int32_t *dest, int count, int normalize) ;
++static void		d2flac16_array (const double *src, int32_t *dest, int count, int normalize) ;
++static void		d2flac24_array (const double *src, int32_t *dest, int count, int normalize) ;
++static void		d2flac8_clip_array (const double *src, int32_t *dest, int count, int normalize) ;
++static void		d2flac16_clip_array (const double *src, int32_t *dest, int count, int normalize) ;
++static void		d2flac24_clip_array (const double *src, int32_t *dest, int count, int normalize) ;
+ 
+ static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
+ 
+@@ -116,7 +116,7 @@
+ 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 FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const int32_t * 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) ;
+ 
+@@ -126,38 +126,38 @@
+ 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) ;
+ 
+ static void
+-s2flac8_array (const short *src, FLAC__int32 *dest, int count)
++s2flac8_array (const short *src, int32_t *dest, int count)
+ {	while (--count >= 0)
+ 		dest [count] = src [count] >> 8 ;
+ } /* s2flac8_array */
+ 
+ static void
+-s2flac16_array (const short *src, FLAC__int32 *dest, int count)
++s2flac16_array (const short *src, int32_t *dest, int count)
+ {	while (--count >= 0)
+ 		dest [count] = src [count] ;
+ } /* s2flac16_array */
+ 
+ static void
+-s2flac24_array (const short *src, FLAC__int32 *dest, int count)
++s2flac24_array (const short *src, int32_t *dest, int count)
+ {	while (--count >= 0)
+ 		dest [count] = src [count] << 8 ;
+ } /* s2flac24_array */
+ 
+ static void
+-i2flac8_array (const int *src, FLAC__int32 *dest, int count)
++i2flac8_array (const int *src, int32_t *dest, int count)
+ {	while (--count >= 0)
+ 		dest [count] = src [count] >> 24 ;
+ } /* i2flac8_array */
+ 
+ static void
+-i2flac16_array (const int *src, FLAC__int32 *dest, int count)
++i2flac16_array (const int *src, int32_t *dest, int count)
+ {
+ 	while (--count >= 0)
+ 		dest [count] = src [count] >> 16 ;
+ } /* i2flac16_array */
+ 
+ static void
+-i2flac24_array (const int *src, FLAC__int32 *dest, int count)
++i2flac24_array (const int *src, int32_t *dest, int count)
+ {	while (--count >= 0)
+ 		dest [count] = src [count] >> 8 ;
+ } /* i2flac24_array */
+@@ -166,8 +166,8 @@
+ flac_buffer_copy (SF_PRIVATE *psf)
+ {	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+ 	const FLAC__Frame *frame = pflac->frame ;
+-	const FLAC__int32* const *buffer = pflac->wbuffer ;
+-	unsigned i = 0, j, offset ;
++	const int32_t* const *buffer = pflac->wbuffer ;
++	unsigned i = 0, j, offset, channels, len ;
+ 
+ 	/*
+ 	**	frame->header.blocksize is variable and we're using a constant blocksize
+@@ -180,53 +180,67 @@
+ 		return 0 ;
+ 		} ;
+ 
++	if (frame->header.channels > FLAC__MAX_CHANNELS)
++		psf_log_printf (psf, "Ooops : frame->header.channels (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.channels, FLAC__MAX_CHANNELS) ;
++
++	channels = SF_MIN (frame->header.channels, FLAC__MAX_CHANNELS) ;
++
+ 	if (pflac->ptr == NULL)
+ 	{	/*
+ 		**	Not sure why this code is here and not elsewhere.
+ 		**	Removing it causes valgrind errors.
+ 		*/
+ 		pflac->bufferbackup = SF_TRUE ;
+-		for (i = 0 ; i < frame->header.channels ; i++)
++		for (i = 0 ; i < channels ; i++)
+ 		{
+ 			if (pflac->rbuffer [i] == NULL)
+-				pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (FLAC__int32)) ;
++				pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (int32_t)) ;
+ 
+-			memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ;
++			memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (int32_t)) ;
+ 			} ;
+-		pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ;
++		pflac->wbuffer = (const int32_t* const*) pflac->rbuffer ;
+ 
+ 		return 0 ;
+ 		} ;
+ 
++
++	len = SF_MIN (pflac->len, frame->header.blocksize) ;
++
+ 	switch (pflac->pcmtype)
+ 	{	case PFLAC_PCM_SHORT :
+ 			{	short *retpcm = (short*) pflac->ptr ;
+ 				int shift = 16 - frame->header.bits_per_sample ;
+ 				if (shift < 0)
+ 				{	shift = abs (shift) ;
+-					for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
+-					{	offset = pflac->pos + i * frame->header.channels ;
++					for (i = 0 ; i < len && pflac->remain > 0 ; i++)
++					{	offset = pflac->pos + i * channels ;
+ 
+ 						if (pflac->bufferpos >= frame->header.blocksize)
+ 							break ;
+ 
+-						for (j = 0 ; j < frame->header.channels ; j++)
++						if (offset + channels > pflac->len)
++							break ;
++
++						for (j = 0 ; j < channels ; j++)
+ 							retpcm [offset + j] = buffer [j][pflac->bufferpos] >> shift ;
+-						pflac->remain -= frame->header.channels ;
++						pflac->remain -= channels ;
+ 						pflac->bufferpos++ ;
+ 						}
+ 					}
+ 				else
+-				{	for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
+-					{	offset = pflac->pos + i * frame->header.channels ;
++				{	for (i = 0 ; i < len && pflac->remain > 0 ; i++)
++					{	offset = pflac->pos + i * channels ;
+ 
+ 						if (pflac->bufferpos >= frame->header.blocksize)
+ 							break ;
+ 
+-						for (j = 0 ; j < frame->header.channels ; j++)
++						if (offset + channels > pflac->len)
++							break ;
++
++						for (j = 0 ; j < channels ; j++)
+ 							retpcm [offset + j] = ((uint16_t) buffer [j][pflac->bufferpos]) << shift ;
+ 
+-						pflac->remain -= frame->header.channels ;
++						pflac->remain -= channels ;
+ 						pflac->bufferpos++ ;
+ 						} ;
+ 					} ;
+@@ -236,15 +250,18 @@
+ 		case PFLAC_PCM_INT :
+ 			{	int *retpcm = (int*) pflac->ptr ;
+ 				int shift = 32 - frame->header.bits_per_sample ;
+-				for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
+-				{	offset = pflac->pos + i * frame->header.channels ;
++				for (i = 0 ; i < len && pflac->remain > 0 ; i++)
++				{	offset = pflac->pos + i * channels ;
+ 
+ 					if (pflac->bufferpos >= frame->header.blocksize)
+ 						break ;
+ 
+-					for (j = 0 ; j < frame->header.channels ; j++)
++					if (offset + channels > pflac->len)
++						break ;
++
++					for (j = 0 ; j < channels ; j++)
+ 						retpcm [offset + j] = ((uint32_t) buffer [j][pflac->bufferpos]) << shift ;
+-					pflac->remain -= frame->header.channels ;
++					pflac->remain -= channels ;
+ 					pflac->bufferpos++ ;
+ 					} ;
+ 				} ;
+@@ -254,15 +271,18 @@
+ 			{	float *retpcm = (float*) pflac->ptr ;
+ 				float norm = (psf->norm_float == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
+ 
+-				for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
+-				{	offset = pflac->pos + i * frame->header.channels ;
++				for (i = 0 ; i < len && pflac->remain > 0 ; i++)
++				{	offset = pflac->pos + i * channels ;
+ 
+ 					if (pflac->bufferpos >= frame->header.blocksize)
+ 						break ;
+ 
+-					for (j = 0 ; j < frame->header.channels ; j++)
++					if (offset + channels > pflac->len)
++						break ;
++
++					for (j = 0 ; j < channels ; j++)
+ 						retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ;
+-					pflac->remain -= frame->header.channels ;
++					pflac->remain -= channels ;
+ 					pflac->bufferpos++ ;
+ 					} ;
+ 				} ;
+@@ -272,15 +292,18 @@
+ 			{	double *retpcm = (double*) pflac->ptr ;
+ 				double norm = (psf->norm_double == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
+ 
+-				for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
+-				{	offset = pflac->pos + i * frame->header.channels ;
++				for (i = 0 ; i < len && pflac->remain > 0 ; i++)
++				{	offset = pflac->pos + i * channels ;
+ 
+ 					if (pflac->bufferpos >= frame->header.blocksize)
+ 						break ;
+ 
+-					for (j = 0 ; j < frame->header.channels ; j++)
++					if (offset + channels > pflac->len)
++						break ;
++
++					for (j = 0 ; j < channels ; j++)
+ 						retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ;
+-					pflac->remain -= frame->header.channels ;
++					pflac->remain -= channels ;
+ 					pflac->bufferpos++ ;
+ 					} ;
+ 				} ;
+@@ -290,8 +313,8 @@
+ 			return 0 ;
+ 		} ;
+ 
+-	offset = i * frame->header.channels ;
+-	pflac->pos += i * frame->header.channels ;
++	offset = i * channels ;
++	pflac->pos += i * channels ;
+ 
+ 	return offset ;
+ } /* flac_buffer_copy */
+@@ -351,7 +374,7 @@
+ } /* sf_flac_eof_callback */
+ 
+ static FLAC__StreamDecoderWriteStatus
+-sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data)
++sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const int32_t * const buffer [], void *client_data)
+ {	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+ 	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+ 
+@@ -368,7 +391,7 @@
+ 
+ static void
+ sf_flac_meta_get_vorbiscomments (SF_PRIVATE *psf, const FLAC__StreamMetadata *metadata)
+-{	FLAC_TAG tags [] =
++{	static FLAC_TAG tags [] =
+ 	{ 	{ "title", SF_STR_TITLE },
+ 		{ "copyright", SF_STR_COPYRIGHT },
+ 		{ "software", SF_STR_SOFTWARE },
+@@ -404,7 +427,8 @@
+ static void
+ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
+ {	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
+-	int bitwidth = 0 ;
++	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
++	int bitwidth = 0, i ;
+ 
+ 	switch (metadata->type)
+ 	{	case FLAC__METADATA_TYPE_STREAMINFO :
+@@ -441,6 +465,12 @@
+ 
+ 			if (bitwidth > 0)
+ 				psf_log_printf (psf, "  Bit width   : %d\n", bitwidth) ;
++
++
++			for (i = 0 ; i < psf->sf.channels ; i++)
++				pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (int32_t)) ;
++
++			pflac->wbuffer = (const int32_t* const*) pflac->rbuffer ;
+ 			break ;
+ 
+ 		case FLAC__METADATA_TYPE_VORBIS_COMMENT :
+@@ -617,7 +647,7 @@
+ 
+ 	if (psf->error == 0)
+ 		psf->dataoffset = psf_ftell (psf) ;
+-	pflac->encbuffer = calloc (ENC_BUFFER_SIZE, sizeof (FLAC__int32)) ;
++	pflac->encbuffer = calloc (ENC_BUFFER_SIZE, sizeof (int32_t)) ;
+ 
+ 	return psf->error ;
+ } /* flac_write_header */
+@@ -880,9 +910,12 @@
+ 	pflac->pos = 0 ;
+ 	pflac->len = len ;
+ 	pflac->remain = len ;
++
++	/* First copy data that has already been decoded and buffered. */
+ 	if (pflac->frame != NULL && pflac->bufferpos < pflac->frame->header.blocksize)
+ 		flac_buffer_copy (psf) ;
+ 
++	/* Decode some more. */
+ 	while (pflac->pos < pflac->len)
+ 	{	if (FLAC__stream_decoder_process_single (pflac->fsd) == 0)
+ 			break ;
+@@ -966,6 +999,7 @@
+ 	while (total < len)
+ 	{	pflac->ptr = ptr + total ;
+ 		readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
++
+ 		current = flac_read_loop (psf, readlen) ;
+ 		if (current == 0)
+ 			break ;
+@@ -978,10 +1012,10 @@
+ static sf_count_t
+ flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
+ {	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+-	void (*convert) (const short *, FLAC__int32 *, int) ;
++	void (*convert) (const short *, int32_t *, int) ;
+ 	int bufferlen, writecount, thiswrite ;
+ 	sf_count_t	total = 0 ;
+-	FLAC__int32* buffer = pflac->encbuffer ;
++	int32_t* buffer = pflac->encbuffer ;
+ 
+ 	switch (SF_CODEC (psf->sf.format))
+ 	{	case SF_FORMAT_PCM_S8 :
+@@ -997,7 +1031,7 @@
+ 			return -1 ;
+ 		} ;
+ 
+-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
++	bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
+ 	bufferlen *= psf->sf.channels ;
+ 
+ 	while (len > 0)
+@@ -1020,10 +1054,10 @@
+ static sf_count_t
+ flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
+ {	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+-	void (*convert) (const int *, FLAC__int32 *, int) ;
++	void (*convert) (const int *, int32_t *, int) ;
+ 	int bufferlen, writecount, thiswrite ;
+ 	sf_count_t	total = 0 ;
+-	FLAC__int32* buffer = pflac->encbuffer ;
++	int32_t* buffer = pflac->encbuffer ;
+ 
+ 	switch (SF_CODEC (psf->sf.format))
+ 	{	case SF_FORMAT_PCM_S8 :
+@@ -1039,7 +1073,7 @@
+ 			return -1 ;
+ 		} ;
+ 
+-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
++	bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
+ 	bufferlen *= psf->sf.channels ;
+ 
+ 	while (len > 0)
+@@ -1062,10 +1096,10 @@
+ static sf_count_t
+ flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
+ {	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+-	void (*convert) (const float *, FLAC__int32 *, int, int) ;
++	void (*convert) (const float *, int32_t *, int, int) ;
+ 	int bufferlen, writecount, thiswrite ;
+ 	sf_count_t	total = 0 ;
+-	FLAC__int32* buffer = pflac->encbuffer ;
++	int32_t* buffer = pflac->encbuffer ;
+ 
+ 	switch (SF_CODEC (psf->sf.format))
+ 	{	case SF_FORMAT_PCM_S8 :
+@@ -1081,7 +1115,7 @@
+ 			return -1 ;
+ 		} ;
+ 
+-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
++	bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
+ 	bufferlen *= psf->sf.channels ;
+ 
+ 	while (len > 0)
+@@ -1102,7 +1136,7 @@
+ } /* flac_write_f2flac */
+ 
+ static void
+-f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
++f2flac8_clip_array (const float *src, int32_t *dest, int count, int normalize)
+ {	float normfact, scaled_value ;
+ 
+ 	normfact = normalize ? (8.0 * 0x10) : 1.0 ;
+@@ -1124,7 +1158,7 @@
+ } /* f2flac8_clip_array */
+ 
+ static void
+-f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
++f2flac16_clip_array (const float *src, int32_t *dest, int count, int normalize)
+ {	float normfact, scaled_value ;
+ 
+ 	normfact = normalize ? (8.0 * 0x1000) : 1.0 ;
+@@ -1144,7 +1178,7 @@
+ } /* f2flac16_clip_array */
+ 
+ static void
+-f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
++f2flac24_clip_array (const float *src, int32_t *dest, int count, int normalize)
+ {	float normfact, scaled_value ;
+ 
+ 	normfact = normalize ? (8.0 * 0x100000) : 1.0 ;
+@@ -1167,7 +1201,7 @@
+ } /* f2flac24_clip_array */
+ 
+ static void
+-f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize)
++f2flac8_array (const float *src, int32_t *dest, int count, int normalize)
+ {	float normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
+ 
+ 	while (--count >= 0)
+@@ -1175,7 +1209,7 @@
+ } /* f2flac8_array */
+ 
+ static void
+-f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize)
++f2flac16_array (const float *src, int32_t *dest, int count, int normalize)
+ {	float normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
+ 
+ 	while (--count >= 0)
+@@ -1183,7 +1217,7 @@
+ } /* f2flac16_array */
+ 
+ static void
+-f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize)
++f2flac24_array (const float *src, int32_t *dest, int count, int normalize)
+ {	float normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
+ 
+ 	while (--count >= 0)
+@@ -1193,10 +1227,10 @@
+ static sf_count_t
+ flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
+ {	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
+-	void (*convert) (const double *, FLAC__int32 *, int, int) ;
++	void (*convert) (const double *, int32_t *, int, int) ;
+ 	int bufferlen, writecount, thiswrite ;
+ 	sf_count_t	total = 0 ;
+-	FLAC__int32* buffer = pflac->encbuffer ;
++	int32_t* buffer = pflac->encbuffer ;
+ 
+ 	switch (SF_CODEC (psf->sf.format))
+ 	{	case SF_FORMAT_PCM_S8 :
+@@ -1212,7 +1246,7 @@
+ 			return -1 ;
+ 		} ;
+ 
+-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
++	bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
+ 	bufferlen *= psf->sf.channels ;
+ 
+ 	while (len > 0)
+@@ -1233,7 +1267,7 @@
+ } /* flac_write_d2flac */
+ 
+ static void
+-d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
++d2flac8_clip_array (const double *src, int32_t *dest, int count, int normalize)
+ {	double normfact, scaled_value ;
+ 
+ 	normfact = normalize ? (8.0 * 0x10) : 1.0 ;
+@@ -1255,7 +1289,7 @@
+ } /* d2flac8_clip_array */
+ 
+ static void
+-d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
++d2flac16_clip_array (const double *src, int32_t *dest, int count, int normalize)
+ {	double normfact, scaled_value ;
+ 
+ 	normfact = normalize ? (8.0 * 0x1000) : 1.0 ;
+@@ -1277,7 +1311,7 @@
+ } /* d2flac16_clip_array */
+ 
+ static void
+-d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
++d2flac24_clip_array (const double *src, int32_t *dest, int count, int normalize)
+ {	double normfact, scaled_value ;
+ 
+ 	normfact = normalize ? (8.0 * 0x100000) : 1.0 ;
+@@ -1299,7 +1333,7 @@
+ } /* d2flac24_clip_array */
+ 
+ static void
+-d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize)
++d2flac8_array (const double *src, int32_t *dest, int count, int normalize)
+ {	double normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
+ 
+ 	while (--count >= 0)
+@@ -1307,7 +1341,7 @@
+ } /* d2flac8_array */
+ 
+ static void
+-d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize)
++d2flac16_array (const double *src, int32_t *dest, int count, int normalize)
+ {	double normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
+ 
+ 	while (--count >= 0)
+@@ -1315,7 +1349,7 @@
+ } /* d2flac16_array */
+ 
+ static void
+-d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize)
++d2flac24_array (const double *src, int32_t *dest, int count, int normalize)
+ {	double normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
+ 
+ 	while (--count >= 0)
diff -Nru libsndfile-1.0.27/debian/patches/series libsndfile-1.0.27/debian/patches/series
--- libsndfile-1.0.27/debian/patches/series	2016-10-05 22:32:40.000000000 +0200
+++ libsndfile-1.0.27/debian/patches/series	2017-04-04 15:33:45.000000000 +0200
@@ -1 +1,2 @@
+fix_bufferoverflows.patch
 fix_typos.patch

Reply to: