Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libxmp for openSUSE:Factory checked in at 2026-10-10 15:00:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libxmp (Old) and /work/SRC/openSUSE:Factory/.libxmp.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libxmp" Sat Oct 10 15:00:19 2026 rev:40 rq:1383986 version:4.7.4 Changes: -------- --- /work/SRC/openSUSE:Factory/libxmp/libxmp.changes 2026-09-12 21:25:15.967305458 +0200 +++ /work/SRC/openSUSE:Factory/.libxmp.new.3698736/libxmp.changes 2026-10-10 15:00:39.049172410 +0200 @@ -1,0 +2,8 @@ +Sat Oct 10 09:16:47 UTC 2026 - Jan Engelhardt <[email protected]> + +- Update to release 4.7.4 + * Fix sample bounding in Imago Orpheus IMF loader. + * Remove maximum samples clamp in libxmp_load_epilogue (it is not + protecting anything and causes leaks in the XM loader). + +------------------------------------------------------------------- Old: ---- libxmp-4.7.3.tar.gz New: ---- libxmp-4.7.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libxmp.spec ++++++ --- /var/tmp/diff_new_pack.LgZW4k/_old 2026-10-10 15:00:40.893249610 +0200 +++ /var/tmp/diff_new_pack.LgZW4k/_new 2026-10-10 15:00:40.898249820 +0200 @@ -18,7 +18,7 @@ Name: libxmp %define lname libxmp4 -Version: 4.7.3 +Version: 4.7.4 Release: 0 Summary: Module Player library for MOD, S3M, IT and others License: MIT ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.LgZW4k/_old 2026-10-10 15:00:40.998254006 +0200 +++ /var/tmp/diff_new_pack.LgZW4k/_new 2026-10-10 15:00:41.005254299 +0200 @@ -1,5 +1,5 @@ -mtime: 1789158973 -commit: 40fbb9ef8b23b147e0709edc30cccb9af7f7f07455a3ea857da8222edc86b4fc +mtime: 1791623963 +commit: 655b35ac340308d497db398c4b136a9850ee401c0fd9d47e7917ee5c4a21e4d8 url: https://src.opensuse.org/jengelh/libxmp revision: master ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-10-10 11:19:23.000000000 +0200 @@ -0,0 +1 @@ +.osc ++++++ libxmp-4.7.3.tar.gz -> libxmp-4.7.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/CMakeLists.txt new/libxmp-4.7.4/CMakeLists.txt --- old/libxmp-4.7.3/CMakeLists.txt 2026-09-11 04:10:10.000000000 +0200 +++ new/libxmp-4.7.4/CMakeLists.txt 2026-10-10 05:21:40.000000000 +0200 @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.2...3.10) -project(libxmp VERSION 4.7.3 LANGUAGES C) +project(libxmp VERSION 4.7.4 LANGUAGES C) set(LIBXMP_DEFINES) set(LIBXMPLITE_DEFINES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/configure new/libxmp-4.7.4/configure --- old/libxmp-4.7.3/configure 2026-09-11 04:10:50.000000000 +0200 +++ new/libxmp-4.7.4/configure 2026-10-10 05:21:50.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for libxmp 4.7.3. +# Generated by GNU Autoconf 2.69 for libxmp 4.7.4. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -577,8 +577,8 @@ # Identity of this package. PACKAGE_NAME='libxmp' PACKAGE_TARNAME='libxmp' -PACKAGE_VERSION='4.7.3' -PACKAGE_STRING='libxmp 4.7.3' +PACKAGE_VERSION='4.7.4' +PACKAGE_STRING='libxmp 4.7.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1256,7 +1256,7 @@ # 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. cat <<_ACEOF -\`configure' configures libxmp 4.7.3 to adapt to many kinds of systems. +\`configure' configures libxmp 4.7.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1321,7 +1321,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libxmp 4.7.3:";; + short | recursive ) echo "Configuration of libxmp 4.7.4:";; esac cat <<\_ACEOF @@ -1417,7 +1417,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libxmp configure 4.7.3 +libxmp configure 4.7.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1782,7 +1782,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libxmp $as_me 4.7.3, which was +It was created by libxmp $as_me 4.7.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -5033,11 +5033,11 @@ libxmp_VERSION_MINOR=7 -libxmp_VERSION_PATCH=3 +libxmp_VERSION_PATCH=4 -libxmp_VERSION=4.7.3 +libxmp_VERSION=4.7.4 -libxmplite_VERSION=4.7.3 +libxmplite_VERSION=4.7.4 ac_config_files="$ac_config_files Makefile" @@ -5595,7 +5595,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libxmp $as_me 4.7.3, which was +This file was extended by libxmp $as_me 4.7.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5648,7 +5648,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libxmp config.status 4.7.3 +libxmp config.status 4.7.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/configure.ac new/libxmp-4.7.4/configure.ac --- old/libxmp-4.7.3/configure.ac 2026-09-11 04:10:10.000000000 +0200 +++ new/libxmp-4.7.4/configure.ac 2026-10-10 05:21:40.000000000 +0200 @@ -1,6 +1,6 @@ m4_define([libxmp_VERSION_MAJOR_m4], [4]) m4_define([libxmp_VERSION_MINOR_m4], [7]) -m4_define([libxmp_VERSION_PATCH_m4], [3]) +m4_define([libxmp_VERSION_PATCH_m4], [4]) m4_define([libxmp_VERSION_m4], libxmp_VERSION_MAJOR_m4[.]libxmp_VERSION_MINOR_m4[.]libxmp_VERSION_PATCH_m4) AC_PREREQ(2.60) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/docs/Changelog new/libxmp-4.7.4/docs/Changelog --- old/libxmp-4.7.3/docs/Changelog 2026-09-11 04:10:10.000000000 +0200 +++ new/libxmp-4.7.4/docs/Changelog 2026-10-10 05:21:40.000000000 +0200 @@ -1,6 +1,12 @@ Stable versions --------------- +4.7.4 (20261010): + Changes by Alice Rowan: + - Fix sample bounding in Imago Orpheus IMF loader. + - Remove maximum samples clamp in libxmp_load_epilogue (isn't + protecting anything and causes leaks in the XM loader). + 4.7.3 (20260911): Changes by Alice Rowan: - Fix hangs caused by changing the player mode to an S3M/IT mode diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/include/xmp.h new/libxmp-4.7.4/include/xmp.h --- old/libxmp-4.7.3/include/xmp.h 2026-09-11 04:10:10.000000000 +0200 +++ new/libxmp-4.7.4/include/xmp.h 2026-10-10 05:21:40.000000000 +0200 @@ -9,11 +9,11 @@ extern "C" { #endif -#define XMP_VERSION "4.7.3" -#define XMP_VERCODE 0x040703 +#define XMP_VERSION "4.7.4" +#define XMP_VERCODE 0x040704 #define XMP_VER_MAJOR 4 #define XMP_VER_MINOR 7 -#define XMP_VER_RELEASE 3 +#define XMP_VER_RELEASE 4 #if defined(_WIN32) && !defined(__CYGWIN__) # if defined(LIBXMP_STATIC) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/src/load_helpers.c new/libxmp-4.7.4/src/load_helpers.c --- old/libxmp-4.7.3/src/load_helpers.c 2026-09-11 04:10:10.000000000 +0200 +++ new/libxmp-4.7.4/src/load_helpers.c 2026-10-10 05:21:40.000000000 +0200 @@ -350,8 +350,10 @@ CLAMP(mod->len, 0, XMP_MAX_MOD_LENGTH); CLAMP(mod->pat, 0, 257); /* some formats have an extra pattern */ CLAMP(mod->ins, 0, 255); - CLAMP(mod->smp, 0, MAX_SAMPLES); CLAMP(mod->chn, 0, XMP_MAX_CHANNELS); + if (mod->smp < 0) { + mod->smp = 0; + } /* Fix cases where the restart value is invalid e.g. kc_fall8.xm * from http://aminet.net/mods/mvp/mvp_0002.lha (reported by diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/src/loaders/imf_load.c new/libxmp-4.7.4/src/loaders/imf_load.c --- old/libxmp-4.7.3/src/loaders/imf_load.c 2026-09-11 04:10:10.000000000 +0200 +++ new/libxmp-4.7.4/src/loaders/imf_load.c 2026-10-10 05:21:40.000000000 +0200 @@ -254,7 +254,9 @@ ih.magic = hio_read32b(f); /* Sanity check */ - if (ih.len > 256 || ih.pat > 256 || ih.ins > 255) { + /* Maximum supported instruments by UI is 99, but Orpheus will load + * XMs with 128 and resave all 128 to IMF. */ + if (ih.len > 256 || ih.pat > 256 || ih.ins > 128) { return -1; } @@ -279,7 +281,7 @@ mod->len = ih.len; mod->ins = ih.ins; - mod->smp = 1024; + mod->smp = MAX_SAMPLES; mod->pat = ih.pat; if (ih.flg & 0x01) @@ -422,8 +424,9 @@ ii.nsm = hio_read16l(f); ii.magic = hio_read32b(f); - /* Sanity check */ - if (ii.nsm > 255) + /* Orpheus does not support more than 16 samples per instrument and + * will ignore any samples past 16 hexedited into a file. */ + if (ii.nsm > 16) return -1; /* Imago Orpheus may emit blank instruments with a signature @@ -471,9 +474,18 @@ for (j = 0; j < ii.nsm; j++, smp_num++) { struct xmp_subinstrument *sub = &xxi->sub[j]; - struct xmp_sample *xxs = &mod->xxs[smp_num]; + struct xmp_sample *xxs; int sid; + /* Orpheus is limited to 200 samples, but in edge cases will + * emit files with more than that. Support growing the sample + * list for now just in case... */ + if (smp_num >= mod->smp) { + if (libxmp_realloc_samples(m, mod->smp * 3 / 2) < 0) + return -1; + } + xxs = &mod->xxs[smp_num]; + hio_read(is.name, 13, 1, f); hio_read(is.unused1, 3, 1, f); is.len = hio_read32l(f); @@ -489,7 +501,9 @@ is.dram = hio_read32l(f); is.magic = hio_read32b(f); - if (is.magic != MAGIC_IS10 && is.magic != MAGIC_IW10) { + /* The sample magic can also be four nuls (encountered importing + * an XM with >=13 instruments x 16 samples and resaving as IMF). */ + if (is.magic != MAGIC_IS10 && is.magic != MAGIC_IW10 && is.magic != 0) { D_(D_CRIT "unknown sample %d:%d magic %08x @ %ld", i, j, is.magic, hio_tell(f)); return -1; @@ -526,7 +540,8 @@ (is.flg & IMF_SAMPLE_BIDI) ? 'B' : '.', (is.flg & IMF_SAMPLE_16BIT) ? '+' : '.', (is.flg & IMF_SAMPLE_DEFPAN) ? 'P' : '.', - (is.magic == MAGIC_IS10) ? "IS" : "IW"); + (is.magic == MAGIC_IS10) ? "IS" : + (is.magic == MAGIC_IW10) ? "IW" : ".."); libxmp_c2spd_to_note(is.rate, &sub->xpo, &sub->fin); @@ -539,14 +554,9 @@ } } - mod->smp = smp_num; - mod->xxs = (struct xmp_sample *) realloc(mod->xxs, sizeof(struct xmp_sample) * mod->smp); - if (mod->xxs == NULL) { - return -1; - } - m->xtra = (struct extra_sample_data *) realloc(m->xtra, sizeof(struct extra_sample_data) * mod->smp); - if (m->xtra == NULL) { - return -1; + if (smp_num < mod->smp) { + if (libxmp_realloc_samples(m, smp_num) < 0) + return -1; } m->c4rate = C4_NTSC_RATE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxmp-4.7.3/src/loaders/rtm_load.c new/libxmp-4.7.4/src/loaders/rtm_load.c --- old/libxmp-4.7.3/src/loaders/rtm_load.c 2026-09-11 04:10:10.000000000 +0200 +++ new/libxmp-4.7.4/src/loaders/rtm_load.c 2026-10-10 05:21:40.000000000 +0200 @@ -158,8 +158,6 @@ } -#define MAX_SAMP 1024 - #define FX_NONE 0xff #define FX_EXTENDED_IT 0xfe #define FX_PORTA_UP_MOD 0xf1 @@ -497,7 +495,7 @@ hio_seek(f, start + offset, SEEK_SET); /* ESTIMATED value! We don't know the actual value at this point */ - mod->smp = MAX_SAMP; + mod->smp = MAX_SAMPLES; if (libxmp_init_instrument(m) < 0) return -1;
