Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-116763

out-of-bounds operator+

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P1: Critical
    • None
    • dev
    • None
    • 300614a17 (dev), 9aaf12eba (dev), 457e6f8b1 (6.6), 8774df09e (tqtc/lts-6.5), 06c724881 (dev), 35ffe8749 (6.7), 95017918c (6.6), 05ec93654 (tqtc/lts-6.5)

    Description

      gcc 13.2.1 is giving me this

      FAILED: qtbase/src/gui/CMakeFiles/Gui.dir/image/qimagereaderwriterhelpers.cpp.o 
      /usr/lib/icecream/libexec/icecc/bin/c++ -DENABLE_PIXMAN_DRAWHELPERS -DGui_EXPORTS -DQT_ASCII_CAST_WARNINGS -DQT_BUILDING_QT -DQT_BUILD_GUI_LIB -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_UP_TO=0x050000 -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH -DQT_LEAN_HEADERS=1 -DQT_MOC_COMPAT -DQT_NO_AS_CONST -DQT_NO_CAST_TO_ASCII -DQT_NO_CONTEXTLESS_CONNECT -DQT_NO_EXCEPTIONS -DQT_NO_FOREACH -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_QEXCHANGE -DQT_NO_USING_NAMESPACE -DQT_QPA_DEFAULT_PLATFORM_NAME=\"xcb\" -DQT_STRICT_QLIST_ITERATORS -DQT_USE_QSTRINGBUILDER -DQT_WARN_DEPRECATED_UP_TO=0x070000 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/home/rutledge/dev/qt6-dbg/qtbase/src/gui/Gui_autogen/include -I/home/rutledge/dev/qt6-dbg/qtbase/include -I/home/rutledge/dev/qt6-dbg/qtbase/include/QtGui -I/home/rutledge/dev/qt6/qtbase/src/gui -I/home/rutledge/dev/qt6-dbg/qtbase/src/gui -I/home/rutledge/dev/qt6/qtbase/src/gui/../3rdparty/VulkanMemoryAllocator -I/home/rutledge/dev/qt6/qtbase/src/gui/../3rdparty/D3D12MemoryAllocator -I/home/rutledge/dev/qt6-dbg/qtbase/include/QtGui/6.7.0 -I/home/rutledge/dev/qt6-dbg/qtbase/include/QtGui/6.7.0/QtGui -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/home/rutledge/dev/qt6-dbg/qtbase/include/QtCore -I/home/rutledge/dev/qt6-dbg/qtbase/mkspecs/linux-g++ -I/home/rutledge/dev/qt6-dbg/qtbase/src/corelib -I/home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/6.7.0 -I/home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/6.7.0/QtCore -I/home/rutledge/dev/qt6-dbg/qtbase/include/QtDBus -isystem /usr/include/glib-2.0 -isystem /usr/lib/glib-2.0/include -isystem /usr/include/sysprof-4 -isystem /usr/include/harfbuzz -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -O2 -pipe -march=corei7 -g -std=c++17 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -fno-exceptions -fPIC -Werror -Wno-error=cpp -Wno-error=deprecated-declarations -Wno-error=strict-overflow -Wno-error=implicit-fallthrough -Wno-error=deprecated-copy -Wno-error=redundant-move -Wno-error=init-list-lifetime -Wno-error=format-overflow -Wno-error=stringop-overflow -Wno-error=deprecated-enum-enum-conversion -Wno-error=deprecated-enum-float-conversion -Wsuggest-override -pthread -MD -MT qtbase/src/gui/CMakeFiles/Gui.dir/image/qimagereaderwriterhelpers.cpp.o -MF qtbase/src/gui/CMakeFiles/Gui.dir/image/qimagereaderwriterhelpers.cpp.o.d -o qtbase/src/gui/CMakeFiles/Gui.dir/image/qimagereaderwriterhelpers.cpp.o -c /home/rutledge/dev/qt6/qtbase/src/gui/image/qimagereaderwriterhelpers.cpp
      In file included from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qstringbuilder.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qstring.h:1503,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qstring.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/tools/qhashfunctions.h:8,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qhashfunctions.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/tools/qlist.h:10,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qlist.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/tools/qversionnumber.h:9,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qversionnumber.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/global/qoperatingsystemversion.h:5,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qoperatingsystemversion.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/6.7.0/QtCore/private/../../../../../../../qt6/qtbase/src/corelib/global/qglobal_p.h:63,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/6.7.0/QtCore/private/qglobal_p.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtGui/6.7.0/QtGui/private/../../../../../../../qt6/qtbase/src/gui/kernel/qtguiglobal_p.h:19,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtGui/6.7.0/QtGui/private/qtguiglobal_p.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtGui/6.7.0/QtGui/private/../../../../../../../qt6/qtbase/src/gui/image/qimagereaderwriterhelpers_p.h:7,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtGui/6.7.0/QtGui/private/qimagereaderwriterhelpers_p.h:1,
                       from /home/rutledge/dev/qt6/qtbase/src/gui/image/qimagereaderwriterhelpers.cpp:4:
      In static member function 'static void QConcatenable<QByteArrayView>::appendTo(QByteArrayView, char*&)',
          inlined from 'static void QConcatenable<QStringBuilder< <template-parameter-1-1>, <template-parameter-1-2> > >::appendTo(const type&, T*&) [with T = char; A = QByteArrayView; B = const char (&)[20]]' at /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qstringbuilder.h:398:37,
          inlined from 'T QStringBuilder< <template-parameter-1-1>, <template-parameter-1-2> >::convertTo() const [with T = QByteArray; A = QByteArrayView; B = const char (&)[20]]' at /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qstringbuilder.h:117:54,
          inlined from 'QStringBuilder< <template-parameter-1-1>, <template-parameter-1-2> >::operator ConvertTo() const [with A = QByteArrayView; B = const char (&)[20]]' at /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qstringbuilder.h:129:62,
          inlined from 'QList<QByteArray> QImageReaderWriterHelpers::supportedMimeTypes(Capability)' at /home/rutledge/dev/qt6/qtbase/src/gui/image/qimagereaderwriterhelpers.cpp:107:25:
      /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qstringbuilder.h:178:19: error: 'void* memcpy(void*, const void*, size_t)' forming offset [1, 5] is out of the bounds [0, 1] of object 'QByteArray::_empty' with type 'const char' [-Werror=array-bounds=]
      In file included from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qbytearray.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qstringview.h:8,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qstringview.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qchar.h:656,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/qchar.h:1,
                       from /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qstring.h:14:
      /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qbytearray.h: In function 'QList<QByteArray> QImageReaderWriterHelpers::supportedMimeTypes(Capability)':
      /home/rutledge/dev/qt6-dbg/qtbase/include/QtCore/../../../../qt6/qtbase/src/corelib/text/qbytearray.h:64:23: note: 'QByteArray::_empty' declared here
      cc1plus: all warnings being treated as errors
      

      The code in question

      static constexpr QByteArrayView imagePrefix() noexcept { return "image/"; }
      ...
      struct _qt_BuiltInFormatStruct
      {
          char extension[4];
          char mimeType[MAX_MT_SIZE];
      };
      ...
      QList<QByteArray> supportedMimeTypes(Capability cap)
      {
          QList<QByteArray> mimeTypes;
          mimeTypes.reserve(_qt_NumFormats);
          for (const auto &fmt : _qt_BuiltInFormats)
              mimeTypes.append(imagePrefix() + fmt.mimeType);
      

      So yeah appending a simple char-pointer to a QByteArrayView to generate a QByteArray... not sure how explicit we should be. The QByteArray somehow ought to get initialized to the right size rather than growing dynamically, shouldn't it?

      Caused by a recent change https://codereview.qt-project.org/c/qt/qtbase/+/499949

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              srutledg Shawn Rutledge
              srutledg Shawn Rutledge
              Votes:
              0 Vote for this issue
              Watchers:
              10 Start watching this issue

              Dates

                Created:
                Updated: