[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