aboutsummaryrefslogtreecommitdiff
path: root/graphics/sane-backends/files/patch-backend__kodakaio.c
diff options
context:
space:
mode:
authorTijl Coosemans <tijl@FreeBSD.org>2014-08-06 18:34:42 +0000
committerTijl Coosemans <tijl@FreeBSD.org>2014-08-06 18:34:42 +0000
commitf6ea4f3bde2f343c750cdd1bca2429247e3260e1 (patch)
tree6c036463f0ac330fbf9c1218214ff1b6bb2fc615 /graphics/sane-backends/files/patch-backend__kodakaio.c
parent778245e9a4c97a48f216c02fedc0c414b4dfdbf8 (diff)
downloadports-f6ea4f3bde2f343c750cdd1bca2429247e3260e1.tar.gz
ports-f6ea4f3bde2f343c750cdd1bca2429247e3260e1.zip
Import upstream git commit 37523b867d411c2f82d08128246be7e38bc9812c:
Bugfix in kodakaio.c to fix segfault when non kodak scanners return unexpected data via avahi auto discovery
Notes
Notes: svn path=/head/; revision=364213
Diffstat (limited to 'graphics/sane-backends/files/patch-backend__kodakaio.c')
-rw-r--r--graphics/sane-backends/files/patch-backend__kodakaio.c63
1 files changed, 61 insertions, 2 deletions
diff --git a/graphics/sane-backends/files/patch-backend__kodakaio.c b/graphics/sane-backends/files/patch-backend__kodakaio.c
index 8c7a1a89d292..43e1e69cc235 100644
--- a/graphics/sane-backends/files/patch-backend__kodakaio.c
+++ b/graphics/sane-backends/files/patch-backend__kodakaio.c
@@ -1,6 +1,6 @@
--- backend/kodakaio.c.orig 2012-08-10 09:33:29.000000000 +0900
+++ backend/kodakaio.c 2012-08-29 16:35:36.000000000 +0900
-@@ -165,6 +165,10 @@
+@@ -181,6 +181,10 @@
#include <math.h>
#include <poll.h>
#include <time.h>
@@ -9,5 +9,64 @@
+#include <sys/socket.h>
+#endif
- #if HAVE_CUPS
+ #if WITH_AVAHI
/* used for auto detecting network printers */
+@@ -2184,6 +2188,7 @@
+ 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 +2209,40 @@
+ 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);
+ }
+