[BRLTTY] A bug in release 3.10

Samuel Thibault samuel.thibault at ens-lyon.org
Wed Aug 13 21:42:50 EDT 2008


Jean-Philippe MENGUAL, le Thu 14 Aug 2008 02:44:17 +0200, a écrit :
> 493       if ((needsEscape[((unsigned)buffer[end - 1])] != 1

Ooh, that line is bogus indeed. The char needs to be casted to unsigned
char rather than unsigned int, because chars are signed and thus values
not in the range 0..127 (and thus -128..-1) just get sign-extended and
then converted to unsigned as e.g. 0xffffffffffff..0xffffffffff80.  Here
is a patch.

Samuel
-------------- next part --------------
Index: BrailleDrivers/EuroBraille/eu_clio.c
===================================================================
--- BrailleDrivers/EuroBraille/eu_clio.c	(r?vision 3875)
+++ BrailleDrivers/EuroBraille/eu_clio.c	(copie de travail)
@@ -491,9 +491,9 @@
     return 0;
 
   /* ignoring packets received twice **/
-  if ((needsEscape[((unsigned)buffer[end - 1])] != 1
+  if ((needsEscape[((unsigned char)buffer[end - 1])] != 1
        && buffer[end - 2] == prevPktNbr)
-      || (needsEscape[((unsigned)buffer[end - 1])] == 1 
+      || (needsEscape[((unsigned char)buffer[end - 1])] == 1 
 	  && buffer[end - 3] == prevPktNbr))
     {
       memmove(buffer, buffer + end + 1, pos - framelen);
@@ -501,7 +501,7 @@
       return 0;
     }
   /* Updating pprevPktNbr */
-  if (needsEscape[((unsigned)buffer[end - 1])] != 1)
+  if (needsEscape[((unsigned char)buffer[end - 1])] != 1)
     prevPktNbr = buffer[end - 2];
   else
     prevPktNbr = buffer[end - 3];


More information about the BRLTTY mailing list