diff --git a/binpatch.py b/binpatch.py new file mode 100644 index 0000000000000000000000000000000000000000..ab67fdf38b50d4ee53489de516c5a8f8aca4a0d1 --- /dev/null +++ b/binpatch.py @@ -0,0 +1,52 @@ +import sys + +OLD_PATH = b"/usr/lib/sox\x00" +NEW_PATH = b"/var/tmp/sox\x00" +OUT_PATH = "/var/tmp/sox\n" +OLD64_PATH = b"/usr/lib64/sox\x00" +NEW64_PATH = b"/var/tmp/l/sox\x00" +OUT64_PATH = "/var/tmp/l/sox\n" + +assert len(OLD_PATH) == len(NEW_PATH) +assert len(OLD64_PATH) == len(NEW64_PATH) + +argv = sys.argv +wout = sys.stdout.write +werr = sys.stderr.write +bye = sys.exit + +def p(m, *args): + werr(m % args) + +def usage(): + p("Usage: %s \n", argv[0]) + +def error(et): + def ef(): + p("%s: %r cannot be binary patched [%s]\n", argv[0], argv[1], et) + return ef + +def check(c, p): + if not c: + p() + bye(1) + +check(len(argv) == 2, usage) + +s = b"" +o = "" +with open(argv[1], 'rb') as f: + s = f.read() +if s.count(OLD_PATH) == 1: + check(s.count(OLD64_PATH) == 0, error("OLD64_PATH")) + s = s.replace(OLD_PATH, NEW_PATH) + o = OUT_PATH +elif s.count(OLD64_PATH) == 1: + check(s.count(OLD_PATH) == 0, error("OLD_PATH")) + s = s.replace(OLD64_PATH, NEW64_PATH) + o = OUT64_PATH +else: + check(False, error("OLD_PATH/OLD64_PATH")) +with open(argv[1], 'wb') as f: + f.write(s) +wout(o) diff --git a/sox-14.4.2-bug_1226675_fix.patch b/sox-14.4.2-bug_1226675_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..c4279f5033ca4ed987d0122c4c30bb4c3bcaedc9 --- /dev/null +++ b/sox-14.4.2-bug_1226675_fix.patch @@ -0,0 +1,49 @@ +diff --git a/src/ao.c b/src/ao.c +index 4791d4e..3d6431d 100644 +--- a/src/ao.c ++++ b/src/ao.c +@@ -34,9 +34,21 @@ typedef struct { + static int startwrite(sox_format_t * ft) + { + priv_t * ao = (priv_t *)ft->priv; ++ unsigned bytes_per_sample = (ft->encoding.bits_per_sample + 7) >> 3; + +- ao->buf_size = sox_globals.bufsiz - (sox_globals.bufsiz % (ft->encoding.bits_per_sample >> 3)); +- ao->buf_size *= (ft->encoding.bits_per_sample >> 3); ++ if (bytes_per_sample == 0) ++ { ++ lsx_fail("startwrite [ao driver]: Corrupted encoding data (bits per sample should not be zero)"); ++ return SOX_EOF; ++ } ++ ++ /* Since sox_sw_write_buf works with 16-bit samples, ensure there is an enough room */ ++ if (bytes_per_sample < 2) ++ bytes_per_sample = 2; ++ /* Align the buffer size to the boundary divisible by bytes_per_sample */ ++ ao->buf_size = sox_globals.bufsiz - (sox_globals.bufsiz % bytes_per_sample); ++ /* - add back possibly truncated bytes */ ++ ao->buf_size += bytes_per_sample; + ao->buf = lsx_malloc(ao->buf_size); + + if (!ao->buf) +@@ -90,12 +102,17 @@ static void sox_sw_write_buf(char *buf1, sox_sample_t const * buf2, size_t len, + static size_t write_samples(sox_format_t *ft, const sox_sample_t *buf, size_t len) + { + priv_t * ao = (priv_t *)ft->priv; ++ /* This will be always > 0 in the case the format handler is properly used */ ++ unsigned bytes_per_sample = (ft->encoding.bits_per_sample + 7) >> 3; + uint_32 aobuf_size; + +- if (len > ao->buf_size / (ft->encoding.bits_per_sample >> 3)) +- len = ao->buf_size / (ft->encoding.bits_per_sample >> 3); ++ /* Normalize the number of samples */ ++ if (bytes_per_sample < 2) ++ bytes_per_sample = 2; ++ if (len > ao->buf_size / bytes_per_sample) ++ len = ao->buf_size / bytes_per_sample; + +- aobuf_size = (ft->encoding.bits_per_sample >> 3) * len; ++ aobuf_size = bytes_per_sample * len; + + sox_sw_write_buf(ao->buf, buf, len, ft->encoding.reverse_bytes, + &(ft->clips)); diff --git a/sox-14.4.2-bug_1480678_fix.patch b/sox-14.4.2-bug_1480678_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..ad2b408f40ba0c2f27a2be060344963120620d23 --- /dev/null +++ b/sox-14.4.2-bug_1480678_fix.patch @@ -0,0 +1,58 @@ +--- a/src/wav.c ++++ b/src/wav.c +@@ -712,6 +712,11 @@ + ft->signal.channels = wChannels; + else + lsx_report("User options overriding channels read in .wav header"); ++ ++ if (ft->signal.channels == 0) { ++ lsx_fail_errno(ft, SOX_EHDR, "Channel count is zero"); ++ return SOX_EOF; ++ } + + if (ft->signal.rate == 0 || ft->signal.rate == dwSamplesPerSecond) + ft->signal.rate = dwSamplesPerSecond; +--- a/src/hcom.c ++++ b/src/hcom.c +@@ -73,6 +73,14 @@ + size_t pos; /* Where next byte goes */ + } priv_t; + ++static int dictvalid(int n, int size, int left, int right) ++{ ++ if (n > 0 && left < 0) ++ return 1; ++ ++ return (unsigned)left < size && (unsigned)right < size; ++} ++ + static int startread(sox_format_t * ft) + { + priv_t *p = (priv_t *) ft->priv; +@@ -150,6 +158,11 @@ + lsx_debug("%d %d", + p->dictionary[i].dict_leftson, + p->dictionary[i].dict_rightson); ++ if (!dictvalid(i, dictsize, p->dictionary[i].dict_leftson, ++ p->dictionary[i].dict_rightson)) { ++ lsx_fail_errno(ft, SOX_EHDR, "Invalid dictionary"); ++ return SOX_EOF; ++ } + } + rc = lsx_skipbytes(ft, (size_t) 1); /* skip pad byte */ + if (rc) +--- a/src/wav.c ++++ b/src/wav.c +@@ -1381,6 +1381,12 @@ + int bytespersample; /* (uncompressed) bytes per sample (per channel) */ + long blocksWritten = 0; + sox_bool isExtensible = sox_false; /* WAVE_FORMAT_EXTENSIBLE? */ ++ ++ if (ft->signal.channels > UINT16_MAX) { ++ lsx_fail_errno(ft, SOX_EOF, "Too many channels (%u)", ++ ft->signal.channels); ++ return SOX_EOF; ++ } + + dwSamplesPerSecond = ft->signal.rate; + wChannels = ft->signal.channels; diff --git a/sox-14.4.2-bug_1500553_fix.patch b/sox-14.4.2-bug_1500553_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..3bbbf00455535edfc61f6e1ea6fcc7594bd818f6 --- /dev/null +++ b/sox-14.4.2-bug_1500553_fix.patch @@ -0,0 +1,86 @@ +diff --git a/src/adpcm.c b/src/adpcm.c +index 2e13867..f64b7d5 100644 +--- a/src/adpcm.c ++++ b/src/adpcm.c +@@ -71,6 +71,11 @@ const short lsx_ms_adpcm_i_coef[7][2] = { + { 392,-232} + }; + ++extern void *lsx_ms_adpcm_alloc(unsigned chans) ++{ ++ return lsx_malloc(chans * sizeof(MsState_t)); ++} ++ + static inline sox_sample_t AdpcmDecode(sox_sample_t c, MsState_t *state, + sox_sample_t sample1, sox_sample_t sample2) + { +@@ -102,6 +107,7 @@ static inline sox_sample_t AdpcmDecode(sox_sample_t c, MsState_t *state, + + /* lsx_ms_adpcm_block_expand_i() outputs interleaved samples into one output buffer */ + const char *lsx_ms_adpcm_block_expand_i( ++ void *priv, + unsigned chans, /* total channels */ + int nCoef, + const short *coef, +@@ -113,7 +119,7 @@ const char *lsx_ms_adpcm_block_expand_i( + const unsigned char *ip; + unsigned ch; + const char *errmsg = NULL; +- MsState_t state[4]; /* One decompressor state for each channel */ ++ MsState_t *state = priv; /* One decompressor state for each channel */ + + /* Read the four-byte header for each channel */ + ip = ibuff; +diff --git a/src/adpcm.h b/src/adpcm.h +index af4d6f0..db5cc61 100644 +--- a/src/adpcm.h ++++ b/src/adpcm.h +@@ -29,8 +29,11 @@ + /* default coef sets */ + extern const short lsx_ms_adpcm_i_coef[7][2]; + ++extern void *lsx_ms_adpcm_alloc(unsigned chans); ++ + /* lsx_ms_adpcm_block_expand_i() outputs interleaved samples into one output buffer */ + extern const char *lsx_ms_adpcm_block_expand_i( ++ void *priv, + unsigned chans, /* total channels */ + int nCoef, + const short *coef, +diff --git a/src/wav.c b/src/wav.c +index 3e80e69..f7e72c2 100644 +--- a/src/wav.c ++++ b/src/wav.c +@@ -82,6 +82,7 @@ typedef struct { + /* following used by *ADPCM wav files */ + unsigned short nCoefs; /* ADPCM: number of coef sets */ + short *lsx_ms_adpcm_i_coefs; /* ADPCM: coef sets */ ++ void *ms_adpcm_data; /* Private data of adpcm decoder */ + unsigned char *packet; /* Temporary buffer for packets */ + short *samples; /* interleaved samples buffer */ + short *samplePtr; /* Pointer to current sample */ +@@ -175,7 +176,7 @@ static unsigned short AdpcmReadBlock(sox_format_t * ft) + } + } + +- errmsg = lsx_ms_adpcm_block_expand_i(ft->signal.channels, wav->nCoefs, wav->lsx_ms_adpcm_i_coefs, wav->packet, wav->samples, samplesThisBlock); ++ errmsg = lsx_ms_adpcm_block_expand_i(wav->ms_adpcm_data, ft->signal.channels, wav->nCoefs, wav->lsx_ms_adpcm_i_coefs, wav->packet, wav->samples, samplesThisBlock); + + if (errmsg) + lsx_warn("%s", errmsg); +@@ -786,6 +787,7 @@ static int startread(sox_format_t * ft) + + /* nCoefs, lsx_ms_adpcm_i_coefs used by adpcm.c */ + wav->lsx_ms_adpcm_i_coefs = lsx_malloc(wav->nCoefs * 2 * sizeof(short)); ++ wav->ms_adpcm_data = lsx_ms_adpcm_alloc(wChannels); + { + int i, errct=0; + for (i=0; len>=2 && i < 2*wav->nCoefs; i++) { +@@ -1211,6 +1213,7 @@ static int stopread(sox_format_t * ft) + free(wav->packet); + free(wav->samples); + free(wav->lsx_ms_adpcm_i_coefs); ++ free(wav->ms_adpcm_data); + free(wav->comment); + wav->comment = NULL; + diff --git a/sox-14.4.2-bug_1500554_fix.patch b/sox-14.4.2-bug_1500554_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..473c383a663ad83d84ddafeeba5fe5f0abce5787 --- /dev/null +++ b/sox-14.4.2-bug_1500554_fix.patch @@ -0,0 +1,25 @@ +From ef3d8be0f80cbb650e4766b545d61e10d7a24c9e Mon Sep 17 00:00:00 2001 +From: Mans Rullgard +Date: Sun, 5 Nov 2017 16:21:23 +0000 +Subject: [PATCH] wav: ima_adpcm: fix buffer overflow on corrupt input + (CVE-2017-15370) + +Add the same check bad block size as was done for MS adpcm in commit +f39c574b ("More checks for invalid MS ADPCM blocks"). +--- + src/wav.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/wav.c b/src/wav.c +index 5202556c..3e80e692 100644 +--- a/src/wav.c ++++ b/src/wav.c +@@ -127,7 +127,7 @@ static unsigned short ImaAdpcmReadBlock(sox_format_t * ft) + /* work with partial blocks. Specs say it should be null */ + /* padded but I guess this is better than trailing quiet. */ + samplesThisBlock = lsx_ima_samples_in((size_t)0, (size_t)ft->signal.channels, bytesRead, (size_t) 0); +- if (samplesThisBlock == 0) ++ if (samplesThisBlock == 0 || samplesThisBlock > wav->samplesPerBlock) + { + lsx_warn("Premature EOF on .wav input file"); + return 0; diff --git a/sox-14.4.2-bug_1500570_fix.patch b/sox-14.4.2-bug_1500570_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..cde253da4ecb318bdbfad88d707363ab8e51f863 --- /dev/null +++ b/sox-14.4.2-bug_1500570_fix.patch @@ -0,0 +1,37 @@ +From 818bdd0ccc1e5b6cae742c740c17fd414935cf39 Mon Sep 17 00:00:00 2001 +From: Mans Rullgard +Date: Sun, 5 Nov 2017 15:57:48 +0000 +Subject: [PATCH] flac: fix crash on corrupt metadata (CVE-2017-15371) + +--- + src/flac.c | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +Index: sox/src/flac.c +=================================================================== +--- sox.orig/src/flac.c ++++ sox/src/flac.c +@@ -119,9 +119,10 @@ static void decoder_metadata_callback(FL + p->total_samples = metadata->data.stream_info.total_samples; + } + else if (metadata->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) { ++ const FLAC__StreamMetadata_VorbisComment *vc = &metadata->data.vorbis_comment; + size_t i; + +- if (metadata->data.vorbis_comment.num_comments == 0) ++ if (vc->num_comments == 0) + return; + + if (ft->oob.comments != NULL) { +@@ -129,8 +130,9 @@ static void decoder_metadata_callback(FL + return; + } + +- for (i = 0; i < metadata->data.vorbis_comment.num_comments; ++i) +- sox_append_comment(&ft->oob.comments, (char const *) metadata->data.vorbis_comment.comments[i].entry); ++ for (i = 0; i < vc->num_comments; ++i) ++ if (vc->comments[i].entry) ++ sox_append_comment(&ft->oob.comments, (char const *) vc->comments[i].entry); + } + } + diff --git a/sox-14.4.2-bug_1510923_fix.patch b/sox-14.4.2-bug_1510923_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..772a0bb3f5e5556b1aae475702bc3e62b7224e45 --- /dev/null +++ b/sox-14.4.2-bug_1510923_fix.patch @@ -0,0 +1,20 @@ +diff --git a/src/aiff.c b/src/aiff.c +index 240d2e1..11ddb54 100644 +--- a/src/aiff.c ++++ b/src/aiff.c +@@ -62,7 +62,6 @@ int lsx_aiffstartread(sox_format_t * ft) + size_t ssndsize = 0; + char *annotation; + char *author; +- char *comment = NULL; + char *copyright; + char *nametext; + +@@ -270,6 +269,7 @@ int lsx_aiffstartread(sox_format_t * ft) + free(annotation); + } + else if (strncmp(buf, "COMT", (size_t)4) == 0) { ++ char *comment = NULL; + rc = commentChunk(&comment, "Comment:", ft); + if (rc) { + /* Fail already called in function */ diff --git a/sox-14.4.2-fsf_address_fix.patch b/sox-14.4.2-fsf_address_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..4c6e5379b671c5c7893e06e3dc68b88429a69cd4 --- /dev/null +++ b/sox-14.4.2-fsf_address_fix.patch @@ -0,0 +1,47 @@ +From f4853a8119d22096fbe9fd076799a105e3b3abb7 Mon Sep 17 00:00:00 2001 +From: Jiri Kucera +Date: Tue, 30 Jan 2018 00:29:19 +0100 +Subject: [PATCH] Fixed FSF address + +--- + src/ladspa.h | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +diff --git a/src/ladspa.h b/src/ladspa.h +index 5c30a8a..299412b 100644 +--- a/src/ladspa.h ++++ b/src/ladspa.h +@@ -3,21 +3,20 @@ + Linux Audio Developer's Simple Plugin API Version 1.1[LGPL]. + Copyright (C) 2000-2002 Richard W.E. Furse, Paul Barton-Davis, + Stefan Westerfeld. +- +- This library is free software; you can redistribute it and/or +- modify it under the terms of the GNU Lesser General Public License +- as published by the Free Software Foundation; either version 2.1 of +- the License, or (at your option) any later version. +- ++ ++ This library is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or (at ++ your option) any later version. ++ + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of +- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- Lesser General Public License for more details. +- +- You should have received a copy of the GNU Lesser General Public +- License along with this library; if not, write to the Free Software +- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +- USA. */ ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser ++ General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with this library; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + + #ifndef LADSPA_INCLUDED + #define LADSPA_INCLUDED diff --git a/sox-14.4.2-hcom_stopwrite_big_endian_bug_fix.patch b/sox-14.4.2-hcom_stopwrite_big_endian_bug_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..9aa82064718664c8991174be3bdf34c8630be13b --- /dev/null +++ b/sox-14.4.2-hcom_stopwrite_big_endian_bug_fix.patch @@ -0,0 +1,44 @@ +diff --git a/src/hcom.c b/src/hcom.c +index e76820e..fb8de99 100644 +--- a/src/hcom.c ++++ b/src/hcom.c +@@ -428,12 +428,19 @@ static int stopwrite(sox_format_t * ft) + { + priv_t *p = (priv_t *) ft->priv; + unsigned char *compressed_data = p->data; +- size_t compressed_len = p->pos; ++ int32_t compressed_len = (int32_t)p->pos; + int rc = SOX_SUCCESS; + ++ if (p->pos >> 32 > 0) ++ lsx_warn( ++ "%s: possible data loss" ++ " (the size of data to be written has exceeded its limit)", ++ ft->filename ++ ); ++ + /* Compress it all at once */ + if (compressed_len) +- compress(ft, &compressed_data, (int32_t *)&compressed_len); ++ compress(ft, &compressed_data, &compressed_len); + free(p->data); + + /* Write the header */ +@@ -447,7 +454,7 @@ static int stopwrite(sox_format_t * ft) + if (lsx_error(ft)) { + lsx_fail_errno(ft, errno, "write error in HCOM header"); + rc = SOX_EOF; +- } else if (lsx_writebuf(ft, compressed_data, compressed_len) != compressed_len) { ++ } else if (lsx_writebuf(ft, compressed_data, (size_t) compressed_len) != (size_t) compressed_len) { + /* Write the compressed_data fork */ + lsx_fail_errno(ft, errno, "can't write compressed HCOM data"); + rc = SOX_EOF; +@@ -456,7 +463,7 @@ static int stopwrite(sox_format_t * ft) + + if (rc == SOX_SUCCESS) + /* Pad the compressed_data fork to a multiple of 128 bytes */ +- lsx_padbytes(ft, 128u - (compressed_len % 128)); ++ lsx_padbytes(ft, (size_t) 128 - (compressed_len % 128)); + + return rc; + } diff --git a/sox-14.4.2-installcheck_fix.patch b/sox-14.4.2-installcheck_fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..0d654a09627d5331838b61fec7601c9bbc81d3e9 --- /dev/null +++ b/sox-14.4.2-installcheck_fix.patch @@ -0,0 +1,23 @@ +From 9c0842680a4a46ef64990d6c40de05aa30286d54 Mon Sep 17 00:00:00 2001 +From: Jiri Kucera +Date: Thu, 25 Jan 2018 21:53:30 +0100 +Subject: [PATCH] Added $(DESTDIR) in front of ${bindir} so proper sox binary + is invoked during tests + +--- + src/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/Makefile.am b/src/Makefile.am +index 7cceaaf..caf9864 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -194,6 +194,6 @@ loc: + # would run the test suite, but an uninstalled libltdl build cannot + # currently load its formats and effects, so the checks would fail. + installcheck: +- $(srcdir)/tests.sh --bindir=${bindir} --builddir=${builddir} --srcdir=${srcdir} +- $(srcdir)/testall.sh --bindir=${bindir} --srcdir=${srcdir} ++ $(srcdir)/tests.sh --bindir=$(DESTDIR)${bindir} --builddir=${builddir} --srcdir=${srcdir} ++ $(srcdir)/testall.sh --bindir=$(DESTDIR)${bindir} --srcdir=${srcdir} + diff --git a/sox-14.4.2-lpc10.patch b/sox-14.4.2-lpc10.patch new file mode 100644 index 0000000000000000000000000000000000000000..da359be43c7ff47455ddeac236edf719c747243b --- /dev/null +++ b/sox-14.4.2-lpc10.patch @@ -0,0 +1,35 @@ +diff -Naur sox-14.4.2.orig/configure.ac sox-14.4.2/configure.ac +--- sox-14.4.2.orig/configure.ac 2015-02-22 14:48:57.000000000 -0600 ++++ sox-14.4.2/configure.ac 2015-11-06 11:48:26.179858149 -0600 +@@ -471,8 +471,6 @@ + AC_CHECK_LIB(lpc10, create_lpc10_encoder_state, LPC10_LIBS="$LPC10_LIBS -llpc10", found_liblpc10=no) + if test "$found_liblpc10" = yes; then + AC_DEFINE(EXTERNAL_LPC10, 1, [Define if you are using an external LPC10 library]) +-else +- LIBLPC10_LIBADD=../lpc10/liblpc10.la + fi + AM_CONDITIONAL(EXTERNAL_LPC10, test x$found_liblpc10 = xyes) + AC_SUBST(LIBLPC10_LIBADD) +@@ -670,7 +668,7 @@ + AM_CONDITIONAL(STATIC_LIBSOX_ONLY, test "$enable_shared" = "no" -a "$enable_static" = "yes") + + dnl Generate output files. +-AC_CONFIG_FILES(Makefile src/Makefile libgsm/Makefile lpc10/Makefile msvc9/Makefile msvc10/Makefile sox.pc) ++AC_CONFIG_FILES(Makefile src/Makefile libgsm/Makefile msvc9/Makefile msvc10/Makefile sox.pc) + AC_OUTPUT + + if test "$using_gsm" != "no"; then +diff -Naur sox-14.4.2.orig/Makefile.am sox-14.4.2/Makefile.am +--- sox-14.4.2.orig/Makefile.am 2014-10-05 21:02:30.000000000 -0500 ++++ sox-14.4.2/Makefile.am 2015-11-06 11:48:26.179858149 -0600 +@@ -2,8 +2,8 @@ + + ACLOCAL_AMFLAGS = -I m4 + +-SUBDIRS = lpc10 libgsm src +-DIST_SUBDIRS = lpc10 libgsm src msvc9 msvc10 ++SUBDIRS = libgsm src ++DIST_SUBDIRS = libgsm src msvc9 msvc10 + + RM = rm -f + diff --git a/sox-14.4.2-lsx_symbols.patch b/sox-14.4.2-lsx_symbols.patch new file mode 100644 index 0000000000000000000000000000000000000000..f5cebd7770331d5b92021003ca477581190ed7ae --- /dev/null +++ b/sox-14.4.2-lsx_symbols.patch @@ -0,0 +1,12 @@ +diff -Naur sox-14.4.2.orig/src/Makefile.am sox-14.4.2/src/Makefile.am +--- sox-14.4.2.orig/src/Makefile.am 2014-10-29 22:29:54.000000000 -0500 ++++ sox-14.4.2/src/Makefile.am 2015-11-06 09:49:34.466595616 -0600 +@@ -95,7 +95,7 @@ + + libsox_la_CFLAGS = @WARN_CFLAGS@ + libsox_la_LDFLAGS = @APP_LDFLAGS@ -version-info @SHLIB_VERSION@ \ +- -export-symbols-regex '^(sox_.*|lsx_(check_read_params|(close|open)_dllibrary|(debug(_more|_most)?|fail|report|warn)_impl|eof|fail_errno|filelength|find_(enum_(text|value)|file_extension)|getopt(_init)?|lpc10_(create_(de|en)coder_state|(de|en)code)|raw(read|write)|read(_b_buf|buf|chars)|realloc|rewind|seeki|sigfigs3p?|strcasecmp|tell|unreadb|write(b|_b_buf|buf|s)))$$' ++ -export-symbols-regex '^(sox_.*|lsx_(check_read_params|(close|open)_dllibrary|(debug(_more|_most)?|fail|report|warn)_impl|flush|error|eof|fail_errno|filelength|find_(enum_(text|value)|file_extension)|getopt(_init)?|lpc10_(create_(de|en)coder_state|(de|en)code)|raw(read|write)|read(_b_buf|buf|chars)|realloc|rewind|seeki|sigfigs3p?|strcasecmp|tell|unreadb|write(b|_b_buf|buf|s)))$$' + + if HAVE_WIN32_LTDL + libsox_la_SOURCES += win32-ltdl.c win32-ltdl.h diff --git a/sox.spec b/sox.spec new file mode 100644 index 0000000000000000000000000000000000000000..f6a11495ab083e4afc321c0e1929b3f2d9134bf4 --- /dev/null +++ b/sox.spec @@ -0,0 +1,120 @@ +Name: sox +Version: 14.4.2.0 +Release: 25 +Summary: A general purpose sound file conversion tool +License: GPLv2+ and LGPLv2+ and MIT +URL: http://sox.sourceforge.net/ +Source0: https://github.com/i386x/sox-downstream/archive/sox-14.4.2.0.modified.tar.gz +Source1: binpatch.py + +Patch0001: sox-14.4.2-lsx_symbols.patch +Patch0002: sox-14.4.2-lpc10.patch +Patch0003: sox-14.4.2-fsf_address_fix.patch +Patch1000: sox-14.4.2-bug_1500570_fix.patch +Patch1001: sox-14.4.2-bug_1500554_fix.patch +Patch1002: sox-14.4.2-bug_1500553_fix.patch +Patch1003: sox-14.4.2-bug_1510923_fix.patch +Patch1004: sox-14.4.2-hcom_stopwrite_big_endian_bug_fix.patch +Patch1005: sox-14.4.2-bug_1226675_fix.patch +Patch1006: sox-14.4.2-bug_1480678_fix.patch +Patch9000: sox-14.4.2-installcheck_fix.patch +BuildRequires: gcc, libvorbis-devel, alsa-lib-devel, libtool-ltdl-devel +BuildRequires: gsm-devel, wavpack-devel, ladspa-devel, libpng-devel +BuildRequires: flac-devel, libao-devel, libsndfile-devel, libid3tag-devel +BuildRequires: pulseaudio-libs-devel, opusfile-devel +BuildRequires: libtool, libmad-devel, lame-devel, twolame-devel +BuildRequires: python3, time, libsamplerate-devel, git + +%description +SoX is a cross-platform (Windows, Linux, MacOS X, etc.) command line utility +that can convert various formats of computer audio files in to other formats. +It can also apply various effects to these sound files, and, as an added +bonus, SoX can play and record audio files on most platforms. + +%package -n sox-devel +Summary: package of sox development file +Requires: sox = 14.4.2.0-25 +Requires: pkgconfig + +%description -n sox-devel +This package contains the library needed for compiling applications +which will use the SoX sound file format converter. + +%package_help + +%prep +%autosetup -n %{name}-downstream-%{name}-%{version}.modified -Sgit -p1 +autoreconf -vfi +cp ${RPM_SOURCE_DIR}/binpatch.py binpatch.py + +%build +CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" +%configure --without-lpc10 --with-gsm --includedir=%{_includedir}/sox \ + --disable-static --with-distro=Fedora --with-dyn-default +make V=1 %{?_smp_mflags} + +%install +make install DESTDIR=$RPM_BUILD_ROOT +%delete_la_and_a + +%check +libsox_so="${RPM_BUILD_ROOT}%{_libdir}/libsox.so" +[[ -L $libsox_so ]] && libsox_so=$(readlink -e $libsox_so) || : +[[ -z "$libsox_so" ]] && { + echo "Path to libsox.so cannot be resolved" >&2 + exit 1 +} +[[ -f "$libsox_so" ]] || { + echo "$libsox_so is not a file" >&2 + exit 1 +} +cp $libsox_so $libsox_so.orig +plugins_path=$(python3 binpatch.py $libsox_so) +[[ -z "$plugins_path" ]] && { + echo "$libsox_so cannot be patched" >&2 + exit 1 +} +mkdir -p $plugins_path +for l in ${RPM_BUILD_ROOT}%{_libdir}/sox/libsox_fmt_*.so; do + cp $l $plugins_path/$(basename $l) +done +PATH=${RPM_BUILD_ROOT}%{_bindir}:$PATH +export PATH +LD_LIBRARY_PATH=${RPM_BUILD_ROOT}%{_libdir}:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH +make installcheck DESTDIR=$RPM_BUILD_ROOT +[[ -d /var/tmp/l ]] && rm -rfd /var/tmp/l || : +[[ -d /var/tmp/sox ]] && rm -rfd /var/tmp/sox || : +rm $libsox_so +mv $libsox_so.orig $libsox_so + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%{!?_licensedir:%global license %doc} +%license COPYING +%doc AUTHORS ChangeLog README +%{_bindir}/play +%{_bindir}/rec +%{_bindir}/sox +%{_bindir}/soxi +%{_libdir}/libsox.so.* +%dir %{_libdir}/sox/ +%{_libdir}/sox/libsox_fmt_*.so + +%files -n sox-devel +%{_includedir}/sox +%{_libdir}/libsox.so +%{_libdir}/pkgconfig/sox.pc + +%files help +%{_mandir}/man1/* +%{_mandir}/man7/* +%{_mandir}/man3/* + +%changelog +* Mon Dec 9 2019 openEuler Buildteam - 14.4.2.0-25 +- Package init +