[PATCH 2/2] Print: add a safe-guard if table print rows are too big
Lubomir I. Ivanov
neolit123 at gmail.com
Fri Dec 6 08:24:29 UTC 2013
From: "Lubomir I. Ivanov" <neolit123 at gmail.com>
We do not support rows larger than a single page as the
PrintLayout algorithm will enter an infinite loop,
therefore we put a limit of 15 lines for the location text.
Signed-off-by: Lubomir I. Ivanov <neolit123 at gmail.com>
---
qt-ui/models.cpp | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 6a1e007..9950ed3 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -1536,7 +1536,23 @@ bool TablePrintModel::setData(const QModelIndex &index, const QVariant &value, i
case 3: list.at(index.row())->duration = value.toString();
case 4: list.at(index.row())->divemaster = value.toString();
case 5: list.at(index.row())->buddy = value.toString();
- case 6: list.at(index.row())->location = value.toString();
+ case 6: {
+ /* truncate if there are more than N lines of text,
+ * we don't want a row to be larger that a single page! */
+ QString s = value.toString();
+ const int maxLines = 15;
+ int count = 0;
+ for (int i = 0; i < s.length(); i++) {
+ if (s.at(i) != QChar('\n'))
+ continue;
+ count++;
+ if (count > maxLines) {
+ s = s.left(i - 1);
+ break;
+ }
+ }
+ list.at(index.row())->location = s;
+ }
}
return true;
}
--
1.7.11.msysgit.0
More information about the subsurface
mailing list