Bugfix in kodakaio.c to fix segfault when non kodak scanners return unexpected data via avahi auto discovery

merge-requests/1/head
Paul Newall 2013-10-14 22:22:53 +01:00
rodzic 236785e095
commit 37523b867d
3 zmienionych plików z 37 dodań i 12 usunięć

Wyświetl plik

@ -1,3 +1,7 @@
2013-10-14 Paul Newall <quandry@ntlworld.com>
* backend/kodakaio.c: fix bug #314301,
Segfault when unexpected data returned by avahi auto discovery.
2013-10-11 Rolf Bensch <rolf at bensch hyphen online dot de>
* backend/pixma_imageclass.c: Use generation variable instead of single
defines of scanner pid's. Now new scanners should work without extensive

Wyświetl plik

@ -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);
}

Wyświetl plik

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