Package: release.debian.org Severity: normal User: [email protected] 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 <[email protected]> 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

