Skip to content

Commit e2bf274

Browse files
committed
[SVG] Fixed crash caused by animating colour with a single entry in 'values'
1 parent 7506ebe commit e2bf274

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/svg/anim_metrics.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,20 @@ FRGB anim_base::get_colour_value(objVector &Vector, FIELD Field)
391391
double seek_to = seek;
392392

393393
if (not values.empty()) {
394-
LONG vi = F2T((values.size()-1) * seek);
395-
if (vi >= LONG(values.size())-1) vi = values.size() - 2;
396-
vec::ReadPainter(NULL, values[vi].c_str(), &from_col, NULL);
397-
vec::ReadPainter(NULL, values[vi+1].c_str(), &to_col, NULL);
394+
if (values.size() >= 2) {
395+
LONG vi = F2T((values.size()-1) * seek);
396+
if (vi >= LONG(values.size())-1) vi = values.size() - 2;
397+
vec::ReadPainter(NULL, values[vi].c_str(), &from_col, NULL);
398+
vec::ReadPainter(NULL, values[vi+1].c_str(), &to_col, NULL);
398399

399-
const double mod = 1.0 / double(values.size() - 1);
400-
seek_to = (seek >= 1.0) ? 1.0 : fmod(seek, mod) / mod;
400+
const double mod = 1.0 / double(values.size() - 1);
401+
seek_to = (seek >= 1.0) ? 1.0 : fmod(seek, mod) / mod;
402+
}
403+
else if (values.size() IS 1) { // Equivalent to a single 'to'
404+
vec::ReadPainter(NULL, target_attrib_orig.c_str(), &from_col, NULL);
405+
vec::ReadPainter(NULL, values[0].c_str(), &to_col, NULL);
406+
}
407+
else return { 0, 0, 0, 0 };
401408
}
402409
else if (not from.empty()) {
403410
if (not to.empty()) {

0 commit comments

Comments
 (0)