summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2017-07-15 10:15:21 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2017-07-15 10:15:21 +0200
commitf777a1a3f5f92814f8b83fe0c22dbe461f11bed7 (patch)
tree27ac8e3f573f01d51f5e034f4a90a24f92d02956
parente248432d2a100804aa6e769a55055d3a5fcb6307 (diff)
Better fix X11 BadValue crash bug which also prevents similar issues on non-X11 platforms.
-rw-r--r--plugingui/nativewindow_x11.cc15
-rw-r--r--plugingui/window.cc11
2 files changed, 15 insertions, 11 deletions
diff --git a/plugingui/nativewindow_x11.cc b/plugingui/nativewindow_x11.cc
index 70053ca..5faecc1 100644
--- a/plugingui/nativewindow_x11.cc
+++ b/plugingui/nativewindow_x11.cc
@@ -33,8 +33,8 @@
#include <sys/shm.h>
#include <cerrno>
#include <cstring>
+#include <cassert>
-#include <stdlib.h>
#include <chrono>
#include <hugin.hpp>
@@ -249,16 +249,9 @@ void NativeWindowX11::redraw(const Rect& dirty_rect)
auto x2 = dirty_rect.x2;
auto y2 = dirty_rect.y2;
- // Make sure we don't try to paint a rect backwards.
- if(x1 > x2)
- {
- std::swap(x1, x2);
- }
-
- if(y1 > y2)
- {
- std::swap(y1, y2);
- }
+ // Assert that we don't try to paint a backwards rect.
+ assert(x1 <= x2);
+ assert(y1 <= y2);
updateImageFromBuffer(x1, y1, x2, y2);
diff --git a/plugingui/window.cc b/plugingui/window.cc
index 099cb91..60ecf02 100644
--- a/plugingui/window.cc
+++ b/plugingui/window.cc
@@ -358,6 +358,17 @@ bool Window::updateBuffer()
dirty_rect.x2 = std::min(wpixbuf.width, dirty_rect.x2);
dirty_rect.y2 = std::min(wpixbuf.height, dirty_rect.y2);
+ // Make sure we don't try to paint a rect backwards.
+ if(dirty_rect.x1 > dirty_rect.x2)
+ {
+ std::swap(dirty_rect.x1, dirty_rect.x2);
+ }
+
+ if(dirty_rect.y1 > dirty_rect.y2)
+ {
+ std::swap(dirty_rect.y1, dirty_rect.y2);
+ }
+
native->redraw(dirty_rect);
needs_redraw = false;