Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock

Hello,

The upgrade of libc6 to version 2.23 seems to have triggered a bug
in mbrola, which makes it just always crash at exit, thus making it
unusable (bug #856331).

mbrola is non-free, we don't even have the source code (University of
Mons sent me a source code, but an older version, which does not have
the crash) so we just can't investigate.  However, since it is at exit,
an ugly workaround is possible: just make the exit() function call the
exit() system call, without trying to clean stuff. It happens that
mbrola properly closes its output before calling exit(), so that does
not hurt the purpose of mbrola.

I have attached the debdiff that adds this workaround.

unblock mbrola/3.01h+2-2

Samuel

-- System Information:
Debian Release: 9.0
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 
'testing-debug'), (500, 'buildd-unstable'), (500, 'unstable'), (500, 'stable'), 
(500, 'oldstable'), (1, 'experimental-debug'), (1, 'buildd-experimental'), (1, 
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.10.0 (SMP w/4 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

-- 
Samuel
X-Favorit-Cartoon: Calvin and Hobbes
 -+- Mail header of Wim van Dorst -+-
diff -Nru mbrola-3.01h+2/debian/changelog mbrola-3.01h+2/debian/changelog
--- mbrola-3.01h+2/debian/changelog     2016-09-28 09:21:27.000000000 +0200
+++ mbrola-3.01h+2/debian/changelog     2017-02-28 14:26:24.000000000 +0100
@@ -1,3 +1,17 @@
+mbrola (3.01h+2-2) unstable; urgency=medium
+
+  * Add libstrongexit.so workaround. mbrola crashes on exit() cleanup, so
+    don't bother trying to exit cleanly, mbrola does close the output file
+    fine anyway (Closes: #856331).
+    - install: install libstrongexit.so and wrapper script to use it
+    - control:
+      - build-depend on gcc-multilib on amd64 for cross-compiling 32bit
+      libstrongexit.so
+      - build-depend on dh-exec for multiarch path
+      - depend on dpkg-dev for multiarch path at exec.
+
+ -- Samuel Thibault <[email protected]>  Tue, 28 Feb 2017 14:26:24 +0100
+
 mbrola (3.01h+2-1) unstable; urgency=medium
 
   * Add armhf build from upstream (Closes: 839021).
diff -Nru mbrola-3.01h+2/debian/control mbrola-3.01h+2/debian/control
--- mbrola-3.01h+2/debian/control       2016-09-28 09:18:02.000000000 +0200
+++ mbrola-3.01h+2/debian/control       2017-02-28 14:19:19.000000000 +0100
@@ -2,7 +2,7 @@
 Section: non-free/sound
 Priority: optional
 Maintainer: Samuel Thibault <[email protected]>
-Build-Depends: debhelper (>= 10), unzip, libc6-i386 [amd64] | libc6:i386 
[amd64]
+Build-Depends: debhelper (>= 10), dh-exec (>= 0.3), unzip, libc6-dev-i386 
[amd64] | libc6-dev:i386 [amd64], gcc-multilib [amd64]
 Standards-Version: 3.9.8
 Homepage: http://tcts.fpms.ac.be/synthesis/
 XS-Autobuild: yes
@@ -10,7 +10,7 @@
 Package: mbrola
 Architecture: i386 amd64 alpha powerpc sparc armel armhf
 Multi-Arch: foreign
-Depends: ${misc:Depends}, ${shlibs:Depends} [!amd64], libc6:i386 [amd64] | 
libc6-i386 [amd64]
+Depends: ${misc:Depends}, ${shlibs:Depends} [!amd64], libc6:i386 [amd64] | 
libc6-i386 [amd64], dpkg-dev
 Suggests: mbrola-voice, espeak, cicero
 Description: Multilingual software speech synthesizer
  Mbrola is Thierry Dutoit's phonemizer for multilingual speech synthesis. The
diff -Nru mbrola-3.01h+2/debian/install mbrola-3.01h+2/debian/install
--- mbrola-3.01h+2/debian/install       2015-12-22 21:39:26.000000000 +0100
+++ mbrola-3.01h+2/debian/install       2017-02-28 14:00:57.000000000 +0100
@@ -1 +1,4 @@
-mbrola /usr/bin
+#! /usr/bin/dh-exec
+mbrola /usr/lib/${DEB_HOST_MULTIARCH}/mbrola
+debian/strongexit/libstrongexit.so /usr/lib/${DEB_HOST_MULTIARCH}/mbrola
+debian/strongexit/mbrola /usr/bin
diff -Nru mbrola-3.01h+2/debian/rules mbrola-3.01h+2/debian/rules
--- mbrola-3.01h+2/debian/rules 2016-09-28 09:15:12.000000000 +0200
+++ mbrola-3.01h+2/debian/rules 2017-02-28 14:22:50.000000000 +0100
@@ -4,6 +4,7 @@
        dh $@
 
 DEB_HOST_ARCH?=$(shell dpkg-architecture -qDEB_HOST_ARCH)
+DEB_HOST_MULTIARCH?=$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
 README_ZIPBALL=mbr301h_i386-ppc-alpha-ultra.zip
 
 TARBALL=
@@ -17,7 +18,9 @@
 
 ifeq ($(DEB_HOST_ARCH),amd64)
 ZIPBALL=mbr301h_i386-ppc-alpha-ultra.zip
+# See end of README.Debian
 FILENAME=unpacked/mbrola-linux-i386
+CFLAGS+=-m32
 endif
 
 ifeq ($(DEB_HOST_ARCH),alpha)
@@ -65,3 +68,10 @@
        cp -f $(FILENAME) mbrola
        chmod u+w,+x mbrola
        strip mbrola
+       $(MAKE) -C debian/strongexit
+
+override_dh_auto_clean:
+       $(MAKE) clean -C debian/strongexit
+
+override_dh_shlibdeps:
+       dh_shlibdeps -- -e 
debian/mbrola/usr/lib/$(DEB_HOST_MULTIARCH)/mbrola/mbrola
diff -Nru mbrola-3.01h+2/debian/source/lintian-overrides 
mbrola-3.01h+2/debian/source/lintian-overrides
--- mbrola-3.01h+2/debian/source/lintian-overrides      1970-01-01 
01:00:00.000000000 +0100
+++ mbrola-3.01h+2/debian/source/lintian-overrides      2017-02-28 
14:24:15.000000000 +0100
@@ -0,0 +1 @@
+mbrola source: depends-on-build-essential-package-without-using-version 
libc6-dev [build-depends: libc6-dev:i386 [amd64]]
diff -Nru mbrola-3.01h+2/debian/strongexit/Makefile 
mbrola-3.01h+2/debian/strongexit/Makefile
--- mbrola-3.01h+2/debian/strongexit/Makefile   1970-01-01 01:00:00.000000000 
+0100
+++ mbrola-3.01h+2/debian/strongexit/Makefile   2017-02-28 12:14:50.000000000 
+0100
@@ -0,0 +1,9 @@
+LIB=libstrongexit.so
+
+all: $(LIB)
+
+$(LIB): strongexit.c
+       $(CC) $(CFLAGS) $< -o $@ -shared -fPIC $(LDFLAGS)
+
+clean:
+       rm -f $(LIB)
diff -Nru mbrola-3.01h+2/debian/strongexit/mbrola 
mbrola-3.01h+2/debian/strongexit/mbrola
--- mbrola-3.01h+2/debian/strongexit/mbrola     1970-01-01 01:00:00.000000000 
+0100
+++ mbrola-3.01h+2/debian/strongexit/mbrola     2017-02-28 14:26:24.000000000 
+0100
@@ -0,0 +1,5 @@
+#!/bin/bash
+# mbrola crashes on exit() cleanup, so don't bother trying to exit cleanly,
+# mbrola does close the output file fine anyway (see #856331)
+DEB_HOST_MULTIARCH=`dpkg-architecture -qDEB_HOST_MULTIARCH`
+LD_PRELOAD=/usr/lib/$DEB_HOST_MULTIARCH/mbrola/libstrongexit.so exec 
/usr/lib/$DEB_HOST_MULTIARCH/mbrola/mbrola "$@"
diff -Nru mbrola-3.01h+2/debian/strongexit/strongexit.c 
mbrola-3.01h+2/debian/strongexit/strongexit.c
--- mbrola-3.01h+2/debian/strongexit/strongexit.c       1970-01-01 
01:00:00.000000000 +0100
+++ mbrola-3.01h+2/debian/strongexit/strongexit.c       2017-02-28 
14:15:09.000000000 +0100
@@ -0,0 +1,11 @@
+#define _GNU_SOURCE
+#include <unistd.h>
+#ifdef __i386__
+#define SYS_exit 1
+#else
+#include <sys/syscall.h>
+#endif
+void exit(int status) {
+       syscall(SYS_exit, status);
+       while(1);
+}

Reply via email to