Package: motion
Version: 3.2.11-1.1
Severity: important
Tags: patch
Hi,
motion segfaults in motion_log() when it calls strerror_r(); apparently
nowadays the default strerror_r() is the POSIX version, so coding for the
GNU version fails.
The attached patch fixes this.
Regards,
Stephen
-- System Information:
Debian Release: squeeze/sid
APT prefers testing
APT policy: (500, 'testing'), (500, 'stable'), (200, 'unstable'), (1,
'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.26-2-686 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages motion depends on:
ii adduser 3.110 add and remove users and groups
ii debconf [debconf-2.0] 1.5.26 Debian configuration management sy
ii libavcodec52 3:0.svn20090303-1 ffmpeg codec library
ii libavformat52 3:0.svn20090303-1 ffmpeg file format library
ii libavutil49 3:0.svn20090303-1 ffmpeg utility library
ii libc6 2.9-4 GNU C Library: Shared libraries
ii libjpeg62 6b-14 The Independent JPEG Group's JPEG
ii libmysqlclient15off 5.0.51a-24 MySQL database client library
ii libpq5 8.3.7-1 PostgreSQL C client library
Versions of packages motion recommends:
ii ffmpeg 3:0.svn20090303-1 multimedia player, server and enco
Versions of packages motion suggests:
ii mysql-client-5.0 [mysql-clien 5.0.51a-24 MySQL database client binaries
pn postgresql-client <none> (no description available)
-- debconf information:
motion/moved_conf_dir:
diff -u motion-3.2.11.broken/motion.c motion-3.2.11/motion.c
--- motion-3.2.11.broken/motion.c 2008-09-22 01:20:58.000000000 +0200
+++ motion-3.2.11/motion.c 2009-04-13 17:09:40.000000000 +0200
@@ -2738,9 +2738,6 @@
{
int errno_save, n;
char buf[1024];
-#if (!defined(BSD))
- char msg_buf[100];
-#endif
va_list ap;
int threadnr;
@@ -2767,16 +2764,7 @@
if (errno_flag) {
strcat(buf, ": ");
n += 2;
- /*
- * this is bad - apparently gcc/libc wants to use the non-standard GNU
- * version of strerror_r, which doesn't actually put the message into
- * my buffer :-(. I have put in a 'hack' to get around this.
- */
-#if (defined(BSD))
strerror_r(errno_save, buf + n, sizeof(buf) - n); /* 2 for the ': ' */
-#else
- strcat(buf, strerror_r(errno_save, msg_buf, sizeof(msg_buf)));
-#endif
}
/* If 'level' is not negative, send the message to the syslog */
if (level >= 0)