summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorKåre Hampf2020-05-29 17:58:47 +0300
committerKåre Hampf2020-05-29 17:58:47 +0300
commit8fc8e74ec26adc7eca86f28b99dc2133fa828061 (patch)
tree70fb4481d02de523541b6fa27ce256235b1a6a59
parent40b29b135254a0797218a3ec028c07fddb997091 (diff)
downloadaur-scanbd.tar.gz
Fixed more PATH_MAX allocation issues
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD6
-rw-r--r--strcpy-bounds.patch47
-rw-r--r--string-bounds.patch140
4 files changed, 145 insertions, 52 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 4dbb7be5f20d..38b8b0c57459 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = scanbd
pkgdesc = Scanner button daemon looking for scanner button pressed
pkgver = 1.5.1
- pkgrel = 4
+ pkgrel = 5
url = http://scanbd.sourceforge.net/
arch = x86_64
license = GPL2
@@ -9,7 +9,7 @@ pkgbase = scanbd
depends = confuse
backup = etc/scanbd/scanbd.conf
source = https://downloads.sourceforge.net/scanbd/scanbd-1.5.1.tgz
- source = strcpy-bounds.patch
+ source = string-bounds.patch
sha256sums = b69ca5a474b81516d19c38082d949363c243df9ab9742315aaae499723267e5f
sha256sums = SKIP
diff --git a/PKGBUILD b/PKGBUILD
index 0719bf756fb0..ed7073cdd8a8 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -4,13 +4,13 @@
pkgname=scanbd
pkgver=1.5.1
-pkgrel=4
+pkgrel=5
pkgdesc="Scanner button daemon looking for scanner button pressed"
arch=('x86_64')
url="http://scanbd.sourceforge.net/"
license=('GPL2')
depends=('sane' 'confuse')
-source=("https://downloads.sourceforge.net/scanbd/scanbd-$pkgver.tgz" "strcpy-bounds.patch")
+source=("https://downloads.sourceforge.net/scanbd/scanbd-$pkgver.tgz" "string-bounds.patch")
sha256sums=('b69ca5a474b81516d19c38082d949363c243df9ab9742315aaae499723267e5f' 'SKIP')
backup=('etc/scanbd/scanbd.conf')
@@ -37,7 +37,7 @@ prepare() {
sed -i 's@\(debug-level =\)7$@\1 2@' conf/scanbd.conf
sed -i 's@\(SANE_CONFIG_DIR=\)\(/etc/scanbd\)@\1\2/sane.d@' conf/scanbd.conf
- patch --forward --strip=1 --input="${srcdir}/strcpy-bounds.patch"
+ patch --forward --strip=1 --input="${srcdir}/string-bounds.patch"
}
build() {
diff --git a/strcpy-bounds.patch b/strcpy-bounds.patch
deleted file mode 100644
index a82a9022e130..000000000000
--- a/strcpy-bounds.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-diff -ruN 1.5.1/src/scanbd/config.c 1.5.1-patched/src/scanbd/config.c
---- 1.5.1/src/scanbd/config.c 2017-04-19 10:53:25.000000000 +0300
-+++ 1.5.1-patched/src/scanbd/config.c 2019-09-05 14:54:05.267421740 +0300
-@@ -102,8 +102,8 @@
- cfg = NULL;
- }
-
-- char wd[PATH_MAX] = {};
-- char config_file[PATH_MAX] = {};
-+ char wd[PATH_MAX+1] = {};
-+ char config_file[PATH_MAX+1] = {};
- char* scanbd_conf_dir = NULL;
-
- // get current directory
-diff -ruN 1.5.1/src/scanbd/scanbd.c 1.5.1-patched/src/scanbd/scanbd.c
---- 1.5.1/src/scanbd/scanbd.c 2017-04-19 10:53:25.000000000 +0300
-+++ 1.5.1-patched/src/scanbd/scanbd.c 2019-09-05 14:54:40.957142882 +0300
-@@ -350,7 +350,7 @@
- }
-
- // We do this here as debugging is only completely initialized here
-- char prog_path[PATH_MAX] = "";
-+ char prog_path[PATH_MAX+1] = "";
- strncpy(prog_path, argv[0], PATH_MAX);
- char *my_name = basename(prog_path);
- if ( strncmp(my_name, NAME_MANAGER_MODE, PATH_MAX) == 0 ) {
-diff -ruN 1.5.1/src/scanbd/slog.c 1.5.1-patched/src/scanbd/slog.c
---- 1.5.1/src/scanbd/slog.c 2017-04-19 10:53:25.000000000 +0300
-+++ 1.5.1-patched/src/scanbd/slog.c 2019-09-05 14:54:05.267421740 +0300
-@@ -26,7 +26,7 @@
- bool debug = false;
- unsigned int debug_level = 0;
-
--static char lpre[LINE_MAX] = "";
-+static char lpre[LINE_MAX+1] = "";
- static int isInitialized = 0;
-
- void slog_init(const char *string) {
-@@ -37,7 +37,7 @@
- void
- slog(unsigned int level, const char *format, ...) {
- va_list ap;
-- char buffer[LINE_MAX] = "";
-+ char buffer[LINE_MAX+1] = "";
-
- if (isInitialized == 0) {
- slog_init("");
diff --git a/string-bounds.patch b/string-bounds.patch
new file mode 100644
index 000000000000..cc2e72a3fc7e
--- /dev/null
+++ b/string-bounds.patch
@@ -0,0 +1,140 @@
+diff --git a/src/scanbd/config.c b/src/scanbd/config.c
+index 7fa9c2d..9399333 100644
+--- a/src/scanbd/config.c
++++ b/src/scanbd/config.c
+@@ -102,8 +102,8 @@ void cfg_do_parse(const char *config_file_name) {
+ cfg = NULL;
+ }
+
+- char wd[PATH_MAX] = {};
+- char config_file[PATH_MAX] = {};
++ char wd[PATH_MAX+1] = {};
++ char config_file[PATH_MAX+1] = {};
+ char* scanbd_conf_dir = NULL;
+
+ // get current directory
+@@ -148,7 +148,7 @@ void cfg_do_parse(const char *config_file_name) {
+
+ char *make_script_path_abs(const char *script) {
+
+- char* script_abs = malloc(PATH_MAX);
++ char* script_abs = malloc(PATH_MAX+1);
+ assert(script_abs);
+ strncpy(script_abs, SCANBD_NULL_STRING, PATH_MAX);
+
+diff --git a/src/scanbd/dbus.c b/src/scanbd/dbus.c
+index 428980c..33de735 100644
+--- a/src/scanbd/dbus.c
++++ b/src/scanbd/dbus.c
+@@ -196,8 +196,8 @@ static void hook_device_ex(const char *param, const char *action_name, const cha
+ e += 1;
+ }
+ else {
+- char buf[PATH_MAX];
+- char* ptr = getcwd(buf, PATH_MAX - 1);
++ char buf[PATH_MAX+1];
++ char* ptr = getcwd(buf, PATH_MAX);
+ if (!ptr) {
+ slog(SLOG_ERROR, "can't get pwd");
+ }
+@@ -751,7 +751,7 @@ bool dbus_init(void) {
+ return false;
+ }
+ #else
+- char match[PATH_MAX] = {};
++ char match[PATH_MAX+1] = {};
+ snprintf(match, PATH_MAX, "type='signal',interface='%s'", DBUS_HAL_INTERFACE);
+ slog(SLOG_ERROR, "dbus match %s", match);
+ dbus_bus_add_match(conn, match, &dbus_error);
+diff --git a/src/scanbd/sane.c b/src/scanbd/sane.c
+index b031904..48691c6 100644
+--- a/src/scanbd/sane.c
++++ b/src/scanbd/sane.c
+@@ -957,8 +957,8 @@ static void* sane_poll(void* arg) {
+ e += 1;
+ }
+ else {
+- char buf[PATH_MAX];
+- char* ptr = getcwd(buf, PATH_MAX - 1);
++ char buf[PATH_MAX+1];
++ char* ptr = getcwd(buf, PATH_MAX);
+ if (!ptr) {
+ slog(SLOG_ERROR, "can't get pwd");
+ }
+diff --git a/src/scanbd/scanbd.c b/src/scanbd/scanbd.c
+index feb73ae..3c8902c 100644
+--- a/src/scanbd/scanbd.c
++++ b/src/scanbd/scanbd.c
+@@ -350,7 +350,7 @@ int main(int argc, char** argv) {
+ }
+
+ // We do this here as debugging is only completely initialized here
+- char prog_path[PATH_MAX] = "";
++ char prog_path[PATH_MAX+1] = "";
+ strncpy(prog_path, argv[0], PATH_MAX);
+ char *my_name = basename(prog_path);
+ if ( strncmp(my_name, NAME_MANAGER_MODE, PATH_MAX) == 0 ) {
+diff --git a/src/scanbd/scanbuttond_loader.c b/src/scanbd/scanbuttond_loader.c
+index 857834a..06b13f6 100644
+--- a/src/scanbd/scanbuttond_loader.c
++++ b/src/scanbd/scanbuttond_loader.c
+@@ -29,11 +29,11 @@
+ // this file is basicly the same as loader.c from the scanbuttond-project,
+ // but modified to meet the needs of scanbd
+
+-static char lib_dir[PATH_MAX] = SCANBD_NULL_STRING;
++static char lib_dir[PATH_MAX+1] = SCANBD_NULL_STRING;
+
+ int scanbtnd_init() {
+ char *backends_dir = NULL;
+- char backends_dir_abs[PATH_MAX] = SCANBD_NULL_STRING;
++ char backends_dir_abs[PATH_MAX+1] = SCANBD_NULL_STRING;
+
+ backends_dir = cfg_getstr(cfg_getsec(cfg, C_GLOBAL), C_SCANBUTTONS_BACKENDS_DIR);
+ if ( backends_dir && (backends_dir[0] != '/')) {
+@@ -83,7 +83,7 @@ backend_t* scanbtnd_load_backend(const char* filename){
+ const char* error;
+ void* dll_handle;
+
+- char dll_path[PATH_MAX];
++ char dll_path[PATH_MAX+1];
+ strncpy(dll_path, lib_dir, PATH_MAX);
+ strncat(dll_path, "/", PATH_MAX - strlen(dll_path));
+ strncat(dll_path, filename, PATH_MAX - strlen(dll_path));
+diff --git a/src/scanbd/scanbuttond_wrapper.c b/src/scanbd/scanbuttond_wrapper.c
+index 02b7162..6bbb289 100644
+--- a/src/scanbd/scanbuttond_wrapper.c
++++ b/src/scanbd/scanbuttond_wrapper.c
+@@ -605,8 +605,8 @@ void* scbtn_poll(void* arg) {
+ e += 1;
+ }
+ else {
+- char buf[PATH_MAX];
+- char* ptr = getcwd(buf, PATH_MAX - 1);
++ char buf[PATH_MAX+1];
++ char* ptr = getcwd(buf, PATH_MAX);
+ if (!ptr) {
+ slog(SLOG_ERROR, "can't get pwd");
+ }
+diff --git a/src/scanbd/slog.c b/src/scanbd/slog.c
+index 09fe1de..17b04a3 100644
+--- a/src/scanbd/slog.c
++++ b/src/scanbd/slog.c
+@@ -26,7 +26,7 @@
+ bool debug = false;
+ unsigned int debug_level = 0;
+
+-static char lpre[LINE_MAX] = "";
++static char lpre[LINE_MAX+1] = "";
+ static int isInitialized = 0;
+
+ void slog_init(const char *string) {
+@@ -37,7 +37,7 @@ void slog_init(const char *string) {
+ void
+ slog(unsigned int level, const char *format, ...) {
+ va_list ap;
+- char buffer[LINE_MAX] = "";
++ char buffer[LINE_MAX+1] = "";
+
+ if (isInitialized == 0) {
+ slog_init("");