google / wuffs

Wrangling Untrusted File Formats Safely
Other
4.16k stars 131 forks source link

error: conversion to ‘uint32_t’ {aka ‘unsigned int’} from ‘int’ may change the sign of the result #138

Closed mingodad closed 9 months ago

mingodad commented 10 months ago

When executing ./build-all.sh on Ubuntu 18.04 with gcc-9.4 and go1.21.1 linux/amd64 :

Checking snapshot compiles cleanly (as C99)
release/c/wuffs-unsupported-snapshot.c: In function ‘wuffs_private_impl__high_prec_dec__to_f64’:
release/c/wuffs-unsupported-snapshot.c:18370:15: error: conversion to ‘uint32_t’ {aka ‘unsigned int’} from ‘int’ may change the sign of the result [-Werror=sign-conversion]
18370 |       shift = (n < num_powers)
      |               ^
release/c/wuffs-unsupported-snapshot.c: In function ‘wuffs_jpeg__decoder__calculate_huff_tables’:
release/c/wuffs-unsupported-snapshot.c:45405:14: error: conversion from ‘int’ to ‘uint8_t’ {aka ‘unsigned char’} may change value [-Werror=conversion]
45405 |       v_k += self->private_data.f_dht_temp_counts[v_bit_length_minus_one];
      |              ^~~~
release/c/wuffs-unsupported-snapshot.c:45428:21: error: conversion from ‘unsigned int’ to ‘uint8_t’ {aka ‘unsigned char’} may change value [-Werror=conversion]
45428 |         v_prefix += 1u;
      |                     ^~
release/c/wuffs-unsupported-snapshot.c:45439:14: error: conversion from ‘unsigned int’ to ‘uint8_t’ {aka ‘unsigned char’} may change value [-Werror=conversion]
45439 |       v_j += 1u;
      |              ^~
release/c/wuffs-unsupported-snapshot.c: In function ‘wuffs_jpeg__decoder__decode_mcu__choosy_default’:
release/c/wuffs-unsupported-snapshot.c:47399:25: error: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47399 |           v_dc_value += (v_dc_extend & (((uint16_t)(wuffs_base__utility__sign_extend_rshift_u64(v_bits, 63u))) ^ 65535u));
      |                         ^
release/c/wuffs-unsupported-snapshot.c:47403:66: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47403 |           self->private_impl.f_mcu_previous_dc_values[v_csel] += v_dc_value;
      |                                                                  ^~~~~~~~~~
release/c/wuffs-unsupported-snapshot.c:47460:27: error: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47460 |             v_ac_value += (v_ac_extend & (((uint16_t)(wuffs_base__utility__sign_extend_rshift_u64(v_bits, 63u))) ^ 65535u));
      |                           ^
release/c/wuffs-unsupported-snapshot.c: In function ‘wuffs_jpeg__decoder__decode_mcu_progressive_ac_high_bits’:
release/c/wuffs-unsupported-snapshot.c:47619:27: error: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47619 |             v_ac_value += (v_ac_extend & (((uint16_t)(wuffs_base__utility__sign_extend_rshift_u64(v_bits, 63u))) ^ 65535u));
      |                           ^
release/c/wuffs-unsupported-snapshot.c:47624:89: error: conversion to ‘unsigned int’ from ‘int’ may change the sign of the result [-Werror=sign-conversion]
47624 |             self->private_impl.f_eob_run = ((uint16_t)(((((uint16_t)(1u)) << v_ac_rrrr) - 1u)));
      |                                                                                         ^
release/c/wuffs-unsupported-snapshot.c:47626:47: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47626 |               self->private_impl.f_eob_run += ((uint16_t)((v_bits >> (64u - v_ac_rrrr))));
      |                                               ^
release/c/wuffs-unsupported-snapshot.c: In function ‘wuffs_jpeg__decoder__decode_mcu_progressive_ac_low_bit’:
release/c/wuffs-unsupported-snapshot.c:47689:26: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47689 |   v_one_lshift_scan_al = (((uint16_t)(1u)) << self->private_impl.f_scan_al);
      |                          ^
release/c/wuffs-unsupported-snapshot.c:47760:28: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47760 |               v_ac_value = (((uint16_t)(1u)) << self->private_impl.f_scan_al);
      |                            ^
release/c/wuffs-unsupported-snapshot.c:47767:46: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47767 |               self->private_impl.f_eob_run = (((uint16_t)(1u)) << v_ac_rrrr);
      |                                              ^
release/c/wuffs-unsupported-snapshot.c:47769:49: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
47769 |                 self->private_impl.f_eob_run += ((uint16_t)((v_bits >> (64u - v_ac_rrrr))));
      |                                                 ^
release/c/wuffs-unsupported-snapshot.c: In function ‘wuffs_jpeg__decoder__decode_mcu_progressive_dc_high_bits’:
release/c/wuffs-unsupported-snapshot.c:48004:25: error: conversion from ‘unsigned int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
48004 |           v_dc_value += (v_dc_extend & (((uint16_t)(wuffs_base__utility__sign_extend_rshift_u64(v_bits, 63u))) ^ 65535u));
      |                         ^
release/c/wuffs-unsupported-snapshot.c:48008:66: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
48008 |           self->private_impl.f_mcu_previous_dc_values[v_csel] += v_dc_value;
      |                                                                  ^~~~~~~~~~
release/c/wuffs-unsupported-snapshot.c: In function ‘wuffs_jpeg__decoder__decode_mcu_progressive_dc_low_bit’:
release/c/wuffs-unsupported-snapshot.c:48056:26: error: conversion from ‘int’ to ‘uint16_t’ {aka ‘short unsigned int’} may change value [-Werror=conversion]
48056 |   v_one_lshift_scan_al = (((uint16_t)(1u)) << self->private_impl.f_scan_al);
      |                          ^
cc1: all warnings being treated as errors
nigeltao commented 9 months ago

Thanks for the bug report. Let me know if it's still broken.

mingodad commented 9 months ago

Thanks for reply !

Here is what I'm getting now:

Checking snapshot compiles cleanly (as C++11)
release/c/wuffs-unsupported-snapshot.c:55948:12: error: unused variable 'wuffs_png__error__internal_error_inconsistent_frame_bounds' [-Werror,-Wunused-const-variable]
const char wuffs_png__error__internal_error_inconsistent_frame_bounds[] = "#png: internal error: inconsistent frame bounds";
           ^
1 error generated.
nigeltao commented 9 months ago

I pushed a couple more fixes.