mpg123-1.33.2

This commit is contained in:
Ozkan Sezer
2025-08-11 08:15:30 +03:00
parent 03c8b9e94d
commit b4abae51e1
6 changed files with 53 additions and 37 deletions

6
NEWS
View File

@@ -1,3 +1,9 @@
1.33.2
------
- libmpg123:
-- Do not modify raw ID3v2 data while parsing (bug 379). This used to be fine
before MPG123_STORE_RAW_ID3 got introduced. Not anymore.
1.33.1 1.33.1
------ ------
- INSTALL updated with hints for Windows, mainly. - INSTALL updated with hints for Windows, mainly.

22
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for mpg123 1.33.1. # Generated by GNU Autoconf 2.71 for mpg123 1.33.2.
# #
# Report bugs to <maintainer@mpg123.org>. # Report bugs to <maintainer@mpg123.org>.
# #
@@ -621,8 +621,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='mpg123' PACKAGE_NAME='mpg123'
PACKAGE_TARNAME='mpg123' PACKAGE_TARNAME='mpg123'
PACKAGE_VERSION='1.33.1' PACKAGE_VERSION='1.33.2'
PACKAGE_STRING='mpg123 1.33.1' PACKAGE_STRING='mpg123 1.33.2'
PACKAGE_BUGREPORT='maintainer@mpg123.org' PACKAGE_BUGREPORT='maintainer@mpg123.org'
PACKAGE_URL='' PACKAGE_URL=''
@@ -1727,7 +1727,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures mpg123 1.33.1 to adapt to many kinds of systems. \`configure' configures mpg123 1.33.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1798,7 +1798,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of mpg123 1.33.1:";; short | recursive ) echo "Configuration of mpg123 1.33.2:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -2077,7 +2077,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
mpg123 configure 1.33.1 mpg123 configure 1.33.2
generated by GNU Autoconf 2.71 generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc. Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2622,7 +2622,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by mpg123 $as_me 1.33.1, which was It was created by mpg123 $as_me 1.33.2, which was
generated by GNU Autoconf 2.71. Invocation command line was generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw $ $0$ac_configure_args_raw
@@ -3391,7 +3391,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
LIBMPG123_VERSION=49:3:49 LIBMPG123_VERSION=49:4:49
LIBOUT123_VERSION=5:2:5 LIBOUT123_VERSION=5:2:5
LIBSYN123_VERSION=2:3:2 LIBSYN123_VERSION=2:3:2
@@ -3992,7 +3992,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='mpg123' PACKAGE='mpg123'
VERSION='1.33.1' VERSION='1.33.2'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -22468,7 +22468,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by mpg123 $as_me 1.33.1, which was This file was extended by mpg123 $as_me 1.33.2, which was
generated by GNU Autoconf 2.71. Invocation command line was generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@@ -22536,7 +22536,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped' ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\ ac_cs_version="\\
mpg123 config.status 1.33.1 mpg123 config.status 1.33.2
configured by $0, generated by GNU Autoconf 2.71, configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\" with options \\"\$ac_cs_config\\"

View File

@@ -3,7 +3,7 @@
# - devel packages for alsa, sdl, etc... to build the respective output modules. # - devel packages for alsa, sdl, etc... to build the respective output modules.
Summary: The fast console mpeg audio decoder/player. Summary: The fast console mpeg audio decoder/player.
Name: mpg123 Name: mpg123
Version: 1.33.1 Version: 1.33.2
Release: 1 Release: 1
URL: http://www.mpg123.org/ URL: http://www.mpg123.org/
License: GPL License: GPL

View File

@@ -23,7 +23,7 @@
*/ */
#define MPG123_API_VERSION 49 #define MPG123_API_VERSION 49
/** library patch level at client build time */ /** library patch level at client build time */
#define MPG123_PATCHLEVEL 3 #define MPG123_PATCHLEVEL 4
#ifndef MPG123_EXPORT #ifndef MPG123_EXPORT
/** Defines needed for MS Visual Studio(tm) DLL builds. /** Defines needed for MS Visual Studio(tm) DLL builds.
@@ -338,7 +338,11 @@ enum mpg123_param_flags
* the stream is assumed as non-seekable unless overridden. * the stream is assumed as non-seekable unless overridden.
*/ */
,MPG123_FORCE_SEEKABLE = 0x40000 /**< 19th bit: Force the stream to be seekable. */ ,MPG123_FORCE_SEEKABLE = 0x40000 /**< 19th bit: Force the stream to be seekable. */
,MPG123_STORE_RAW_ID3 = 0x80000 /**< store raw ID3 data (even if skipping) */ ,MPG123_STORE_RAW_ID3 = 0x80000 /**< Store raw ID3 data (even if skipping).
* Before mpg123 1.33.2 (libmpg123 API 49, patchlevel 4), this has to be combined with
* MPG123_SKIP_ID3 to avoid getting corrupted data due to the ID3 parser inserting
* encoding bytes for its own convenience.
*/
,MPG123_FORCE_ENDIAN = 0x100000 /**< Enforce endianess of output samples. ,MPG123_FORCE_ENDIAN = 0x100000 /**< Enforce endianess of output samples.
* This is not reflected in the format codes. If this flag is set along with * This is not reflected in the format codes. If this flag is set along with
* MPG123_BIG_ENDIAN, MPG123_ENC_SIGNED16 means s16be, without * MPG123_BIG_ENDIAN, MPG123_ENC_SIGNED16 means s16be, without

View File

@@ -330,9 +330,9 @@ void INT123_id3_link(mpg123_handle *fr)
Since we can overwrite strings with ID3 update frames, don't free Since we can overwrite strings with ID3 update frames, don't free
memory, just grow strings. memory, just grow strings.
*/ */
static void store_id3_text(mpg123_string *sb, unsigned char *source, size_t source_size, const int noquiet, const int notranslate) static void store_id3_text(mpg123_string *sb, unsigned char encoding, unsigned char *source
, size_t source_size, const int noquiet, const int notranslate)
{ {
unsigned char encoding;
if(sb) // Always overwrite, even with nothing. if(sb) // Always overwrite, even with nothing.
sb->fill = 0; sb->fill = 0;
if(!source_size) if(!source_size)
@@ -345,25 +345,25 @@ static void store_id3_text(mpg123_string *sb, unsigned char *source, size_t sour
if(notranslate) if(notranslate)
{ {
/* Future: Add a path for ID3 errors. */ /* Future: Add a path for ID3 errors. */
if(!mpg123_grow_string(sb, source_size)) if(!mpg123_grow_string(sb, source_size+1))
{ {
if(noquiet) error("Cannot resize target string, out of memory?"); if(noquiet) error("Cannot resize target string, out of memory?");
return; return;
} }
memcpy(sb->p, source, source_size); sb->p[0] = (char)encoding;
sb->fill = source_size; memcpy(sb->p+1, source, source_size);
debug1("stored undecoded ID3 text of size %zu", source_size); sb->fill = source_size+1;
debug1("stored undecoded ID3 text of size %zu", source_size+1);
return; return;
} }
encoding = source[0];
if(encoding > mpg123_id3_enc_max) if(encoding > mpg123_id3_enc_max)
{ {
if(noquiet) if(noquiet)
error1("Unknown text encoding %u, I take no chances, sorry!", encoding); error1("Unknown text encoding %u, I take no chances, sorry!", encoding);
return; return;
} }
INT123_id3_to_utf8(sb, encoding, source+1, source_size-1, noquiet); INT123_id3_to_utf8(sb, encoding, source, source_size, noquiet);
if(sb->fill) debug1("UTF-8 string (the first one): %s", sb->p); if(sb->fill) debug1("UTF-8 string (the first one): %s", sb->p);
else if(noquiet) error("unable to convert string to UTF-8 (out of memory, junk input?)!"); else if(noquiet) error("unable to convert string to UTF-8 (out of memory, junk input?)!");
@@ -449,6 +449,11 @@ static void process_text(mpg123_handle *fr, unsigned char *realdata, size_t real
{ {
/* Text encoding $xx */ /* Text encoding $xx */
/* The text (encoded) ... */ /* The text (encoded) ... */
if(realsize < 1)
{
if(NOQUIET) error("Not even an encoding byte?");
return;
}
mpg123_text *t = add_text(fr, id); mpg123_text *t = add_text(fr, id);
if(VERBOSE4) fprintf(stderr, "Note: Storing text from %s encoding\n", enc_name(realdata[0])); if(VERBOSE4) fprintf(stderr, "Note: Storing text from %s encoding\n", enc_name(realdata[0]));
if(t == NULL) if(t == NULL)
@@ -460,7 +465,8 @@ static void process_text(mpg123_handle *fr, unsigned char *realdata, size_t real
? (char[5]) { t->id[0], t->id[1], t->id[2], t->id[3], 0 } ? (char[5]) { t->id[0], t->id[1], t->id[2], t->id[3], 0 }
: "(nil)" ); : "(nil)" );
memcpy(t->id, id, 4); memcpy(t->id, id, 4);
store_id3_text(&t->text, realdata, realsize, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); store_id3_text( &t->text, realdata[0], realdata+1, realsize-1
, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
if(VERBOSE4) // Do not print unsanitized text to terminals! if(VERBOSE4) // Do not print unsanitized text to terminals!
fprintf(stderr, "Note: ID3v2 %c%c%c%c text frame stored\n", id[0], id[1], id[2], id[3]); fprintf(stderr, "Note: ID3v2 %c%c%c%c text frame stored\n", id[0], id[1], id[2], id[3]);
} }
@@ -577,8 +583,6 @@ static void process_comment(mpg123_handle *fr, enum frame_types tt, unsigned cha
return; return;
} }
memcpy(lang, realdata+1, 3); memcpy(lang, realdata+1, 3);
/* Now I can abuse a byte from lang for the encoding. */
descr[-1] = encoding;
/* Be careful with finding the end of description, I have to honor encoding here. */ /* Be careful with finding the end of description, I have to honor encoding here. */
text = next_text(descr, encoding, realsize-(descr-realdata)); text = next_text(descr, encoding, realsize-(descr-realdata));
if(text == NULL) if(text == NULL)
@@ -591,14 +595,14 @@ static void process_comment(mpg123_handle *fr, enum frame_types tt, unsigned cha
mpg123_string description; mpg123_string description;
mpg123_init_string(&description); mpg123_init_string(&description);
// Store the text, with desired encoding, but for comments always a local copy in UTF-8. // Store the text, with desired encoding, but for comments always a local copy in UTF-8.
store_id3_text( &description, descr-1, text-descr+1 store_id3_text( &description, encoding, descr, text-descr
, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT ); , NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
if(tt == comment) if(tt == comment)
store_id3_text( &localcom.description, descr-1, text-descr+1 store_id3_text( &localcom.description, encoding, descr, text-descr
, NOQUIET, 0 ); , NOQUIET, 0 );
if(VERBOSE4) if(VERBOSE4)
fprintf( stderr, "Note: Storing comment from %s encoding\n" fprintf( stderr, "Note: Storing comment from %s encoding\n"
, enc_name(realdata[0]) ); , enc_name(encoding) );
xcom = tt == uslt xcom = tt == uslt
? add_uslt(fr, lang, &description) ? add_uslt(fr, lang, &description)
: add_comment(fr, lang, &description); : add_comment(fr, lang, &description);
@@ -616,8 +620,8 @@ static void process_comment(mpg123_handle *fr, enum frame_types tt, unsigned cha
mpg123_move_string(&description, &xcom->description); mpg123_move_string(&description, &xcom->description);
} }
text[-1] = encoding; /* Byte abusal for encoding... */ store_id3_text( &xcom->text, encoding, text, realsize-(text-realdata)
store_id3_text(&xcom->text, text-1, realsize+1-(text-realdata), NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); , NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
/* Remember: I will probably decode the above (again) for rva comment checking. So no messing around, please. */ /* Remember: I will probably decode the above (again) for rva comment checking. So no messing around, please. */
if(VERBOSE4) /* Do _not_ print the verbatim text: The encoding might be funny! */ if(VERBOSE4) /* Do _not_ print the verbatim text: The encoding might be funny! */
@@ -641,7 +645,8 @@ static void process_comment(mpg123_handle *fr, enum frame_types tt, unsigned cha
if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level)) if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level))
{ {
/* Only translate the contents in here where we really need them. */ /* Only translate the contents in here where we really need them. */
store_id3_text(&localcom.text, text-1, realsize+1-(text-realdata), NOQUIET, 0); store_id3_text( &localcom.text, encoding, text, realsize-(text-realdata)
, NOQUIET, 0 );
if(localcom.text.fill > 0) if(localcom.text.fill > 0)
{ {
fr->rva.gain[rva_mode] = (float) atof(localcom.text.p); fr->rva.gain[rva_mode] = (float) atof(localcom.text.p);
@@ -689,7 +694,7 @@ static void process_extra(mpg123_handle *fr, unsigned char* realdata, size_t rea
mpg123_init_string(&description); mpg123_init_string(&description);
/* The outside storage gets reencoded to UTF-8 only if not requested otherwise. /* The outside storage gets reencoded to UTF-8 only if not requested otherwise.
Remember that we really need the -1 here to hand in the encoding byte!*/ Remember that we really need the -1 here to hand in the encoding byte!*/
store_id3_text( &description, descr-1, text-descr+1 store_id3_text( &description, encoding, descr, text-descr
, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT ); , NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
xex = add_extra(fr, &description); xex = add_extra(fr, &description);
if(xex) if(xex)
@@ -706,10 +711,10 @@ static void process_extra(mpg123_handle *fr, unsigned char* realdata, size_t rea
init_mpg123_text(&localex); /* For our local copy. */ init_mpg123_text(&localex); /* For our local copy. */
/* Our local copy is always stored in UTF-8! */ /* Our local copy is always stored in UTF-8! */
store_id3_text(&localex.description, descr-1, text-descr+1, NOQUIET, 0); store_id3_text(&localex.description, encoding, descr, text-descr, NOQUIET, 0);
/* At first, only store the outside copy of the payload. We may not need the local copy. */ /* At first, only store the outside copy of the payload. We may not need the local copy. */
text[-1] = encoding; store_id3_text( &xex->text, encoding, text, realsize-(text-realdata)
store_id3_text(&xex->text, text-1, realsize-(text-realdata)+1, NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT); , NOQUIET, fr->p.flags & MPG123_PLAIN_ID3TEXT );
/* Now check if we would like to interpret this extra info for RVA. */ /* Now check if we would like to interpret this extra info for RVA. */
if(localex.description.fill > 0) if(localex.description.fill > 0)
@@ -737,7 +742,8 @@ static void process_extra(mpg123_handle *fr, unsigned char* realdata, size_t rea
if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level)) if((rva_mode > -1) && (fr->rva.level[rva_mode] <= rva_level))
{ {
/* Now we need the translated copy of the data. */ /* Now we need the translated copy of the data. */
store_id3_text(&localex.text, text-1, realsize-(text-realdata)+1, NOQUIET, 0); store_id3_text( &localex.text, encoding, text, realsize-(text-realdata)
, NOQUIET, 0 );
if(localex.text.fill > 0) if(localex.text.fill > 0)
{ {
if(is_peak) if(is_peak)

View File

@@ -16,7 +16,7 @@
// only single spaces as separator to ease parsing by build scripts // only single spaces as separator to ease parsing by build scripts
#define MPG123_MAJOR 1 #define MPG123_MAJOR 1
#define MPG123_MINOR 33 #define MPG123_MINOR 33
#define MPG123_PATCH 1 #define MPG123_PATCH 2
// Don't get too wild with that to avoid confusing m4. No brackets. // Don't get too wild with that to avoid confusing m4. No brackets.
// Also, it should fit well into a sane file name for the tarball. // Also, it should fit well into a sane file name for the tarball.
#define MPG123_SUFFIX "" #define MPG123_SUFFIX ""