]> git.sesse.net Git - ccbs/blobdiff - bigscreen/groupscreen.cpp
Fix a segfault in certain nonsensical group configurations.
[ccbs] / bigscreen / groupscreen.cpp
index 1513ef31c36bc42972606d2ea61e29ac9b8a06f2..1fee2907ab777181aa9257648f5c167909e3c16b 100644 (file)
@@ -127,7 +127,7 @@ void GroupScreen::draw_scores(std::vector<TextDefer> &td, const Group &group, un
        
                        unsigned this_width = my_draw_text(text, NULL, 22.0, "score" + suffix);
                        if (j->chosen) {
-                               my_draw_text_deferred(td, text, 22.0, "chosensongname" + suffix, "freshchosensongname" + suffix, x + max_num_width - this_width, y);
+                               my_draw_text_deferred(td, text, 22.0, "score" + suffix, "freshscore" + suffix, x + max_num_width - this_width, y);
 
                                // draw the long name if we can, otherwise use the short one
                                if (my_draw_text(j->song.title, NULL, 12.0, "chosensongname") > (colwidth[col] - 10 - max_num_width)) {
@@ -534,7 +534,11 @@ void GroupScreen::draw_next_up_player(unsigned char *buf, const Group &group, co
                                tmp.push_back(max_score[i]);
                        }
                        std::sort(tmp.begin(), tmp.end());
-                       qualify_beat_worst_case = tmp[tmp.size() - group.num_qualifying];
+                       if (tmp.size() > group.num_qualifying) {
+                               qualify_beat_worst_case = tmp[tmp.size() - group.num_qualifying];
+                       } else {
+                               qualify_beat_worst_case = 0;
+                       }
 
                        std::vector<unsigned> tmp2;
                        for (unsigned i = 0; i < group.players.size(); ++i) {
@@ -544,7 +548,11 @@ void GroupScreen::draw_next_up_player(unsigned char *buf, const Group &group, co
                        }
 
                        std::sort(tmp2.begin(), tmp2.end());
-                       qualify_beat_best_case = tmp2[tmp2.size() - group.num_qualifying];
+                       if (tmp2.size() > group.num_qualifying) {
+                               qualify_beat_best_case = tmp2[tmp2.size() - group.num_qualifying];
+                       } else {
+                               qualify_beat_best_case = 0;
+                       }
                }
 
                // print out the lines we can attain
@@ -615,7 +623,7 @@ void GroupScreen::draw(unsigned char *buf, unsigned width, unsigned height)
        conn.perform(FetchGroup(tournament, round, parallel, &group));
        gettimeofday(&last_updated, NULL);
 
-       fill_background(buf, width, height);
+       fill_background(buf, "groupscreen", width, height);
 
        std::vector<unsigned> colwidth;