Patch "lib/ucs2_string: Correct ucs2 -> utf8 conversion" has been added to the 3.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
lib/ucs2_string: Correct ucs2 -> utf8 conversion
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
lib-ucs2_string-correct-ucs2-utf8-conversion.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a68075908a37850918ad96b056acc9ac4ce1bd90Mon Sep 17 00:00:00 2001
From: Jason Andryuk <[email protected]>
Date: Fri, 12 Feb 2016 23:13:33 +0000
Subject: lib/ucs2_string: Correct ucs2 -> utf8 conversion
From: Jason Andryuk <[email protected]>
commit a68075908a37850918ad96b056acc9ac4ce1bd90 upstream.
The comparisons should be >= since 0x800 and 0x80 require an additional bit to store.
For the 3 byte case, the existing shift would drop off 2 more bits than intended.
For the 2 byte case, there should be 5 bits bits in byte 1, and 6 bits in byte 2.
--- lib/ucs2_string.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
lib/ucs2_string.c +7 -7
@@ -59,9 +59,9 @@ ucs2_utf8size(const ucs2_char_t *src)for (i =0 ; i <ucs2_strlen (src); i++) {u16 c = src[i]; -if (c >0x800 ) +if (c >=0x800 ) j +=3 ; -else if (c >0x80 ) +else if (c >=0x80 ) j +=2 ;else j +=1 ;
@@ -88,19 +88,19 @@ ucs2_as_utf8(u8 *dest, const ucs2_char_tfor (i =0 ; maxlength && i < limit; i++) {u16 c = src[i]; -if (c >0x800 ) { +if (c >=0x800 ) {if (maxlength <3 )break ; maxlength -=3 ; dest[j++] =0xe0 | (c &0xf000 ) >>12 ; - dest[j++] =0x80 | (c &0x0fc0 ) >>8 ; + dest[j++] =0x80 | (c &0x0fc0 ) >>6 ; dest[j++] =0x80 | (c &0x003f ); - }else if (c >0x80 ) { + }else if (c >=0x80 ) {if (maxlength <2 )break ; maxlength -=2 ; - dest[j++] =0xc0 | (c &0xfe0 ) >>5 ; - dest[j++] =0x80 | (c &0x01f ); + dest[j++] =0xc0 | (c &0x7c0 ) >>6 ; + dest[j++] =0x80 | (c &0x03f ); }else { maxlength -=1 ; dest[j++] = c &0x7f ;
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/lib-ucs2_string-correct-ucs2-utf8-conversion.patch