Explicitly prevent out-of-bounds access to tabPositions array

Use DockCount enum value for the size of the array, and explicitly
handle when toDockPos returns DockCount (which it might).

Change-Id: Id52399607fb1ae74a24a050de7a8481264c03e47
Fixes: QTBUG-83983
Coverity-Id: 218539
Pick-to: 5.15
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
bb10
Volker Hilsheimer 2020-05-04 17:54:20 +02:00
parent 8d6d1d6fea
commit c9df93bf27
2 changed files with 6 additions and 2 deletions

View File

@ -1580,7 +1580,11 @@ void QMainWindowLayout::setTabShape(QTabWidget::TabShape tabShape)
QTabWidget::TabPosition QMainWindowLayout::tabPosition(Qt::DockWidgetArea area) const
{
return tabPositions[toDockPos(area)];
const auto dockPos = toDockPos(area);
if (dockPos < QInternal::DockCount)
return tabPositions[dockPos];
qWarning("QMainWindowLayout::tabPosition called with out-of-bounds value '%d'", int(area));
return QTabWidget::North;
}
void QMainWindowLayout::setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)

View File

@ -523,7 +523,7 @@ public:
int sep; // separator extent
#if QT_CONFIG(tabwidget)
QTabWidget::TabPosition tabPositions[4];
QTabWidget::TabPosition tabPositions[QInternal::DockCount];
QTabWidget::TabShape _tabShape;
QTabWidget::TabShape tabShape() const;