summaryrefslogtreecommitdiff
path: root/extra/sane/segfault-avahi-fix-kodakio.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/sane/segfault-avahi-fix-kodakio.patch')
-rw-r--r--extra/sane/segfault-avahi-fix-kodakio.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/extra/sane/segfault-avahi-fix-kodakio.patch b/extra/sane/segfault-avahi-fix-kodakio.patch
new file mode 100644
index 000000000..23f9d1ca9
--- /dev/null
+++ b/extra/sane/segfault-avahi-fix-kodakio.patch
@@ -0,0 +1,98 @@
+From 37523b867d411c2f82d08128246be7e38bc9812c Mon Sep 17 00:00:00 2001
+From: Paul Newall <quandry@ntlworld.com>
+Date: Mon, 14 Oct 2013 22:22:53 +0100
+Subject: [PATCH] Bugfix in kodakaio.c to fix segfault when non kodak scanners
+ return unexpected data via avahi auto discovery
+
+---
+ backend/kodakaio.c | 43 ++++++++++++++++++++++++++++++----------
+ doc/descriptions/kodakaio.desc | 2 +-
+ 3 files changed, 37 insertions(+), 12 deletions(-)
+
+diff --git a/backend/kodakaio.c b/backend/kodakaio.c
+index 8c4583a..b442e50 100644
+--- a/backend/kodakaio.c
++++ b/backend/kodakaio.c
+@@ -127,7 +127,7 @@ for ubuntu 12.10
+
+ #define KODAKAIO_VERSION 02
+ #define KODAKAIO_REVISION 4
+-#define KODAKAIO_BUILD 6
++#define KODAKAIO_BUILD 7
+
+ /* for usb (but also used for net though it's not required). */
+ #define MAX_BLOCK_SIZE 32768
+@@ -2184,6 +2184,7 @@ static void resolve_callback(
+ AvahiLookupResultFlags flags,
+ AVAHI_GCC_UNUSED void* userdata) {
+
++ AvahiStringList *vid_pair_list = NULL, *pid_pair_list = NULL;
+ char *pidkey, *pidvalue;
+ char *vidkey, *vidvalue;
+ size_t valuesize;
+@@ -2204,20 +2205,40 @@ static void resolve_callback(
+ avahi_address_snprint(a, sizeof(a), address);
+
+ /* Output short for Kodak ESP */
+- DBG(min(10,DBG_AUTO), "%s:%u %s ", a,port,host_name);
+- avahi_string_list_get_pair(avahi_string_list_find(txt, "vid"),
+- &vidkey, &vidvalue, &valuesize);
+- DBG(min(10,DBG_AUTO), "%s=%s ", vidkey, vidvalue);
+- avahi_string_list_get_pair(avahi_string_list_find(txt, "pid"),
+- &pidkey, &pidvalue, &valuesize);
+- DBG(min(10,DBG_AUTO), "%s=%s\n", pidkey, pidvalue);
++ DBG(min(10,DBG_AUTO), "%s:%u %s\n", a,port,host_name);
+
++ vid_pair_list = avahi_string_list_find(txt, "vid");
++ if(vid_pair_list != NULL) {
++ avahi_string_list_get_pair(vid_pair_list, &vidkey, &vidvalue, &valuesize);
++ DBG(min(10,DBG_AUTO), "%s=%s ", vidkey, vidvalue);
++ }
++ else DBG(min(10,DBG_AUTO), "failed to find key vid\n");
++
++ pid_pair_list = avahi_string_list_find(txt, "pid");
++ if(pid_pair_list != NULL) {
++ avahi_string_list_get_pair(pid_pair_list, &pidkey, &pidvalue, &valuesize);
++ DBG(min(10,DBG_AUTO), "%s=%s\n", pidkey, pidvalue);
++ }
++ else DBG(min(10,DBG_AUTO), "failed to find key pid\n");
++
++ if(pid_pair_list != NULL && vid_pair_list != NULL) {
+ ProcessAvahiDevice(name, vidvalue, pidvalue, a);
+- avahi_free(vidkey); avahi_free(vidvalue);
+- avahi_free(pidkey); avahi_free(pidvalue);
++ }
++ else DBG(min(10,DBG_AUTO), "didn't call ProcessAvahiDevice\n");
++
++ if(vid_pair_list != NULL) {
++ avahi_free(vidkey);
++ avahi_free(vidvalue);
++ DBG(min(15,DBG_AUTO), "vidkey and vidvalue freed\n");
++ }
++ if(pid_pair_list != NULL) {
++ avahi_free(pidkey);
++ avahi_free(pidvalue);
++ DBG(min(15,DBG_AUTO), "pidkey and pidvalue freed\n");
++ }
+ }
+ }
+-
++ DBG(min(10,DBG_AUTO), "ending resolve_callback\n");
+ avahi_service_resolver_free(r);
+ }
+
+diff --git a/doc/descriptions/kodakaio.desc b/doc/descriptions/kodakaio.desc
+index 7882513..5fb18ed 100644
+--- a/doc/descriptions/kodakaio.desc
++++ b/doc/descriptions/kodakaio.desc
+@@ -1,6 +1,6 @@
+ :backend "kodakaio"
+ :url "http://sourceforge.net/projects/cupsdriverkodak/"
+-:version "2.4.6"
++:version "2.4.7"
+ :manpage "sane-kodakaio"
+ :comment "Backend for Kodak AiO ESP and Hero printers. Also possibly Advent AWL10"
+ :devicetype :scanner
+--
+1.7.10.4
+