Bug#661473: pu: package brltty/4.2-7+squeeze1
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: pu
Hello,
I would like to fix a bug in brltty for some devices: the esys and
iris braille devices whose size is bigger than 40 cells. See the
attached patch: the eubrl_usbWrite() part of it fixes displaying on them
(otherwise it remains completely blank). The esysiris_SysIdentity() part
of it fixes a buffer overflow when they are connected (same USB ID, but
bigger model number).
The changes have been tested with the real device.
Samuel
-- System Information:
Debian Release: wheezy/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.0.4 (SMP w/8 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
diff --git a/debian/changelog b/debian/changelog
index dd2abe1..284b19f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+brltty (4.2-7+squeeze2) squeeze; urgency=low
+
+ * debian/patches/40-esys-64.patch: New patch from upstream to fix support for
+ large esys/iris displays.
+
+ -- Samuel Thibault <sthibault@debian.org> Mon, 27 Feb 2012 03:28:04 +0100
+
brltty (4.2-7+squeeze1) squeeze; urgency=low
* brltty-udeb.prebasconfig:
diff --git a/debian/patches/40-esys-64.patch b/debian/patches/40-esys-64.patch
new file mode 100644
index 0000000..e3625e0
--- /dev/null
+++ b/debian/patches/40-esys-64.patch
@@ -0,0 +1,41 @@
+diff --git a/Drivers/Braille/EuroBraille/eu_esysiris.c b/Drivers/Braille/EuroBraille/eu_esysiris.c
+index c55574d..6409142 100644
+--- a/Drivers/Braille/EuroBraille/eu_esysiris.c
++++ b/Drivers/Braille/EuroBraille/eu_esysiris.c
+@@ -212,6 +212,8 @@ static int esysiris_SysIdentity(BrailleDisplay *brl, char *packet)
+ break;
+ case 'T':
+ brlType = packet[1];
++ if (brlType >= TYPE_LAST)
++ brlType = UNKNOWN;
+ break;
+ default:
+ LogUnknownProtocolKey("esysiris_SysIdentity", packet[0]);
+diff --git a/Drivers/Braille/EuroBraille/eu_usb.c b/Drivers/Braille/EuroBraille/eu_usb.c
+index 4a71345..9e00213 100644
+--- a/Drivers/Braille/EuroBraille/eu_usb.c
++++ b/Drivers/Braille/EuroBraille/eu_usb.c
+@@ -86,9 +191,18 @@ eubrl_usbRead (BrailleDisplay *brl, void *buffer, size_t length, int wait)
+ ssize_t
+ eubrl_usbWrite(BrailleDisplay *brl, const void *buffer, size_t length)
+ {
+- if(length>USB_PACKET_SIZE) return(-1);
+- char packetToSend[USB_PACKET_SIZE];
+- memset(packetToSend,0x55,USB_PACKET_SIZE);
+- memcpy(packetToSend,buffer,length);
+- return usbHidSetReport(usb->device, usb->definition.interface, 0, packetToSend, USB_PACKET_SIZE, 10);
++ size_t pos = 0;
++ while (pos < length) {
++ char packetToSend[USB_PACKET_SIZE];
++ size_t tosend = length - pos;
++ if (tosend > USB_PACKET_SIZE) {
++ tosend = USB_PACKET_SIZE;
++ }
++ memset(packetToSend,0x55,USB_PACKET_SIZE);
++ memcpy(packetToSend,buffer+pos,tosend);
++ if (usbHidSetReport(usb->device, usb->definition.interface, 0, packetToSend, USB_PACKET_SIZE, 10) < 0)
++ return -1;
++ pos += tosend;
++ }
++ return length;
+ }
diff --git a/debian/patches/series b/debian/patches/series
index a93bc6d..3b58957 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,3 +2,4 @@
20-sbin.patch
30-upstream-table-fixes.patch
40-silence-offset-warning.patch
+40-esys-64.patch
Reply to: