On 24/05/2005 20:07, Pete Zaitcev wrote:
> On Tue, 24 May 2005 13:21:27 +0100, Ian Abbott <[EMAIL PROTECTED]> wrote:
> 
> 
>>+++ b/drivers/usb/serial/io_edgeport.c  2005-05-16 06:05:08 -07:00
>>@@ -2803,9 +2803,13 @@
>> static void unicode_to_ascii (char *string, short *unicode, int
>>unicode_size)
>> {
>>+       if (unicode_size <= 0)
>>+               return;
>>        string[unicode_size] = 0x00;
> 
> 
>>This was backported from 2.6.10 and is apparently to work around a gcc
>>-Os bug that generates incorrect code without this patch when the
>>'unicode_size' parameter is negative, leading to an oops. []
> 
> 
> Ian, look closer please. Where do you think the NUL is assigned when
> unicode_size is negative? The gcc is correct.

Oh yes, I see what you mean!

>>The thing that's puzzling me is why does the workaround not bother
>>null-terminating the string?
> 
> Bug inside bugfix.

Please see attached patch for 2.6.  It might also apply to
2.4.31-pre2-bk4 with some fuzz, but I haven't tried it.

-- 
-=( Ian Abbott @ MEV Ltd.    E-mail: <[EMAIL PROTECTED]>        )=-
-=( Tel: +44 (0)161 477 1898   FAX: +44 (0)161 718 3587         )=-

io_edgeport: In unicode_to_ascii(), if unicode_size is negative, convert
it to an empty, null-terminated ASCII string.

Signed-off-by: Ian Abbott <[EMAIL PROTECTED]>

diff -ur a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
--- a/drivers/usb/serial/io_edgeport.c	2005-05-25 11:45:26.000000000 +0100
+++ b/drivers/usb/serial/io_edgeport.c	2005-05-25 11:47:25.000000000 +0100
@@ -2793,8 +2793,8 @@
 {
 	int i;
 
-	if (unicode_size <= 0)
-		return;
+	if (unicode_size < 0)
+		unicode_size = 0;
 
 	for (i = 0; i < unicode_size; ++i)
 		string[i] = (char)(le16_to_cpu(unicode[i]));

Reply via email to