Backends use a mixture of SANE_CURRENT_{MAJOR | MINOR} and V_{MAJOR |
MINOR} with all kind of permutations. I was confused by this and one
comment in pieusb.c tells me I was not alone. Some items in old
changelogs suggest to use the SANE_CURRENT_ macros in backends, so let's
switch to do that with the exception of net.c and dll.c. Done with:
$ find backend -name '*.[ch]' | xargs sed -i '/nearly every/ ! { s/\<V_M/SANE_CURRENT_M/g }'
$ git checkout backend/net.c backend/dll.c
And manually removing the comment from pieusb.c. Everything still builds
fine.
Certain backends do network scans even if the 'local_only'
parameter for 'sane_get_devices()' is true. Fix that.
Changes:
1. Modify 'sanei_configure_attach()' so that backend specific
data may be passed to the 'attach()' function.
2. Use this in certain backends to pass the value of the
'local_only' parameter so that network related activities
are only carried out when the value is false.
Extraction of values from the SNMP response were not checked.
Also fixed a bug that mistakenly matched any SNMP OIDs with the
first model in the model list, in function mc_get_device_from_identification().
This implements a security issue reported by GitHub Security Lab.
The details are disclosed in GitLab issue #279.
The issue relates to an invalid scan parameter block being sent to
the backend containing 8 bytes of 0x00 which leads to pixels_per_line
being set to 0. Later arithmetic involves the division by this value
which causes a div by zero crash.
If the value to be set is not valid, it should not change the sval
structure (even if doing so has no negative side effects).
This also makes the fallthrough less confusing by removing the first
cast of two for the br-x and br-y values.
epson2-commands.c: Include <sys/types.h> to resolve u_long.
epson2.c, magicolor.c, xerox_mfp-tcp.c: Include <sys/types.h>
and to <sys/socket.h> for anyone using setsockopt().
sanei_tcp.h: Include <sys/types.h> since ssize_t is referenced.
sanei_usb.c: Newer FreeBSD version checks.
All changes in this patch set come from FreeBSD ports patches.
Bug #312503.
So far, the snmp detection would stop working after the first response, because libsnmp
haved like that if we return 1 in the callback. Since we want multiple responses to one
broadcast query, we don't tell libsnmp that the response has answered our query.
As a drawback, libsnmp will send the same query in 1-second-intervals, and each device
will answer again. So, we have to keep a list of all devices already detected.
-) LAN and USB communication
-) SNMP LAN auto-detection (using libsnmp, added configure check!)
-) Based on the epson2 backend, with many structural changes
-) B/W, Gray, Color scanning works in 150/300/600dpi (full-page
color scan only possible with <=300dpi)
-) The timeouts (SNMP, scan data, other data) are configurable in the
magicolor.conf file
-) Keeps list of known scanners in sane_get_devices, does not destroy
existing handles; Also correctly calls sanei_usb_init.