fix crashing bug in Pane when accessing dividers
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 6 Jun 2016 20:05:43 +0000 (16:05 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 6 Jun 2016 20:05:43 +0000 (16:05 -0400)
libs/gtkmm2ext/pane.cc

index aa8e7d142b74655eaa3f0922eacf17dfdd1fe0a8..9f374c67146457e698c4f3f8611be2844b7a3989 100644 (file)
@@ -402,14 +402,15 @@ Pane::set_divider (Dividers::size_type div, float fract)
 {
        Dividers::iterator d = dividers.begin();
 
-       while (div--) {
-               ++d;
-               if (d == dividers.end()) {
-                       /* caller is trying to set divider that does not exist
-                        * yet.
-                        */
-                       return;
-               }
+       for (d = dividers.begin(); d != dividers.end() && div != 0; ++d, --div) {
+               /* relax */
+       }
+
+       if (d == dividers.end()) {
+               /* caller is trying to set divider that does not exist
+                * yet.
+                */
+               return;
        }
 
        fract = max (0.0f, min (1.0f, fract));
@@ -427,14 +428,15 @@ Pane::get_divider (Dividers::size_type div)
 {
        Dividers::iterator d = dividers.begin();
 
-       while (div--) {
-               ++d;
-               if (d == dividers.end()) {
-                       /* caller is trying to set divider that does not exist
-                        * yet.
-                        */
-                       return -1.0f;
-               }
+       for (d = dividers.begin(); d != dividers.end() && div != 0; ++d, --div) {
+               /* relax */
+       }
+
+       if (d == dividers.end()) {
+               /* caller is trying to set divider that does not exist
+                * yet.
+                */
+               return -1.0f;
        }
 
        return (*d)->fract;