mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 01:26:58 +00:00
libsndfile: update to 1.0.19 (LBSNDF-7)
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-0186 http://www.mega-nerd.com/libsndfile/libsndfile-1.0.19.tar.gz This will likely require a fresh boostrap to updated source checkouts. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13415 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
** Copyright (C) 2001-2005 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
** Copyright (C) 2001-2009 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 General Public License as published by
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <math.h>
|
||||
@@ -45,9 +46,10 @@
|
||||
#define BUFFER_LEN (1<<10)
|
||||
#define LOG_BUFFER_SIZE 1024
|
||||
|
||||
static void zero_data_test (const char *filename, int typemajor) ;
|
||||
static void filesystem_full_test (int typemajor) ;
|
||||
static void zero_data_test (const char *filename, int format) ;
|
||||
static void filesystem_full_test (int format) ;
|
||||
static void permission_test (const char *filename, int typemajor) ;
|
||||
static void wavex_amb_test (const char *filename) ;
|
||||
|
||||
int
|
||||
main (int argc, char *argv [])
|
||||
@@ -66,117 +68,139 @@ main (int argc, char *argv [])
|
||||
do_all=!strcmp (argv [1], "all") ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "wav"))
|
||||
{ zero_data_test ("zerolen.wav", SF_FORMAT_WAV) ;
|
||||
filesystem_full_test (SF_FORMAT_WAV) ;
|
||||
{ zero_data_test ("zerolen.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.wav", SF_FORMAT_WAV) ;
|
||||
wavex_amb_test ("ambisonic.wav") ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "aiff"))
|
||||
{ zero_data_test ("zerolen.aiff", SF_FORMAT_AIFF) ;
|
||||
filesystem_full_test (SF_FORMAT_AIFF) ;
|
||||
{ zero_data_test ("zerolen.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.aiff", SF_FORMAT_AIFF) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "au"))
|
||||
{ zero_data_test ("zerolen.au", SF_FORMAT_AU) ;
|
||||
filesystem_full_test (SF_FORMAT_AU) ;
|
||||
{ zero_data_test ("zerolen.au", SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.au", SF_FORMAT_AU) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "caf"))
|
||||
{ zero_data_test ("zerolen.caf", SF_FORMAT_CAF) ;
|
||||
filesystem_full_test (SF_FORMAT_CAF) ;
|
||||
{ zero_data_test ("zerolen.caf", SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.caf", SF_FORMAT_CAF) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "svx"))
|
||||
{ zero_data_test ("zerolen.svx", SF_FORMAT_SVX) ;
|
||||
filesystem_full_test (SF_FORMAT_SVX) ;
|
||||
{ zero_data_test ("zerolen.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.svx", SF_FORMAT_SVX) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "nist"))
|
||||
{ zero_data_test ("zerolen.nist", SF_FORMAT_NIST) ;
|
||||
filesystem_full_test (SF_FORMAT_NIST) ;
|
||||
{ zero_data_test ("zerolen.nist", SF_FORMAT_NIST | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_NIST | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.nist", SF_FORMAT_NIST) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "paf"))
|
||||
{ zero_data_test ("zerolen.paf", SF_FORMAT_PAF) ;
|
||||
filesystem_full_test (SF_FORMAT_PAF) ;
|
||||
{ zero_data_test ("zerolen.paf", SF_FORMAT_PAF | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_PAF | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.paf", SF_FORMAT_PAF) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "ircam"))
|
||||
{ zero_data_test ("zerolen.ircam", SF_FORMAT_IRCAM) ;
|
||||
filesystem_full_test (SF_FORMAT_IRCAM) ;
|
||||
{ zero_data_test ("zerolen.ircam", SF_FORMAT_IRCAM | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_IRCAM | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.ircam", SF_FORMAT_IRCAM) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "voc"))
|
||||
{ zero_data_test ("zerolen.voc", SF_FORMAT_VOC) ;
|
||||
filesystem_full_test (SF_FORMAT_VOC) ;
|
||||
{ zero_data_test ("zerolen.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_VOC | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.voc", SF_FORMAT_VOC) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "w64"))
|
||||
{ zero_data_test ("zerolen.w64", SF_FORMAT_W64) ;
|
||||
filesystem_full_test (SF_FORMAT_W64) ;
|
||||
{ zero_data_test ("zerolen.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.w64", SF_FORMAT_W64) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "rf64"))
|
||||
{ zero_data_test ("zerolen.rf64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.rf64", SF_FORMAT_W64) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "mat4"))
|
||||
{ zero_data_test ("zerolen.mat4", SF_FORMAT_MAT4) ;
|
||||
filesystem_full_test (SF_FORMAT_MAT4) ;
|
||||
{ zero_data_test ("zerolen.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.mat4", SF_FORMAT_MAT4) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "mat5"))
|
||||
{ zero_data_test ("zerolen.mat5", SF_FORMAT_MAT5) ;
|
||||
filesystem_full_test (SF_FORMAT_MAT5) ;
|
||||
{ zero_data_test ("zerolen.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.mat5", SF_FORMAT_MAT5) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "pvf"))
|
||||
{ zero_data_test ("zerolen.pvf", SF_FORMAT_PVF) ;
|
||||
filesystem_full_test (SF_FORMAT_PVF) ;
|
||||
{ zero_data_test ("zerolen.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_PVF | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.pvf", SF_FORMAT_PVF) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "htk"))
|
||||
{ zero_data_test ("zerolen.htk", SF_FORMAT_HTK) ;
|
||||
filesystem_full_test (SF_FORMAT_HTK) ;
|
||||
{ zero_data_test ("zerolen.htk", SF_FORMAT_HTK | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_HTK | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.htk", SF_FORMAT_HTK) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "avr"))
|
||||
{ zero_data_test ("zerolen.avr", SF_FORMAT_AVR) ;
|
||||
filesystem_full_test (SF_FORMAT_AVR) ;
|
||||
{ zero_data_test ("zerolen.avr", SF_FORMAT_AVR | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_AVR | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.avr", SF_FORMAT_AVR) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "sds"))
|
||||
{ zero_data_test ("zerolen.sds", SF_FORMAT_SDS) ;
|
||||
filesystem_full_test (SF_FORMAT_SDS) ;
|
||||
{ zero_data_test ("zerolen.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.sds", SF_FORMAT_SDS) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "mpc2k"))
|
||||
{ zero_data_test ("zerolen.mpc", SF_FORMAT_MPC2K | SF_FORMAT_PCM_16) ;
|
||||
filesystem_full_test (SF_FORMAT_MPC2K | SF_FORMAT_PCM_16) ;
|
||||
permission_test ("readonly.mpc", SF_FORMAT_MPC2K) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (do_all || ! strcmp (argv [1], "ogg"))
|
||||
{ zero_data_test ("zerolen.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;
|
||||
/*-filesystem_full_test (SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;-*/
|
||||
permission_test ("readonly.oga", SF_FORMAT_OGG) ;
|
||||
test_count++ ;
|
||||
} ;
|
||||
|
||||
if (test_count == 0)
|
||||
{ printf ("Mono : ************************************\n") ;
|
||||
printf ("Mono : * No '%s' test defined.\n", argv [1]) ;
|
||||
@@ -193,15 +217,24 @@ main (int argc, char *argv [])
|
||||
*/
|
||||
|
||||
static void
|
||||
zero_data_test (const char *filename, int typemajor)
|
||||
zero_data_test (const char *filename, int format)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
int frames ;
|
||||
|
||||
switch (format & SF_FORMAT_TYPEMASK)
|
||||
{ case SF_FORMAT_OGG :
|
||||
if (HAVE_EXTERNAL_LIBS == 0)
|
||||
return ;
|
||||
break ;
|
||||
default :
|
||||
break ;
|
||||
} ;
|
||||
|
||||
print_test_name ("zero_data_test", filename) ;
|
||||
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
|
||||
sfinfo.format = format ;
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.frames = 0 ;
|
||||
|
||||
@@ -222,7 +255,7 @@ zero_data_test (const char *filename, int typemajor)
|
||||
} /* zero_data_test */
|
||||
|
||||
static void
|
||||
filesystem_full_test (int typemajor)
|
||||
filesystem_full_test (int format)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
struct stat buf ;
|
||||
@@ -235,6 +268,9 @@ filesystem_full_test (int typemajor)
|
||||
return ;
|
||||
#endif
|
||||
|
||||
/* Make sure errno is zero before doing anything else. */
|
||||
errno = 0 ;
|
||||
|
||||
print_test_name ("filesystem_full_test", filename) ;
|
||||
|
||||
if (stat (filename, &buf) != 0)
|
||||
@@ -248,7 +284,7 @@ filesystem_full_test (int typemajor)
|
||||
} ;
|
||||
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
|
||||
sfinfo.format = format ;
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.frames = 0 ;
|
||||
|
||||
@@ -287,6 +323,9 @@ permission_test (const char *filename, int typemajor)
|
||||
const char *errorstr ;
|
||||
int frames ;
|
||||
|
||||
/* Make sure errno is zero before doing anything else. */
|
||||
errno = 0 ;
|
||||
|
||||
if (getuid () == 0)
|
||||
{ /* If running as root bypass this test.
|
||||
** Root is allowed to open a readonly file for write.
|
||||
@@ -296,6 +335,11 @@ permission_test (const char *filename, int typemajor)
|
||||
|
||||
print_test_name ("permission_test", filename) ;
|
||||
|
||||
if (access (filename, F_OK) == 0)
|
||||
{ chmod (filename, S_IWUSR) ;
|
||||
unlink (filename) ;
|
||||
} ;
|
||||
|
||||
if ((textfile = fopen (filename, "w")) == NULL)
|
||||
{ printf ("\n\nLine %d : not able to open text file for write.\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
@@ -344,10 +388,37 @@ permission_test (const char *filename, int typemajor)
|
||||
#endif
|
||||
} /* permission_test */
|
||||
|
||||
/*
|
||||
** Do not edit or modify anything in this comment block.
|
||||
** The arch-tag line is a file identity tag for the GNU Arch
|
||||
** revision control system.
|
||||
**
|
||||
** arch-tag: efc6c227-8881-4a1d-8680-0d1255975267
|
||||
*/
|
||||
static void
|
||||
wavex_amb_test (const char *filename)
|
||||
{ static short buffer [800] ;
|
||||
SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
sf_count_t frames ;
|
||||
|
||||
print_test_name (__func__, filename) ;
|
||||
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.format = SF_FORMAT_WAVEX | SF_FORMAT_PCM_16 ;
|
||||
sfinfo.channels = 4 ;
|
||||
|
||||
frames = ARRAY_LEN (buffer) / sfinfo.channels ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
sf_command (file, SFC_WAVEX_SET_AMBISONIC, NULL, SF_AMBISONIC_B_FORMAT) ;
|
||||
test_writef_short_or_die (file, 0, buffer, frames, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
|
||||
exit_if_true (
|
||||
sf_command (file, SFC_WAVEX_GET_AMBISONIC, NULL, 0) != SF_AMBISONIC_B_FORMAT,
|
||||
"\n\nLine %d : Error, this file should be in Ambisonic B format.\n", __LINE__
|
||||
) ;
|
||||
|
||||
sf_close (file) ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* wavex_amb_test */
|
||||
|
Reference in New Issue
Block a user