fix a crash in gifload with a missing colormap
it seems gifs can have a missing colormap, who knew thanks Kleis see https://github.com/jcupitt/libvips/issues/773
This commit is contained in:
parent
68ed42e2fa
commit
53119250cc
@ -13,6 +13,8 @@
|
|||||||
* - better transparency detection, thanks diegocsandrim
|
* - better transparency detection, thanks diegocsandrim
|
||||||
* 25/11/16
|
* 25/11/16
|
||||||
* - support @n, page-height
|
* - support @n, page-height
|
||||||
|
* 5/10/17
|
||||||
|
* - colormap can be missing thanks Kleis
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -367,17 +369,22 @@ vips_foreign_load_gif_render_line( VipsForeignLoadGif *gif,
|
|||||||
for( x = 0; x < width; x++ ) {
|
for( x = 0; x < width; x++ ) {
|
||||||
VipsPel v = p[x];
|
VipsPel v = p[x];
|
||||||
|
|
||||||
if( v >= map->ColorCount ) {
|
if( map &&
|
||||||
g_warning( "%s", _( "pixel value out of range" ) );
|
v < map->ColorCount &&
|
||||||
continue;
|
v != gif->transparency ) {
|
||||||
}
|
|
||||||
|
|
||||||
if( v != gif->transparency ) {
|
|
||||||
q[0] = map->Colors[v].Red;
|
q[0] = map->Colors[v].Red;
|
||||||
q[1] = map->Colors[v].Green;
|
q[1] = map->Colors[v].Green;
|
||||||
q[2] = map->Colors[v].Blue;
|
q[2] = map->Colors[v].Blue;
|
||||||
q[3] = 255;
|
q[3] = 255;
|
||||||
}
|
}
|
||||||
|
else if( v != gif->transparency ) {
|
||||||
|
/* If there's no map, just save the index.
|
||||||
|
*/
|
||||||
|
q[0] = v;
|
||||||
|
q[1] = v;
|
||||||
|
q[2] = v;
|
||||||
|
q[3] = 255;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
q[0] = 0;
|
q[0] = 0;
|
||||||
q[1] = 0;
|
q[1] = 0;
|
||||||
@ -414,7 +421,8 @@ vips_foreign_load_gif_render( VipsForeignLoadGif *gif, VipsImage *out )
|
|||||||
|
|
||||||
/* Check if we have a non-greyscale colourmap for this frame.
|
/* Check if we have a non-greyscale colourmap for this frame.
|
||||||
*/
|
*/
|
||||||
if( !gif->has_colour ) {
|
if( !gif->has_colour &&
|
||||||
|
map ) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for( i = 0; i < map->ColorCount; i++ )
|
for( i = 0; i < map->ColorCount; i++ )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user