View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002178 | FSSCP | gameplay | public | 2010-04-09 19:04 | 2010-04-19 03:48 |
| Reporter | The_E | Assigned To | iss_mneur | ||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | resolved | Resolution | fixed | ||
| Product Version | 3.6.12 RC1 | ||||
| Fixed in Version | 3.6.12 | ||||
| Summary | 0002178: Assert in missiontraining.cpp, line 924 for empty training messages | ||||
| Description | To work around the "only one sound may be played via play-sound-from-file" rule, General Battuta used empty training messages. However, these cause asserts on debug builds, which I believe are caused by a faulty check. The assertion reads: "Assert(Training_num_lines > 0);" Training_num_lines is determined by running the message that is to be sent through split_str, which may return 0 on empty messages (that is, messages consisting entirely of whitespace). Changing the check to Assert(Training_num_lines >= 0) fixes this. | ||||
| Tags | No tags attached. | ||||
|
2010-04-18 17:33
|
2178_patch.patch (1,576 bytes)
Index: code/mission/missiontraining.cpp
===================================================================
--- code/mission/missiontraining.cpp (revision 6057)
+++ code/mission/missiontraining.cpp (working copy)
@@ -785,6 +785,8 @@
training_process_message(Training_buf);
Training_num_lines = split_str(Training_buf, TRAINING_LINE_WIDTH, Training_line_sizes, Training_lines, MAX_TRAINING_MESSAGE_LINES);
+ Assert( Training_num_lines >= 0, "split_str encountered an error" );
+
if (message_play_training_voice(Messages[m].wave_info.index) < 0) {
if (length > 0)
Training_message_timestamp = timestamp(length * 1000);
@@ -917,20 +919,18 @@
return;
}
- // next two lines moved to message_training_setup() - taylor
-// training_process_message(Training_buf);
-// Training_num_lines = split_str(Training_buf, TRAINING_LINE_WIDTH, Training_line_sizes, Training_lines, MAX_TRAINING_MESSAGE_LINES);
+ // the code that preps the training message and counts the number of lines
+ // has been moved to message_training_setup()
- Assert(Training_num_lines > 0);
+ if (Training_num_lines <= 0){
+ return;
+ }
+
for (i=0; i<Training_num_lines; i++) {
Training_lines[i][Training_line_sizes[i]] = 0;
drop_leading_white_space(Training_lines[i]);
}
- if (Training_num_lines <= 0){
- return;
- }
-
height = gr_get_font_height();
gr_set_shader(&Training_msg_glass);
gr_shade(Training_message_window_coords[gr_screen.res][0], Training_message_window_coords[gr_screen.res][1], TRAINING_MESSAGE_WINDOW_WIDTH, Training_num_lines * height + height);
|
|
|
Attached a fix. It moves the Assert to the location that the split_str is actually called. Also, moves the number of lines guard to before the number of lines is used for anything. |
|
|
Patch added in revision 6062. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2010-04-09 19:04 | The_E | New Issue | |
| 2010-04-18 17:33 | iss_mneur | File Added: 2178_patch.patch | |
| 2010-04-18 17:43 | iss_mneur | Note Added: 0011888 | |
| 2010-04-19 03:48 | Goober5000 | Note Added: 0011891 | |
| 2010-04-19 03:48 | Goober5000 | Assigned To | => iss_mneur |
| 2010-04-19 03:48 | Goober5000 | Status | new => resolved |
| 2010-04-19 03:48 | Goober5000 | Resolution | open => fixed |
| 2010-04-19 03:48 | Goober5000 | Fixed in Version | => 3.6.12 |