Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/flathub/shared-modules.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Degeling <contact@kevindegeling.nl>2022-02-01 20:33:29 +0300
committerPatrick <tingping@tingping.se>2022-02-03 23:40:05 +0300
commit0502ecbe7a8b6312dae2dcc98a0770970b7aaa93 (patch)
treea862600882a4a4a43788c3c01aab7a9a4554c3a5
parent54b4a3081c63a20ece0c930007a43b2c34cb5b86 (diff)
Add Vorbisgain
From a reliability point-of-view, we should really ensure that all packages using Vorbisgain adopt this shared module, which has all the patches from Debian. Upsteam doesn't seem to be working on it any longer.
-rw-r--r--CODEOWNERS1
-rw-r--r--vorbisgain/0001-temp_files.patch75
-rw-r--r--vorbisgain/0002-errno.patch33
-rw-r--r--vorbisgain/0003-manpage.patch248
-rw-r--r--vorbisgain/0004-vorbisgain_mtime.patch183
-rw-r--r--vorbisgain/0005-double_fclose.patch21
-rw-r--r--vorbisgain/0006-manpage_hyphens.patch56
-rw-r--r--vorbisgain/0007-recursively_spelling.patch14
-rw-r--r--vorbisgain/0008-manpage_recursion_mistake.patch23
-rw-r--r--vorbisgain/0009-hardening.patch13
-rw-r--r--vorbisgain/0010-fclose.patch13
-rw-r--r--vorbisgain/README.md23
-rw-r--r--vorbisgain/vorbisgain_0.37-2.json51
13 files changed, 754 insertions, 0 deletions
diff --git a/CODEOWNERS b/CODEOWNERS
index 398c0b7..864c534 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -16,3 +16,4 @@
/mac/ @enzo1982 @Eonfge
/pygtk/ @Eonfge
/gzdoom/ @Eonfge
+/vobisgain/ @Eonfge
diff --git a/vorbisgain/0001-temp_files.patch b/vorbisgain/0001-temp_files.patch
new file mode 100644
index 0000000..4e6d670
--- /dev/null
+++ b/vorbisgain/0001-temp_files.patch
@@ -0,0 +1,75 @@
+Description: Apply patch to use temp files, which are dependent
+ on the file which is beeing processed, instead always using the same
+ filename, which can result to data loss in scenarios where two or more
+ vorbis processes are running parallel.
+Author: Pavel N. Krivitsky <pavel@krivitsky.name>
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505164
+Forwarded: no
+---
+ vorbis.c | 17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -56,7 +56,7 @@
+ #define PROGRESS_FORMAT_SIZE 8
+ #define MIN_FILENAME_SIZE 5
+ #define MIN_MIDDLE_TRUNCATE_SIZE 20
+-#define TEMP_NAME "vorbisgain.tmpXXXXXX"
++#define TEMP_EXT ".vgain.tmpXXXXXX"
+
+
+ /**
+@@ -684,11 +684,10 @@
+ }
+ }
+
+- /* Make sure temp is in same folder as file. And yes, the malloc is larger
+- * than necessary (and not always needed). Lets keep it simple though (at
+- * the expense of a few bytes)...
++ /* Construct a temporary file name by appending TEMP_EXT to
++ * the name of the file being modified.
+ */
+- temp_name = malloc(strlen(filename) + sizeof(TEMP_NAME));
++ temp_name = malloc(strlen(filename)*sizeof(char) + sizeof(TEMP_EXT));
+
+ if (temp_name == NULL)
+ {
+@@ -697,7 +696,7 @@
+ }
+
+ strcpy(temp_name, filename);
+- strcpy((char *) last_path(temp_name), TEMP_NAME);
++ strcat(temp_name, TEMP_EXT);
+
+ #ifdef WIN32
+ temp_name = _mktemp(temp_name);
+@@ -779,6 +778,7 @@
+ file_error(_("Note: Couldn't set mode for file '%s': "), filename);
+ }
+
++#if 0 /* Disable for Debian, this surprises people and is not useful --liw */
+ utime_buf.actime = stat_buf.st_atime;
+ utime_buf.modtime = stat_buf.st_mtime;
+
+@@ -786,6 +786,7 @@
+ {
+ file_error(_("Note: Couldn't set time for file '%s': "), filename);
+ }
++#endif
+
+ result = 0;
+
+@@ -817,10 +818,10 @@
+
+ if (delete_temp)
+ {
+- if (remove(TEMP_NAME) != 0)
++ if (remove(temp_name) != 0)
+ {
+ file_error(_("Note: Couldn't remove temporary file '%s': "),
+- TEMP_NAME);
++ temp_name);
+ }
+ }
+
diff --git a/vorbisgain/0002-errno.patch b/vorbisgain/0002-errno.patch
new file mode 100644
index 0000000..b01f2ad
--- /dev/null
+++ b/vorbisgain/0002-errno.patch
@@ -0,0 +1,33 @@
+Description: Zero errno before readdir call.
+From: http://bugs.debian.org/375110
+Forwarded: no
+---
+ recurse.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/recurse.c
++++ b/recurse.c
+@@ -408,6 +408,7 @@
+ */
+ static int read_dir(DIRECTORY *directory)
+ {
++ errno = 0;
+ directory->entry = readdir(directory->dir);
+
+ if (directory->entry != NULL)
+@@ -622,6 +623,7 @@
+ /* Check for wildcards */
+ settings->pattern = last_path(my_path);
+
++#if 0 /* Disable for Debian, as it suprises people. --liw */
+ if (contains_pattern(settings->pattern))
+ {
+ /* Strip last part of path */
+@@ -637,6 +639,7 @@
+ }
+ }
+ else
++#endif
+ {
+ settings->pattern = NULL;
+ }
diff --git a/vorbisgain/0003-manpage.patch b/vorbisgain/0003-manpage.patch
new file mode 100644
index 0000000..8aaeaf1
--- /dev/null
+++ b/vorbisgain/0003-manpage.patch
@@ -0,0 +1,248 @@
+Description: Man page says --silent, should be --skip
+From: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=355783
+Forwarded: no
+---
+ vorbisgain.1 | 60 ++++++++++++-----------------------------------------------
+ 1 file changed, 13 insertions(+), 47 deletions(-)
+
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -2,10 +2,8 @@
+ .\" groff -man -Tascii vorbisgain.1
+ .\"
+ .TH vorbisgain 1 "2004 Jan 3" "" "VorbisGain"
+-
+ .SH NAME
+ vorbisgain \- calculate the replay gain for Ogg Vorbis files
+-
+ .SH SYNOPSIS
+ .B vorbisgain
+ [
+@@ -16,7 +14,6 @@
+ .I album gain
+ ]
+ .I input_files \fR...
+-
+ .SH DESCRIPTION
+ .B vorbisgain
+ calculates the ReplayGain values for the named Ogg Vorbis input files and
+@@ -27,7 +24,6 @@
+ uses a default target level of 89 dB, rather than the 83 dB recommended by the
+ ReplayGain standard, when calculating the gain to apply. (Some players include
+ a pre-amplification setting with which the target level can be changed.)
+-
+ .PP
+ .B vorbisgain
+ input files must be Ogg Vorbis I files with 1 or 2 channels and a sample rate
+@@ -35,21 +31,16 @@
+ kHz. If an input file contains multiple streams (i.e., it is chained), the
+ streams must all have the same format, in terms of sampling frequency and
+ number of channels.
+-
+ .PP
+ All streams in a chained file are processed, but the ReplayGain tags are
+ only written to (or removed from) the first stream.
+-
+ .SH OPTIONS
+-
+ .IP "-h, --help"
+ Show command help.
+-
+ .IP "-a, --album"
+ Activates album mode, in which the album gain (sometimes called the audiophile
+ gain) is calculated in addition to the track gain (sometimes called the radio
+ gain).
+-
+ .IP "-g n, --album-gain=n"
+ Sets the album gain value to use. Default is to calculate it, if
+ .I -a
+@@ -59,38 +50,31 @@
+ dB, specifying the
+ .B change
+ in volume that should be applied.
+-
+ .IP "-c, --clean"
+ Remove any ReplayGain tags from the specified files. If a file does not
+ contain any ReplayGain tags, the file is not modified.
+-
+ .IP "-C, --convert"
+ Convert old format ReplayGain tags to a new format (see section TAG FORMAT
+ below for details). If a file does not contain all ReplayGain tags that are
+ needed for a conversion, the file is not modified. The album peak tag is
+ only created if
+ .I -a
+-is specified, and the album gain value is then checked for concistency.
++is specified, and the album gain value is then checked for consistency.
+ Otherwise any album gain is converted without any checks.
+-
+ .IP "-d, --display-only"
+ Display the result only; do not write anything to disk. This applies to all
+ options.
+-
+ .IP "-f, --fast"
+ Only calculate the gain for files that do not contain all replay gain tags
+ needed (the album gain and peak tags are only considered if
+ .I -a
+ has been specified).
+-
+ .IP "-n, --no-progress"
+ Only display results, but don't show progress in percentages and times. This
+ can be useful if the output is piped into other programs.
+-
+ .IP "-q, --quiet"
+ Do not display any output while processing. Only error and warning messages will
+ be printed.
+-
+ .IP "-r, --recursive"
+ Enter directories (recursively) and search for files, if directories or file
+ patterns are specified.
+@@ -98,65 +82,51 @@
+ Only available if
+ .B vorbisgain
+ was configured with --enable-recursive.
+-
+-.IP "-s, --silent"
+-Sliently skip any non-Vorbis files found. Vorbis files that can't be processed
++.IP "-s, --skip"
++Silently skip any non-Vorbis files found. Vorbis files that can't be processed
+ for some reason are skipped as well, though not silently. Default is to stop
+ when such files are encountered.
+-
+ .IP "-v, --version"
+ Display the version of the program.
+-
+ .SH EXAMPLES
+-
+ Simplest version. Calculate the track gain and peak only.
+ .PP
+ .RS
+ vorbisgain somefile.ogg
+ .RE
+-
+ .PP
+ Note that the following examples are only possible if
+ .B vorbisgain
+ was configured with --enable-recursive.
+-
+ .PP
+ Calculate the album gain and peak, in addition to the track gain and peak, for
+ all .ogg files in the directory "music" (and all subdirectories). All files in
+ one directory are treated as belonging to the same album. Files that already
+ have ReplayGain tags are not re-calculated. Note the quotes, as they cause the
+ shell to not do any filename globbing:
+-
+ .PP
+ .RS
+ vorbisgain -a -f -r "music/*.ogg"
+ .RE
+-
+ .PP
+ Calculate the album gain. The files specified before the directory "album"
+ are treated as one album, the files in the directory "album" as another
+ album and the remaining files as a third album:
+-
+ .PP
+ .RS
+ vorbisgain -a -r a.ogg b.ogg c.ogg album d.ogg e.ogg f.ogg
+ .RE
+-
+ .PP
+ Remove all replaygain tags from a collection of oggs:
+-
+ .PP
+ .RS
+ vorbisgain -c -r "music/*.ogg"
+ .RE
+-
+ .SH TAG FORMAT
+-
+ .B vorbisgain
+ creates tags like these (when in
+ .I -a
+ mode):
+-
+ .PP
+ .RS
+ REPLAYGAIN_TRACK_GAIN=-7.03 dB
+@@ -170,18 +140,15 @@
+ .RS
+ REPLAYGAIN_ALBUM_PEAK=1.21822226
+ .RE
+-
+ .PP
+ Gain specifies how much the volume should be changed before playback, in dB.
+ Peak is the maximum sample value of the file before any gain has been
+ applied, where 1.0 means "full sample value" (32,767 when decoding to signed
+ 16 bit samples).
+-
+ .PP
+ Earlier versions of
+ .B vorbisgain
+ (before 0.30) created the following tags:
+-
+ .PP
+ .RS
+ RG_RADIO
+@@ -192,7 +159,6 @@
+ .RS
+ RG_AUDIOPHILE
+ .RE
+-
+ .PP
+ When
+ .I -c
+@@ -200,44 +166,44 @@
+ REPLAYGAIN_TRACK_PEAK, RG_AUDIOPHILE to REPLAYGAIN_ALBUM_GAIN and
+ REPLAYGAIN_ALBUM_PEAK is calculated as the maximum of all RG_PEAK tags in
+ the album.
+-
+ .SH AUTHORS
+-
+ .TP
+ Program Code:
+ .br
+ Gian-Carlo Pascutto <gcp@sjeng.org>
+ .br
+ Magnus Holmgren <lear@algonet.se>
+-
+ .TP
+ ReplayGain Analysis Code:
+ .br
+ Glen Sawyer <glensawyer@hotmail.com>
+ .br
+ Frank Klemm (http://www.uni-jena.de/~pfk/)
+-
+ .TP
+ Man Page:
+ .br
+ Magnus Holmgren <lear@algonet.se>
+-
+ .SH BUGS
+-
+ None known.
+-
+ .SH SEE ALSO
+-
+ .TP
+ http://sjeng.org/vorbisgain.html
+ Home page for VorbisGain. The latest version, and a Windows executable,
+ can be found here.
+-
+ .TP
+ http://www.replaygain.org/
+ Contains detailed information about ReplayGain and how it is calculated.
+-
+ .TP
+ http://www.hydrogenaudio.org/
+ Discussion forum for audio compression and related issues, including Ogg
+ Vorbis and VorbisGain.
++.SH NOTE
++The version of vorbisgain packaged for Debian differs in two ways from
++the upstream version. First, it does not retain the modification time
++of the input file: if tags are changed in a file, the mtime will change.
++Second, it does not try to process wildcards in filenames. This makes
++it impossible to say "process all foo*.ogg in all subdirectories", but
++also avoids problems with filenames that actually contain wildcards.
++Without this change, "vorbisgain *.ogg" in a directory with a file that
++contains a question mark would result in that file being treated as
++being in a different album.
diff --git a/vorbisgain/0004-vorbisgain_mtime.patch b/vorbisgain/0004-vorbisgain_mtime.patch
new file mode 100644
index 0000000..0abd7ce
--- /dev/null
+++ b/vorbisgain/0004-vorbisgain_mtime.patch
@@ -0,0 +1,183 @@
+Description: When a file's metadata is updated, the mtime is changed
+ to the current time. Whether this is correct or not is often a
+ religious issue (metadata-vs-data), but, generally, all other
+ tag-editing software choose to keep the timestamp.
+ .
+ Since the upstream fixed the issue, it is bad to ignore the fix
+ altogether. At the very least, there should be a command-line
+ option to follow the upstream and The Only Right(tm) behaviour.
+Author: Adam Borowski <kilobyte@angband.pl>
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=445958
+---
+ vorbis.c | 18 ++++++++++--------
+ vorbis.h | 2 +-
+ vorbisgain.1 | 7 ++++++-
+ vorbisgain.c | 20 ++++++++++++++------
+ vorbisgain.h | 1 +
+ 5 files changed, 32 insertions(+), 16 deletions(-)
+
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -557,7 +557,8 @@
+ * message has been printed).
+ */
+ int write_gains(const char *filename, float track_peak, float track_gain,
+- float album_peak, float album_gain, int verbose, int remove_tags)
++ float album_peak, float album_gain, int verbose, int remove_tags,
++ SETTINGS* settings)
+ {
+ struct stat stat_buf;
+ struct utimbuf utime_buf;
+@@ -778,15 +779,16 @@
+ file_error(_("Note: Couldn't set mode for file '%s': "), filename);
+ }
+
+-#if 0 /* Disable for Debian, this surprises people and is not useful --liw */
+- utime_buf.actime = stat_buf.st_atime;
+- utime_buf.modtime = stat_buf.st_mtime;
+-
+- if (utime(filename, &utime_buf) != 0)
++ if (!settings->trample_mtime)
+ {
+- file_error(_("Note: Couldn't set time for file '%s': "), filename);
++ utime_buf.actime = stat_buf.st_atime;
++ utime_buf.modtime = stat_buf.st_mtime;
++
++ if (utime(filename, &utime_buf) != 0)
++ {
++ file_error(_("Note: Couldn't set time for file '%s': "), filename);
++ }
+ }
+-#endif
+
+ result = 0;
+
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -72,6 +72,10 @@
+ .IP "-n, --no-progress"
+ Only display results, but don't show progress in percentages and times. This
+ can be useful if the output is piped into other programs.
++.IP "-p, --preserve-mtime"
++Do not trample upon the timestamps of any files being worked on. This obeys
++the expected data-vs-metadata behaviour, but can confuse some naive
++archivers.
+ .IP "-q, --quiet"
+ Do not display any output while processing. Only error and warning messages will
+ be printed.
+@@ -200,7 +204,8 @@
+ .SH NOTE
+ The version of vorbisgain packaged for Debian differs in two ways from
+ the upstream version. First, it does not retain the modification time
+-of the input file: if tags are changed in a file, the mtime will change.
++of the input file by default: if tags are changed in a file, the mtime will
++change; you can specify "-p" to get the normal behaviour.
+ Second, it does not try to process wildcards in filenames. This makes
+ it impossible to say "process all foo*.ogg in all subdirectories", but
+ also avoids problems with filenames that actually contain wildcards.
+--- a/vorbisgain.c
++++ b/vorbisgain.c
+@@ -235,7 +235,7 @@
+ {
+ if (write_gains(file->filename, file->track_peak,
+ file->track_gain, album_peak, file->album_gain,
+- !settings->quiet, 0) < 0)
++ !settings->quiet, 0, settings) < 0)
+ {
+ return -1;
+ }
+@@ -288,7 +288,7 @@
+ else
+ {
+ if (write_gains(file->filename, NO_PEAK, NO_GAIN,
+- NO_PEAK, NO_GAIN, !settings->quiet, 1) < 0)
++ NO_PEAK, NO_GAIN, !settings->quiet, 1, settings) < 0)
+ {
+ return -1;
+ }
+@@ -425,7 +425,8 @@
+ if (!settings->album)
+ {
+ if (!settings->display_only && write_gains(file->filename,
+- file->track_peak, file->track_gain, NO_PEAK, NO_GAIN, 0, 0) < 0)
++ file->track_peak, file->track_gain, NO_PEAK, NO_GAIN, 0, 0,
++ settings) < 0)
+ {
+ return -1;
+ }
+@@ -466,7 +467,7 @@
+
+ if (write_gains(file->filename, file->track_peak,
+ file->track_gain, album_peak, album_gain,
+- !settings->quiet, 0) < 0)
++ !settings->quiet, 0, settings) < 0)
+ {
+ return -1;
+ }
+@@ -497,6 +498,7 @@
+ fprintf(stderr, _(" -h, --help Print this help text\n"));
+ fprintf(stderr, _(" -n, --no-progress Don't show progress, just print results\n"));
+ fprintf(stderr, _(" -q, --quiet Don't print any output (except errors)\n"));
++ fprintf(stderr, _(" -p, --preserve-mtime Don't change the timestamps\n"));
+ #ifdef ENABLE_RECURSIVE
+ fprintf(stderr, _(" -r, --recursive Search for files recursivly, each folder as an album\n"));
+ #endif
+@@ -522,6 +524,7 @@
+ {"fast", 0, NULL, 'f'},
+ {"help", 0, NULL, 'h'},
+ {"no-progress", 0, NULL, 'n'},
++ {"preserve-mtime",0,NULL, 'p'},
+ {"quiet", 0, NULL, 'q'},
+ #ifdef ENABLE_RECURSIVE
+ {"recursive", 0, NULL, 'r'},
+@@ -533,9 +536,9 @@
+
+
+ #ifdef ENABLE_RECURSIVE
+-#define ARG_STRING "acCdfg:hnqrst:v"
++#define ARG_STRING "acCdfg:hnpqrst:v"
+ #else
+-#define ARG_STRING "acCdfg:hnqst:v"
++#define ARG_STRING "acCdfg:hnpqst:v"
+ #endif
+
+
+@@ -549,6 +552,7 @@
+ memset(&settings, 0, sizeof(settings));
+ settings.first_file = 1;
+ settings.album_gain = NO_GAIN;
++ settings.trample_mtime = 1;
+ settings.show_progress = 1;
+
+ #ifdef WIN32
+@@ -623,6 +627,10 @@
+ settings.show_progress = 0;
+ break;
+
++ case 'p':
++ settings.trample_mtime = 0;
++ break;
++
+ case 'q':
+ settings.quiet = 1;
+ break;
+--- a/vorbisgain.h
++++ b/vorbisgain.h
+@@ -31,6 +31,7 @@
+ int convert; /**< Convert old format tags to new format */
+ int display_only;
+ int fast; /**< Skip files that already have all needed tags */
++ int trample_mtime;
+ int quiet;
+ #ifdef ENABLE_RECURSIVE
+ int recursive;
+--- a/vorbis.h
++++ b/vorbis.h
+@@ -15,6 +15,6 @@
+ SETTINGS *settings);
+ extern int write_gains(const char *filename, float track_peak,
+ float track_gain, float album_gain, float album_peak, int verbose,
+- int remove_tags);
++ int remove_tags, SETTINGS *settings);
+
+ #endif /* VG_VORBIS_H */
diff --git a/vorbisgain/0005-double_fclose.patch b/vorbisgain/0005-double_fclose.patch
new file mode 100644
index 0000000..2a18329
--- /dev/null
+++ b/vorbisgain/0005-double_fclose.patch
@@ -0,0 +1,21 @@
+Description: Don't call fclose() twice.
+Author: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=632947
+---
+ vorbis.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -813,11 +813,6 @@
+ fclose(infile);
+ }
+
+- if (infile != NULL)
+- {
+- fclose(infile);
+- }
+-
+ if (delete_temp)
+ {
+ if (remove(temp_name) != 0)
diff --git a/vorbisgain/0006-manpage_hyphens.patch b/vorbisgain/0006-manpage_hyphens.patch
new file mode 100644
index 0000000..cb518e6
--- /dev/null
+++ b/vorbisgain/0006-manpage_hyphens.patch
@@ -0,0 +1,56 @@
+Description: Resolved hyphen-used-as-minus-sign lintian complaints.
+Forwarded: no
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -85,7 +85,7 @@
+ .I Note:
+ Only available if
+ .B vorbisgain
+-was configured with --enable-recursive.
++was configured with \-\-enable\-recursive.
+ .IP "-s, --skip"
+ Silently skip any non-Vorbis files found. Vorbis files that can't be processed
+ for some reason are skipped as well, though not silently. Default is to stop
+@@ -101,7 +101,7 @@
+ .PP
+ Note that the following examples are only possible if
+ .B vorbisgain
+-was configured with --enable-recursive.
++was configured with \-\-enable\-recursive.
+ .PP
+ Calculate the album gain and peak, in addition to the track gain and peak, for
+ all .ogg files in the directory "music" (and all subdirectories). All files in
+@@ -110,7 +110,7 @@
+ shell to not do any filename globbing:
+ .PP
+ .RS
+-vorbisgain -a -f -r "music/*.ogg"
++vorbisgain \-a \-f \-r "music/*.ogg"
+ .RE
+ .PP
+ Calculate the album gain. The files specified before the directory "album"
+@@ -118,13 +118,13 @@
+ album and the remaining files as a third album:
+ .PP
+ .RS
+-vorbisgain -a -r a.ogg b.ogg c.ogg album d.ogg e.ogg f.ogg
++vorbisgain \-a \-r a.ogg b.ogg c.ogg album d.ogg e.ogg f.ogg
+ .RE
+ .PP
+ Remove all replaygain tags from a collection of oggs:
+ .PP
+ .RS
+-vorbisgain -c -r "music/*.ogg"
++vorbisgain \-c \-r "music/*.ogg"
+ .RE
+ .SH TAG FORMAT
+ .B vorbisgain
+@@ -205,7 +205,7 @@
+ The version of vorbisgain packaged for Debian differs in two ways from
+ the upstream version. First, it does not retain the modification time
+ of the input file by default: if tags are changed in a file, the mtime will
+-change; you can specify "-p" to get the normal behaviour.
++change; you can specify "\-p" to get the normal behaviour.
+ Second, it does not try to process wildcards in filenames. This makes
+ it impossible to say "process all foo*.ogg in all subdirectories", but
+ also avoids problems with filenames that actually contain wildcards.
diff --git a/vorbisgain/0007-recursively_spelling.patch b/vorbisgain/0007-recursively_spelling.patch
new file mode 100644
index 0000000..4a6fbf9
--- /dev/null
+++ b/vorbisgain/0007-recursively_spelling.patch
@@ -0,0 +1,14 @@
+Description: "recursivly" should be spelled "recursively". Thanks Adam.
+From: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=661999
+Forwarded: no
+--- a/vorbisgain.c
++++ b/vorbisgain.c
+@@ -500,7 +500,7 @@
+ fprintf(stderr, _(" -q, --quiet Don't print any output (except errors)\n"));
+ fprintf(stderr, _(" -p, --preserve-mtime Don't change the timestamps\n"));
+ #ifdef ENABLE_RECURSIVE
+- fprintf(stderr, _(" -r, --recursive Search for files recursivly, each folder as an album\n"));
++ fprintf(stderr, _(" -r, --recursive Search for files recursively, each folder as an album\n"));
+ #endif
+ fprintf(stderr, _(" -s, --skip Skip non-Vorbis or faulty files\n"));
+ fprintf(stderr, _(" -v, --version Display version number and exit\n\n"));
diff --git a/vorbisgain/0008-manpage_recursion_mistake.patch b/vorbisgain/0008-manpage_recursion_mistake.patch
new file mode 100644
index 0000000..8179253
--- /dev/null
+++ b/vorbisgain/0008-manpage_recursion_mistake.patch
@@ -0,0 +1,23 @@
+Description: The manpage shows methods that don't work. They have been replaced.
+From: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=447402
+Forwarded: no
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -110,7 +110,7 @@
+ shell to not do any filename globbing:
+ .PP
+ .RS
+-vorbisgain \-a \-f \-r "music/*.ogg"
++vorbisgain \-a \-f \-r music/
+ .RE
+ .PP
+ Calculate the album gain. The files specified before the directory "album"
+@@ -124,7 +124,7 @@
+ Remove all replaygain tags from a collection of oggs:
+ .PP
+ .RS
+-vorbisgain \-c \-r "music/*.ogg"
++vorbisgain \-c \-r music/
+ .RE
+ .SH TAG FORMAT
+ .B vorbisgain
diff --git a/vorbisgain/0009-hardening.patch b/vorbisgain/0009-hardening.patch
new file mode 100644
index 0000000..67f50a0
--- /dev/null
+++ b/vorbisgain/0009-hardening.patch
@@ -0,0 +1,13 @@
+Description: Allow build with dh compat level 9 (debian build flags)
+Forwarded: no
+--- a/misc.c
++++ b/misc.c
+@@ -56,7 +56,7 @@
+ vfprintf(stderr, message, args);
+ va_end(args);
+
+- fprintf(stderr, strerror(err_num));
++ fputs(strerror(err_num), stderr);
+ fprintf(stderr, "\n");
+ }
+
diff --git a/vorbisgain/0010-fclose.patch b/vorbisgain/0010-fclose.patch
new file mode 100644
index 0000000..1237898
--- /dev/null
+++ b/vorbisgain/0010-fclose.patch
@@ -0,0 +1,13 @@
+Solve "too many open files" by closing those which are not compatible with vorbisgain. Thanks to Marcel Rehberg for the patch.
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -357,7 +357,8 @@
+ {
+ vorbis_error(result, _("Couldn't process '%s': "), filename);
+ }
+-
++ // make sure file is closed, since ov_open failed we are still responsible
++ fclose(file);
+ return -1;
+ }
+
diff --git a/vorbisgain/README.md b/vorbisgain/README.md
new file mode 100644
index 0000000..42d8394
--- /dev/null
+++ b/vorbisgain/README.md
@@ -0,0 +1,23 @@
+Vorbisgain comes in two version;
+- The main source: https://sjeng.org/ftp/vorbis/
+- The Debian version: http://deb.debian.org/debian/pool/main/v/vorbisgain/
+
+The catch is... Debian has 10 patches:
+- 0001-temp_files.patch
+- 0002-errno.patch
+- 0003-manpage.patch
+- 0004-vorbisgain_mtime.patch
+- 0005-double_fclose.patch
+- 0006-manpage_hyphens.patch
+- 0007-recursively_spelling.patch
+- 0008-manpage_recursion_mistake.patch
+- 0009-hardening.patch
+- 0010-fclose.patch
+
+Of particular concern are 0005, 0009 and 0010 which might have implications for memory-leaks and string inputs.
+
+## Other points of concern
+
+https://pkgs.org/download/vorbisgain
+
+Lots of distributions don't include these patches as well, but I prefer to stick with the tried and tested package from Debian.
diff --git a/vorbisgain/vorbisgain_0.37-2.json b/vorbisgain/vorbisgain_0.37-2.json
new file mode 100644
index 0000000..da726cd
--- /dev/null
+++ b/vorbisgain/vorbisgain_0.37-2.json
@@ -0,0 +1,51 @@
+{
+ "name": "vorbisgain",
+ "buildsystem": "autotools",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://deb.debian.org/debian/pool/main/v/vorbisgain/vorbisgain_0.37.orig.tar.gz",
+ "sha256": "dd6db051cad972bcac25d47b4a9e40e217bb548a1f16328eddbb4e66613530ec"
+ },
+ {
+ "type": "patch",
+ "path": "0001-temp_files.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0002-errno.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0003-manpage.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0004-vorbisgain_mtime.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0005-double_fclose.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0006-manpage_hyphens.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0007-recursively_spelling.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0008-manpage_recursion_mistake.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0009-hardening.patch"
+ },
+ {
+ "type": "patch",
+ "path": "0010-fclose.patch"
+ }
+ ]
+}