pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pkg/60059: math/gnumeric 10.0_2025Q4 segfaults on RPi4
The following reply was made to PR pkg/60059; it has been noted by GNATS.
From: Ramiro Aceves <ea1abz%gmail.com@localhost>
To: gnats-bugs%netbsd.org@localhost, pkg-manager%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
pkgsrc-bugs%netbsd.org@localhost
Cc:
Subject: Re: pkg/60059: math/gnumeric 10.0_2025Q4 segfaults on RPi4
Date: Sun, 15 Mar 2026 09:46:34 +0100
El 11/3/26 a las 20:30, Benny Siegert via gnats escribió:
> The following reply was made to PR pkg/60059; it has been noted by GNATS.
>
> From: Benny Siegert <bsiegert%netbsd.org@localhost>
> To: Ramiro Aceves <ea1abz%gmail.com@localhost>
> Cc: gnats-bugs%netbsd.org@localhost, pkg-manager%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
> pkgsrc-bugs%netbsd.org@localhost
> Subject: Re: pkg/60059: math/gnumeric 10.0_2025Q4 segfaults on RPi4
> Date: Wed, 11 Mar 2026 19:28:46 +0000 (UTC)
>
> >> Changing from "long double" to "double" inside
> >> fmt-fp function in the file
> >> /usr/pkgsrc/misc/goffice0.10/work/goffice-0.10.60/goffice/math
> >> fixes de crash.
> >>
> >> I do not know how to properly fix it only for aarch64 and if it is a
> >> proper fix.
>
> Thanks, this is actually helpful! At the risk of being flamed to death, I
> used Gemini to explain the cause of the crash. It suggests that this is a
> pointer underflow specifically on aarch64, because the calculation of the
> array size in that function is wrong. It suggests this patch:
>
> --- go-dtoa.c
> +++ go-dtoa.c
> @@ -227,7 +227,7 @@
> if (y) y *= 0x1p28, e2-=28;
>
> if (e2<0) a=r=z=big;
> - else a=r=z=big+sizeof(big)/sizeof(*big) - LDBL_MANT_DIG - 1;
> + else a=r=z=big+sizeof(big)/sizeof(*big) - (LDBL_MANT_DIG+28)/9 - 1;
>
> do {
> *z = y;
>
> It also suggests that the code is lifted from musl libc :)
>
> Can you try recompiling goffice0.10 with this change?
>
> Thanks!
>
> --
> Benny
>
Hello Benny,
I have recompiled goffice changing only one line manually as you told but it segfaults again (make replace):
netbsd-raspa4# diff -Nru /usr/pkgsrc/misc/goffice0.10/work/goffice-0.10.59/goffice/math/go-dtoa.c.orig
/usr/pkgsrc/misc/goffice0.10/work/goffice-0.10.59/goffice/math/go-dtoa.c
--- /usr/pkgsrc/misc/goffice0.10/work/goffice-0.10.59/goffice/math/go-dtoa.c.orig 2025-03-01 22:10:00.000000000 +0100
+++ /usr/pkgsrc/misc/goffice0.10/work/goffice-0.10.59/goffice/math/go-dtoa.c 2026-03-15 09:09:03.728612918 +0100
@@ -49,6 +49,14 @@
#define go_finitel isfinite
#endif
+#if defined(__NetBSD__)
+#if (__NetBSD_Version__ >= 699001700)
+/* in <math.h> in newer NetBSDs, should already be included */
+#else
+/* OK, this will lose precision and range, but what else to do? */
+#define frexpl(ldv,i) (long double)frexp((double)ldv, i)
+#endif
+#endif /* __NetBSD__ */
/* musl code starts here */
@@ -234,7 +242,8 @@
if (y) y *= 0x1p28, e2-=28;
if (e2<0) a=r=z=big;
- else a=r=z=big+sizeof(big)/sizeof(*big) - LDBL_MANT_DIG - 1;
+/*else a=r=z=big+sizeof(big)/sizeof(*big) - LDBL_MANT_DIG - 1;*/
+ else a=r=z=big+sizeof(big)/sizeof(*big) - (LDBL_MANT_DIG+28)/9 - 1;
do {
*z = y;
netbsd-raspa4#
netbsd-raspa4$ gdb /usr/pkg/bin/gnumeric
GNU gdb (GDB) 11.0.50.20200914-git
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "aarch64--netbsd".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/pkg/bin/gnumeric...
(No debugging symbols found in /usr/pkg/bin/gnumeric)
(gdb) run
Starting program: /usr/pkg/bin/gnumeric
[New LWP 1771 of process 10389]
[New LWP 28988 of process 10389]
[New LWP 21892 of process 10389]
[New LWP 8735 of process 10389]
(gnumeric:10389): GVFS-RemoteVolumeMonitor-WARNING **: 09:37:26.260: cannot open directory /usr/pkg/share/gvfs/remote-volume-monitors: Falló al abrir
la carpeta «/usr/pkg/share/gvfs/remote-volume-monitors»: No such file or directory
[New LWP 27385 of process 10389]
Thread 1 "" received signal SIGSEGV, Segmentation fault.
0x0000fde79e13a13c in fmt_fp (f=f@entry=0xfde796a92400, y=inf, y@entry=0,
w=w@entry=1, p=<optimized out>, p@entry=0, fl=fl@entry=536870918,
t=t@entry=70) at math/go-dtoa.c:249
249 *z = y;
(gdb)
(gdb) list
244 if (e2<0) a=r=z=big;
245 /*else a=r=z=big+sizeof(big)/sizeof(*big) - LDBL_MANT_DIG - 1;*/
246 else a=r=z=big+sizeof(big)/sizeof(*big) - (LDBL_MANT_DIG+28)/9 - 1;
247
248 do {
249 *z = y;
250 y = 1000000000*(y-*z++);
251 } while (y);
252
253 while (e2>0) {
(gdb)
Regards.
Ramiro.
Home |
Main Index |
Thread Index |
Old Index