Skip to content

Multitude of compilation warnings regarding "idx >= slices.size()" #497

@bobfriesenhahn

Description

@bobfriesenhahn

While compiling latest libde265 code using GCC 13.3.0, I see a very large number of warnings coming out with default compilation options. It is a potential security or stability issue to compare signed and unsigned types. At the very least, it is useful to avoid needless warnings:

cd /home/bfriesen/build/libde265/enc265 && /usr/bin/g++ -DHAVE_MALLOC_H -DHAVE_POSIX_MEMALIGN -I/home/bfriesen/src/libde265 -I/home/bfriesen/build/libde265 -I/home/bfriesen/src/libde265/libde265 -O -g -O3 -DNDEBUG -std=c++17 -fPIE -Wall -MD -MT enc265/CMakeFiles/enc265.dir/image-io-png.cc.o -MF CMakeFiles/enc265.dir/image-io-png.cc.o.d -o CMakeFiles/enc265.dir/image-io-png.cc.o -c /home/bfriesen/src/libde265/enc265/image-io-png.cc
In file included from /home/bfriesen/src/libde265/libde265/image-io.h:26,
from /home/bfriesen/src/libde265/enc265/image-io-png.h:30,
from /home/bfriesen/src/libde265/enc265/image-io-png.cc:27:
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘bool de265_image::is_SliceHeader_available(int, int) const’:
/home/bfriesen/src/libde265/libde265/image.h:763:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
763 | return idx >= 0 && idx < slices.size();
| ~~~~^~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘slice_segment_header* de265_image::get_SliceHeader(int, int)’:
/home/bfriesen/src/libde265/libde265/image.h:769:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
769 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘slice_segment_header* de265_image::get_SliceHeaderCtb(int, int)’:
/home/bfriesen/src/libde265/libde265/image.h:776:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
776 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘const slice_segment_header* de265_image::get_SliceHeaderCtb(int, int) const’:
/home/bfriesen/src/libde265/libde265/image.h:783:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
783 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
In file included from /home/bfriesen/src/libde265/libde265/image-io.h:26,
from /home/bfriesen/src/libde265/enc265/enc265.cc:33:
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘bool de265_image::is_SliceHeader_available(int, int) const’:
/home/bfriesen/src/libde265/libde265/image.h:763:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
763 | return idx >= 0 && idx < slices.size();
| ~~~~^~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘slice_segment_header* de265_image::get_SliceHeader(int, int)’:
/home/bfriesen/src/libde265/libde265/image.h:769:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
769 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘slice_segment_header* de265_image::get_SliceHeaderCtb(int, int)’:
/home/bfriesen/src/libde265/libde265/image.h:776:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
776 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘const slice_segment_header* de265_image::get_SliceHeaderCtb(int, int) const’:
/home/bfriesen/src/libde265/libde265/image.h:783:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
783 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
In file included from /home/bfriesen/src/libde265/libde265/decctx.h:32,
from /home/bfriesen/src/libde265/libde265/encoder/encoder-core.h:27,
from /home/bfriesen/src/libde265/enc265/enc265.cc:34:
/home/bfriesen/src/libde265/libde265/dpb.h: In member function ‘de265_image* decoded_picture_buffer::get_image(int)’:
/home/bfriesen/src/libde265/libde265/dpb.h:60:14: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<de265_image*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
60 | if (index>=dpb.size()) return NULL;
| ~~~~~^~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/dpb.h: In member function ‘const de265_image* decoded_picture_buffer::get_image(int) const’:
/home/bfriesen/src/libde265/libde265/dpb.h:65:14: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<de265_image*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
65 | if (index>=dpb.size()) return NULL;
| ~~~~~^~~~~~~~~~~~
In file included from /home/bfriesen/src/libde265/libde265/quality.h:26,
from /home/bfriesen/src/libde265/dec265/dec265.cc:51:
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘bool de265_image::is_SliceHeader_available(int, int) const’:
/home/bfriesen/src/libde265/libde265/image.h:763:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
763 | return idx >= 0 && idx < slices.size();
| ~~~~^~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘slice_segment_header* de265_image::get_SliceHeader(int, int)’:
/home/bfriesen/src/libde265/libde265/image.h:769:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
769 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘slice_segment_header* de265_image::get_SliceHeaderCtb(int, int)’:
/home/bfriesen/src/libde265/libde265/image.h:776:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
776 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/libde265/image.h: In member function ‘const slice_segment_header* de265_image::get_SliceHeaderCtb(int, int) const’:
/home/bfriesen/src/libde265/libde265/image.h:783:13: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<slice_segment_header*>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
783 | if (idx >= slices.size()) { return NULL; }
| ~~~~^~~~~~~~~~~~~~~~
/home/bfriesen/src/libde265/dec265/dec265.cc: At global scope:
/home/bfriesen/src/libde265/dec265/dec265.cc:243:17: warning: ‘uint8_t* convert_to_8bit(const uint8_t*, int, int, int, int)’ defined but not used [-Wunused-function]
243 | static uint8_t* convert_to_8bit(const uint8_t* data, int width, int height,
| ^~~~~~~~~~~~~~~
[ 98%] Linking CXX executable dec265

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions