When GetObject is called with a NULL pointer, return the object's

size.
This commit is contained in:
Mike McCormack 2003-07-26 20:39:46 +00:00 committed by Alexandre Julliard
parent 039e13118e
commit 369116d911
6 changed files with 19 additions and 6 deletions

View File

@ -555,6 +555,8 @@ static INT BITMAP_GetObject( HGDIOBJ handle, void *obj, INT count, LPVOID buffer
if (bmp->dib)
{
if( !buffer )
return sizeof(DIBSECTION);
if (count < sizeof(DIBSECTION))
{
if (count > sizeof(BITMAP)) count = sizeof(BITMAP);
@ -569,6 +571,8 @@ static INT BITMAP_GetObject( HGDIOBJ handle, void *obj, INT count, LPVOID buffer
}
else
{
if( !buffer )
return sizeof(BITMAP);
if (count > sizeof(BITMAP)) count = sizeof(BITMAP);
memcpy( buffer, &bmp->bitmap, count );
return count;

View File

@ -352,6 +352,9 @@ static INT BRUSH_GetObject( HGDIOBJ handle, void *obj, INT count, LPVOID buffer
{
BRUSHOBJ *brush = obj;
if( !buffer )
return sizeof(brush->logbrush);
if (count > sizeof(brush->logbrush)) count = sizeof(brush->logbrush);
memcpy( buffer, &brush->logbrush, count );
return count;

View File

@ -472,11 +472,12 @@ static INT FONT_GetObjectA( HGDIOBJ handle, void *obj, INT count, LPVOID buffer
FONTOBJ *font = obj;
LOGFONTA lfA;
if(!buffer)
return sizeof(lfA);
FONT_LogFontWToA( &font->logfont, &lfA );
if (count > sizeof(lfA)) count = sizeof(lfA);
if(buffer)
memcpy( buffer, &lfA, count );
memcpy( buffer, &lfA, count );
return count;
}
@ -486,9 +487,10 @@ static INT FONT_GetObjectA( HGDIOBJ handle, void *obj, INT count, LPVOID buffer
static INT FONT_GetObjectW( HGDIOBJ handle, void *obj, INT count, LPVOID buffer )
{
FONTOBJ *font = obj;
if(!buffer)
return sizeof(LOGFONTW);
if (count > sizeof(LOGFONTW)) count = sizeof(LOGFONTW);
if(buffer)
memcpy( buffer, &font->logfont, count );
memcpy( buffer, &font->logfont, count );
return count;
}

View File

@ -941,7 +941,6 @@ INT WINAPI GetObjectA( HANDLE handle, INT count, LPVOID buffer )
GDIOBJHDR * ptr;
INT result = 0;
TRACE("%p %d %p\n", handle, count, buffer );
if (!count) return 0;
if (!(ptr = GDI_GetObjPtr( handle, MAGIC_DONTCARE ))) return 0;
@ -962,7 +961,6 @@ INT WINAPI GetObjectW( HANDLE handle, INT count, LPVOID buffer )
GDIOBJHDR * ptr;
INT result = 0;
TRACE("%p %d %p\n", handle, count, buffer );
if (!count) return 0;
if (!(ptr = GDI_GetObjPtr( handle, MAGIC_DONTCARE ))) return 0;

View File

@ -625,6 +625,9 @@ static INT PALETTE_GetObject( HGDIOBJ handle, void *obj, INT count, LPVOID buffe
{
PALETTEOBJ *palette = obj;
if( !buffer )
return sizeof(WORD);
if (count > sizeof(WORD)) count = sizeof(WORD);
memcpy( buffer, &palette->logpalette.palNumEntries, count );
return count;

View File

@ -167,6 +167,9 @@ static INT PEN_GetObject( HGDIOBJ handle, void *obj, INT count, LPVOID buffer )
{
PENOBJ *pen = obj;
if( !buffer )
return sizeof(pen->logpen);
if (count > sizeof(pen->logpen)) count = sizeof(pen->logpen);
memcpy( buffer, &pen->logpen, count );
return count;