#1097239 libonig: ftbfs with GCC-15

Package:
src:libonig
Source:
src:libonig
Submitter:
Matthias Klose
Date:
2025-09-05 09:33:01 UTC
Severity:
normal
Tags:
#1097239#5
Date:
2025-02-17 17:32:51 UTC
From:
To:
[This bug is NOT targeted to the upcoming trixie release]

Please keep this issue open in the bug tracker for the package it
was filed for.  If a fix in another package is required, please
file a bug for the other package (or clone), and add a block in this
package. Please keep the issue open until the package can be built in
a follow-up test rebuild.

The package fails to build in a test rebuild on at least amd64 with
gcc-15/g++-15, but succeeds to build with gcc-14/g++-14. The
severity of this report will be raised before the forky release.

The full build log can be found at:
http://qa-logs.debian.net/2025/02/16/amd64exp/libonig_6.9.9-1_unstable_gccexp.log.gz
The last lines of the build log are at the end of this report.

To build with GCC 15, either set CC=gcc-15 CXX=g++-15 explicitly,
or install the gcc, g++, gfortran, ... packages from experimental.

  apt-get -t=experimental install g++

GCC 15 now defaults to the C23/C++23 standards, exposing many FTBFS.
Other Common build failures are new warnings resulting in build failures
with -Werror turned on, or new/dropped symbols in Debian symbols files.
For other C/C++ related build failures see the porting guide at
http://gcc.gnu.org/gcc-15/porting_to.html

[...]
regparse.c:1939:24: error: passing argument 2 of 'onig_st_foreach' from incompatible pointer type [-Wincompatible-pointer-types]
 1939 |     onig_st_foreach(t, i_free_callout_tag_entry, 0);
      |                        ^~~~~~~~~~~~~~~~~~~~~~~~
      |                        |
      |                        int (*)(OnigUChar *, CalloutTagVal,  void *) {aka int (*)(unsigned char *, long int,  void *)}
st.h:55:31: note: expected 'int (*)(void)' but argument is of type 'int (*)(OnigUChar *, CalloutTagVal,  void *)' {aka 'int (*)(unsigned char *, long int,  void *)'}
   55 | int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t));
      |                               ^~~~~~~~~~~~~~~~
st.h:35:18: note: in definition of macro '_'
   35 | # define _(args) args
      |                  ^~~~
regparse.c:1929:1: note: 'i_free_callout_tag_entry' declared here
 1929 | i_free_callout_tag_entry(UChar* key, CalloutTagVal e, void* arg ARG_UNUSED)
      | ^~~~~~~~~~~~~~~~~~~~~~~~
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regext.c -o regext.o >/dev/null 2>&1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regtrav.c -o regtrav.o >/dev/null 2>&1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regsyntax.c -o regsyntax.o >/dev/null 2>&1
/bin/bash ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.  -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c -o regversion.lo regversion.c
/bin/bash ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.  -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c -o st.lo st.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regversion.c  -fPIC -DPIC -o .libs/regversion.o
/bin/bash ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.  -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c -o reggnu.lo reggnu.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c st.c  -fPIC -DPIC -o .libs/st.o
make[3]: *** [Makefile:598: regparse.lo] Error 1
make[3]: *** Waiting for unfinished jobs....
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c reggnu.c  -fPIC -DPIC -o .libs/reggnu.o
st.c: In function 'onig_st_cleanup_safe':
st.c:454:21: error: passing argument 2 of 'onig_st_foreach' from incompatible pointer type [-Wincompatible-pointer-types]
  454 |   st_foreach(table, delete_never, never);
      |                     ^~~~~~~~~~~~
      |                     |
      |                     int (*)(st_data_t,  st_data_t,  st_data_t) {aka int (*)(long unsigned int,  long unsigned int,  long unsigned int)}
In file included from st.c:10:
st.h:55:31: note: expected 'int (*)(void)' but argument is of type 'int (*)(st_data_t,  st_data_t,  st_data_t)' {aka 'int (*)(long unsigned int,  long unsigned int,  long unsigned int)'}
   55 | int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t));
      |                               ^~~~~~~~~~~~~~~~
st.h:35:18: note: in definition of macro '_'
   35 | # define _(args) args
      |                  ^~~~
st.c:439:1: note: 'delete_never' declared here
  439 | delete_never(st_data_t key __attribute__ ((unused)), st_data_t value,
      | ^~~~~~~~~~~~
In file included from st.c:9:
st.c: At top level:
regint.h:229:37: error: conflicting types for 'onig_st_foreach'; have 'int(st_table *, int (*)(st_data_t,  st_data_t,  st_data_t), st_data_t)' {aka 'int(st_table *, int (*)(long unsigned int,  long unsigned int,  long unsigned int), long unsigned int)'}
  229 | #define st_foreach                  onig_st_foreach
      |                                     ^~~~~~~~~~~~~~~
st.c:459:1: note: in expansion of macro 'st_foreach'
  459 | st_foreach(st_table* table, int (*func)(st_data_t, st_data_t, st_data_t), st_data_t arg)
      | ^~~~~~~~~~
regint.h:229:37: note: previous declaration of 'onig_st_foreach' with type 'int(st_table *, int (*)(void), st_data_t)' {aka 'int(st_table *, int (*)(void), long unsigned int)'}
  229 | #define st_foreach                  onig_st_foreach
      |                                     ^~~~~~~~~~~~~~~
st.h:55:5: note: in expansion of macro 'st_foreach'
   55 | int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t));
      |     ^~~~~~~~~~
make[3]: *** [Makefile:598: st.lo] Error 1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regversion.c -o regversion.o >/dev/null 2>&1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regerror.c -o regerror.o >/dev/null 2>&1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c reggnu.c -o reggnu.o >/dev/null 2>&1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regenc.c -o regenc.o >/dev/null 2>&1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regcomp.c -o regcomp.o >/dev/null 2>&1
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -DUSE_POSIX_API -DUSE_BINARY_COMPATIBLE_POSIX_API -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/reproducible-path/libonig-6.9.9=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -c regexec.c -o regexec.o >/dev/null 2>&1
make[3]: Leaving directory '/build/reproducible-path/libonig-6.9.9/src'
make[2]: *** [Makefile:431: all] Error 2
make[2]: Leaving directory '/build/reproducible-path/libonig-6.9.9/src'
make[1]: *** [Makefile:505: all-recursive] Error 1
make[1]: Leaving directory '/build/reproducible-path/libonig-6.9.9'
dh_auto_build: error: make -j8 returned exit code 2
make: *** [debian/rules:17: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2

#1097239#12
Date:
2025-02-23 13:27:04 UTC
From:
To:
Control: tags -1 + confirmed patch upstream fixed-upstream
Control: forwared -1 https://github.com/kkos/oniguruma/commit/5f1408dee4a01dee60c4cd67f2e2e46484ef50a5

The build with the C23 standard has been fixed upstream via
https://github.com/kkos/oniguruma/commit/5f1408dee4a01dee60c4cd67f2e2e46484ef50a5
and cherry-picking this patch works without fuzz fixing the build.

Helmut

#1097239#23
Date:
2025-09-05 09:23:30 UTC
From:
To:
Unknown header: references: <E1tk4zD-009MMi-Mc@paradis.debian.org>
 <20250223132704.GA4077770@subdivi.de>
Unknown header: in-reply-to: <20250223132704.GA4077770@subdivi.de>

the 'develop' branch on Vcs-Git[0] contains upstream version 6.9.10,
which also includes this fix - it was prepared during the freeze, so I
suspect it should just be uploaded now ;)

0: https://git.jff.email/cgit/libonig.git/log/?h=develop