Commit fb23dc2b authored by Natanael Copa's avatar Natanael Copa

main/motion: fix various segfaults

parent 7d3675c9
......@@ -2,7 +2,7 @@
# Maintainer: Mika Havela <mika.havela@gmail.com>
pkgname=motion
pkgver=3.2.12
pkgrel=0
pkgrel=1
pkgdesc="Detect if a significant part of the picture has changed (e.g. from a webcam)."
url="http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome"
arch="all"
......@@ -15,9 +15,12 @@ makedepends="$depends_dev bash jpeg-dev v4l-utils-dev" # Add ffmpeg-dev (when m
install="$pkgname.pre-install"
subpackages="$pkgname-doc"
source="http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz
motion.confd
motion.initd
motion-dist.conf.in.patch"
motion.confd
motion.initd
motion-dist.conf.in.patch
pthread_key_create.patch
get_current_dir_name.patch
"
_builddir="$srcdir"/$pkgname-$pkgver
prepare() {
......@@ -53,4 +56,18 @@ package() {
md5sums="1ba0065ed50509aaffb171594c689f46 motion-3.2.12.tar.gz
c444bfd48ac8d6272d5191836ceb544a motion.confd
3acfe162df3fec28c88c1688e7385189 motion.initd
2ee4fa214987e7643025732f016e9296 motion-dist.conf.in.patch"
2ee4fa214987e7643025732f016e9296 motion-dist.conf.in.patch
1eca97b280069ad0f1d5cb9946145907 pthread_key_create.patch
bd58201a2d4724457b668fb65f7b17c3 get_current_dir_name.patch"
sha256sums="a597f8d7ec0bf3c5fb62722c4eead59717fe01c2ae0d256c642027cea74b2f0a motion-3.2.12.tar.gz
a89d6b9b070d9447694a3acb9c20768bf232ff37d45728aee7f972f5a0a2b855 motion.confd
f65843332b1d342058fcb96f139d2334105a009af10692f4dd619d4ccf63eb85 motion.initd
f164f1c290734378823559bb3f643316f8da8eb61d6fe720761ad4f369a6a074 motion-dist.conf.in.patch
7658950a54363b8aa8090c508f3864f2e15af9def10bdc96f18cdac7cb141ef0 pthread_key_create.patch
8cdf811aa274f08c02bd0b3e67548d337f1472d1a9c041c129deeb15ab74fa7d get_current_dir_name.patch"
sha512sums="d44620f8865420da71ff1dc1e1d8ba8e5465b395f2cf3b2cc9a91d3d415694b26376a9f8e3a1b78ffd0efde22d9e0338daa77237aed38c060dc3577af4c0864c motion-3.2.12.tar.gz
37821907f3b974675be2584460f499e83c3745ee70fa4674e82186fa9f9c04346e3d4a83a0eb3133bdb33ecee169bf590f6d3eda45ef54958f8babdce446ea08 motion.confd
a589e56929a5091c1e398f81b9f1744f393006b429a27e5b7227326e3afc4dd792e30486d66f608208eec18e7062e14f673493aafd55a5fed9d33d160bc723a0 motion.initd
f45fb8f95b7b336b72acf04b29f30413fae1d247d3ad430c36862475ce3148e210d3feb390dc898a369470da20c16c2d26fd018dcb9a7cfe1e4e9c95a46d0f75 motion-dist.conf.in.patch
17da7b1d2c15b5f95246e8c8f88ff82c090110a950f41d02c55840265d46b8838511602f4da489c16b0e31a1b346345a208994b529064771a37e436ad49650e9 pthread_key_create.patch
c1d11dd378673f85db290a1d181b7aa454baac7d6ed77a46cdc24cc83c1fc708bafbd76d851767256b797dae4d2032efecbd6e66ffe532b8fda61d2d920b7d58 get_current_dir_name.patch"
The check for get_current_dir_name appears to be broken. you need
set _GNU_SOURCE for it.
But that triggered other issue with broken ifdefs so we simply avoid
using get_current_dir_name alltogether.
--- ./conf.c.orig
+++ ./conf.c
@@ -32,16 +32,6 @@
#include "video.h"
#endif /* BSD */
-#ifndef HAVE_GET_CURRENT_DIR_NAME
-char *get_current_dir_name(void)
-{
- char *buf = malloc(MAXPATHLEN);
- getwd(buf);
- return buf;
-}
-#endif
-
-
#define stripnewline(x) {if ((x)[strlen(x)-1]=='\n') (x)[strlen(x) - 1] = 0;}
@@ -1645,18 +1635,17 @@
}
if (!fp) { /* Commandline didn't work, try current dir */
- char *path = NULL;
+ char path[PATH_MAX];
if (cnt[0]->conf_filename[0])
motion_log(-1, 1, "Configfile %s not found - trying defaults.", filename);
- if ((path = get_current_dir_name()) == NULL) {
+ if (getcwd(path, PATH_MAX) == NULL) {
motion_log(LOG_ERR, 1, "Error get_current_dir_name");
exit(-1);
}
snprintf(filename, PATH_MAX, "%s/motion.conf", path);
fp = fopen (filename, "r");
- free(path);
}
if (!fp) { /* specified file does not exist... try default file */
make sure we create the tls key before we access in any way.
we also fix the check for broken glibc strerror_r
--- ./motion.c.orig
+++ ./motion.c
@@ -2267,6 +2267,9 @@
struct sigaction sigchild_action;
setup_signals(&sig_handler_action, &sigchild_action);
+ /* Create the TLS key for thread number. */
+ pthread_key_create(&tls_key_threadnr, NULL);
+
motion_startup(1, argc, argv);
#ifdef HAVE_FFMPEG
@@ -2290,9 +2293,6 @@
pthread_attr_init(&thread_attr);
pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
- /* Create the TLS key for thread number. */
- pthread_key_create(&tls_key_threadnr, NULL);
-
do {
if (restart) {
/* Handle the restart situation. Currently the approach is to
@@ -2745,9 +2745,6 @@
{
int errno_save, n;
char buf[1024];
-#if (!defined(BSD)) && (!(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE)
- char msg_buf[100];
-#endif
va_list ap;
int threadnr;
@@ -2780,12 +2778,13 @@
* 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 ': ' */
-#elif (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE
+#if !defined(__GLIBC__) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! defined(_GNU_SOURCE))
strerror_r(errno_save, buf + n, sizeof(buf) - n);
#else
+ {
+ char msg_buf[100];
strncat(buf, strerror_r(errno_save, msg_buf, sizeof(msg_buf)), 1024 - strlen(buf));
+ }
#endif
}
/* If 'level' is not negative, send the message to the syslog */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment