[1/2] ctype: Fix integer type for caseconv_entry::delta

Message ID 20180727073745.23440-1-sebastian.huber@embedded-brains.de
State Accepted
Commit d8d18c3e80b029449240de8b3d970c03674e9617
Headers show
Series
  • [1/2] ctype: Fix integer type for caseconv_entry::delta
Related show

Commit Message

Sebastian Huber July 27, 2018, 7:37 a.m.
The commit 46ba1675c457324b0eeef4670a09101ef3f34c50 accidently changed a
bit-field from signed to unsigned.  The caseconv_entry::delta must be a
signed integer, see also "newlib/libc/ctype/caseconv.t".

Unfortunately, a standard GCC/Newlib build is done without
-Wsign-conversion.  Using this warning option would have helped to avoid
this bug:

caseconv.t:2:22: warning: unsigned conversion from 'int' to 'unsigned int:17' changes value from '-32' to '131040' [-Wsign-conversion]
   {0x0061, 25, TOUP, -32},

Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>

---
 newlib/libc/ctype/towctrans_l.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.13.7

Comments

Corinna Vinschen July 30, 2018, 7:34 a.m. | #1
On Jul 27 09:37, Sebastian Huber wrote:
> The commit 46ba1675c457324b0eeef4670a09101ef3f34c50 accidently changed a

> bit-field from signed to unsigned.  The caseconv_entry::delta must be a

> signed integer, see also "newlib/libc/ctype/caseconv.t".

> 

> Unfortunately, a standard GCC/Newlib build is done without

> -Wsign-conversion.  Using this warning option would have helped to avoid

> this bug:

> 

> caseconv.t:2:22: warning: unsigned conversion from 'int' to 'unsigned int:17' changes value from '-32' to '131040' [-Wsign-conversion]

>    {0x0061, 25, TOUP, -32},

> 

> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>

> ---

>  newlib/libc/ctype/towctrans_l.c | 2 +-

>  1 file changed, 1 insertion(+), 1 deletion(-)

> 

> diff --git a/newlib/libc/ctype/towctrans_l.c b/newlib/libc/ctype/towctrans_l.c

> index 42085ac78..7b8a23c9c 100644

> --- a/newlib/libc/ctype/towctrans_l.c

> +++ b/newlib/libc/ctype/towctrans_l.c

> @@ -39,7 +39,7 @@ static struct caseconv_entry {

>    uint_least32_t first: 21;

>    uint_least8_t diff: 8;

>    uint_least8_t mode: 2;

> -  uint_least32_t delta: 17;

> +  int_least32_t delta: 17;

>  } __attribute__ ((packed))

>  caseconv_table [] = {

>  #include "caseconv.t"

> -- 

> 2.13.7


Thanks, please apply series.


Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat

Patch

diff --git a/newlib/libc/ctype/towctrans_l.c b/newlib/libc/ctype/towctrans_l.c
index 42085ac78..7b8a23c9c 100644
--- a/newlib/libc/ctype/towctrans_l.c
+++ b/newlib/libc/ctype/towctrans_l.c
@@ -39,7 +39,7 @@  static struct caseconv_entry {
   uint_least32_t first: 21;
   uint_least8_t diff: 8;
   uint_least8_t mode: 2;
-  uint_least32_t delta: 17;
+  int_least32_t delta: 17;
 } __attribute__ ((packed))
 caseconv_table [] = {
 #include "caseconv.t"