[base] Fix bitmap copying where the new pitch is smaller.
* src/base/ftbitmap.c (ft_bitmap_assure_buffer): Handle it.
This commit is contained in:
parent
38ecc949ce
commit
c0f1adedcf
@ -1,3 +1,9 @@
|
||||
2018-04-22 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
[base] Fix bitmap copying where the new pitch is smaller.
|
||||
|
||||
* src/base/ftbitmap.c (ft_bitmap_assure_buffer): Handle it.
|
||||
|
||||
2018-04-22 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
Another fix for handling invalid format 2 cmaps.
|
||||
|
@ -237,20 +237,35 @@
|
||||
unsigned char* out = buffer;
|
||||
|
||||
unsigned char* limit = bitmap->buffer + pitch * bitmap->rows;
|
||||
unsigned int delta = new_pitch - pitch;
|
||||
|
||||
|
||||
FT_MEM_ZERO( out, new_pitch * ypixels );
|
||||
out += new_pitch * ypixels;
|
||||
|
||||
while ( in < limit )
|
||||
if ( new_pitch > pitch )
|
||||
{
|
||||
FT_MEM_COPY( out, in, len );
|
||||
in += pitch;
|
||||
out += pitch;
|
||||
unsigned int delta = new_pitch - pitch;
|
||||
|
||||
FT_MEM_ZERO( out, delta );
|
||||
out += delta;
|
||||
|
||||
while ( in < limit )
|
||||
{
|
||||
FT_MEM_COPY( out, in, len );
|
||||
in += pitch;
|
||||
out += pitch;
|
||||
|
||||
/* we have to zero out the new (unused) pitch bytes */
|
||||
FT_MEM_ZERO( out, delta );
|
||||
out += delta;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while ( in < limit )
|
||||
{
|
||||
FT_MEM_COPY( out, in, len );
|
||||
in += pitch;
|
||||
out += new_pitch;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -261,17 +276,32 @@
|
||||
unsigned char* out = buffer;
|
||||
|
||||
unsigned char* limit = bitmap->buffer + pitch * bitmap->rows;
|
||||
unsigned int delta = new_pitch - pitch;
|
||||
|
||||
|
||||
while ( in < limit )
|
||||
if ( new_pitch > pitch )
|
||||
{
|
||||
FT_MEM_COPY( out, in, len );
|
||||
in += pitch;
|
||||
out += pitch;
|
||||
unsigned int delta = new_pitch - pitch;
|
||||
|
||||
FT_MEM_ZERO( out, delta );
|
||||
out += delta;
|
||||
|
||||
while ( in < limit )
|
||||
{
|
||||
FT_MEM_COPY( out, in, len );
|
||||
in += pitch;
|
||||
out += pitch;
|
||||
|
||||
/* we have to zero out the new (unused) pitch bytes */
|
||||
FT_MEM_ZERO( out, delta );
|
||||
out += delta;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while ( in < limit )
|
||||
{
|
||||
FT_MEM_COPY( out, in, len );
|
||||
in += pitch;
|
||||
out += new_pitch;
|
||||
}
|
||||
}
|
||||
|
||||
FT_MEM_ZERO( out, new_pitch * ypixels );
|
||||
|
Loading…
Reference in New Issue
Block a user