summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-10-25 23:01:03 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-10-25 16:23:46 -0700
commite7b56c2d315c31ec64696dbaca9550071633aef4 (patch)
tree104cb7e9381239c934829a6499f4113eb4e5754b /desktop-widgets
parentb984839836e0ee38fb8e09680d69f34593b9300f (diff)
downloadsubsurface-e7b56c2d315c31ec64696dbaca9550071633aef4.tar.gz
filter: use 64-bit integer literal for generating bit fields
For multiple-choice constraints we use a bit field of type uint64_t. This means we theoretically support up to 64 items. Currently use at most seven. Coverity complained (correctly) that we use the expression "1 << x" to generate the bitfields. However 1 is a 32-bit literal on most platforms, which makes this undefined behavior for x >= 32. Change the integer literal to 64-bit 1ULL. Moreover, when detecting items with an index >= 64, don't even attempt to set the according bit, since this is undefined behavior and the compiler is free to do as it pleases in such a case. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r--desktop-widgets/filterconstraintwidget.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/desktop-widgets/filterconstraintwidget.cpp b/desktop-widgets/filterconstraintwidget.cpp
index 441ab73ea..418fca0d5 100644
--- a/desktop-widgets/filterconstraintwidget.cpp
+++ b/desktop-widgets/filterconstraintwidget.cpp
@@ -324,7 +324,7 @@ void FilterConstraintWidget::update()
if (multipleChoice) {
uint64_t bits = idx.data(FilterConstraintModel::MULTIPLE_CHOICE_ROLE).value<uint64_t>();
for (int i = 0; i < multipleChoice->count(); ++i)
- multipleChoice->item(i)->setSelected(bits & (1 << i));
+ multipleChoice->item(i)->setSelected(bits & (1ULL << i));
}
// Update the unit strings in case the locale was changed
@@ -392,9 +392,11 @@ void FilterConstraintWidget::multipleChoiceEdited()
uint64_t bits = 0;
for (const QModelIndex &idx: multipleChoice->selectionModel()->selectedIndexes()) {
int row = idx.row();
- if (row >= 64)
+ if (row >= 64) {
qWarning("FilterConstraint: multiple-choice with more than 64 entries not supported");
- bits |= 1 << row;
+ continue;
+ }
+ bits |= 1ULL << row;
}
QModelIndex idx = model->index(row, 0);
model->setData(idx, qulonglong(bits), FilterConstraintModel::MULTIPLE_CHOICE_ROLE);