123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- 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
|