]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix 787 -- Eliminate segfaults due to empty list and unitialized properties
authorCarl Sorensen <c_sorensen@byu.edu>
Tue, 1 Dec 2009 00:09:37 +0000 (17:09 -0700)
committerCarl Sorensen <c_sorensen@byu.edu>
Thu, 3 Dec 2009 14:17:27 +0000 (07:17 -0700)
lily/script-column.cc

index 23e1b69b1185542d1d5e1fee1f8540bebc4885ba..933bef5f1e54931f5bde6ab84a599a3bd33ed126 100644 (file)
@@ -140,8 +140,14 @@ Script_column::order_grobs (vector<Grob*> grobs)
       ss = scm_stable_sort_x (ss, ly_grob_script_priority_less_proc);
 
       Grob *last = 0;
-      Grob *first = unsmob_grob (scm_car (ss));
-      SCM default_outside_staff = first->get_property("outside-staff-priority");
+      Grob *first = 0;
+      SCM default_outside_staff = scm_from_double (0);
+      // script_column may have no entries
+      if (scm_is_pair (ss))
+        {
+           first = unsmob_grob (scm_car (ss));
+           default_outside_staff = first-0>get_property ("outside-staff-priority");
+        }
       for (SCM s = ss; scm_is_pair (s); s = scm_cdr (s))
        {
          Grob *g = unsmob_grob (scm_car (s));
@@ -159,12 +165,13 @@ Script_column::order_grobs (vector<Grob*> grobs)
                   SCM g_outside_staff = g->get_property ("outside-staff-priority");
                  if (!scm_is_number (g_outside_staff))
                      g->set_property ("outside-staff-priority",
-                                    scm_from_double (scm_to_double (last_outside_staff) + 0.1));
-                  else if (fabs (scm_to_double (g_outside_staff) -
-                             scm_to_double(default_outside_staff)) < 0.001)
+                                      scm_from_double (
+                                         scm_to_double (last_outside_staff) + 0.1));
+                  else if (scm_to_double (g_outside_staff) -
+                             robust_scm2double (default_outside_staff, 0)) < 0.001)
                     {
                       SCM last_script = last->get_property ("script-priority");
-                      SCM g_script = g->get_property("script-priority");
+                      SCM g_script = g->get_property ("script-priority");
                      g->set_property (
                           "outside-staff-priority",
                          scm_from_double (scm_to_double (last_outside_staff) +