https://bugzilla.novell.com/show_bug.cgi?id=652562
https://bugzilla.novell.com/show_bug.cgi?id=652562#c16
Petr Mladek changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |NEEDINFO
InfoProvider| |kendy@novell.com
--- Comment #16 from Petr Mladek 2011-02-10 19:30:40 UTC ---
I am still unable to reproduce it.
Anyway, the gdb long in the comment #2 shows that it crashes in the code:
--- cut libs-core/desktop/unx/source/splashx.c ---
else if ( bpp == 24 )
{
if ( machine_byte_order == byte_order && byte_order == LSBFirst )
COPY_IN_OUT( 3, *( (color_t *)out ) = *( (color_t *)( &pixel )
); out += 3; )
if ( machine_byte_order == byte_order && byte_order == MSBFirst )
COPY_IN_OUT( 3, uint32_t tmp = pixel;
*( (uint8_t *)out ) = *( (uint8_t *)(&tmp) + 1
);
*( (uint8_t *)out + 1 ) = *( (uint8_t *)(&tmp) + 2
);
*( (uint8_t *)out + 2 ) = *( (uint8_t *)(&tmp) + 3
);
out += 3; )
else
crash ----> COPY_IN_OUT( 3, uint32_t tmp = pixel;
*( (uint8_t *)out ) = *( (uint8_t *)(&tmp) + 3
);
*( (uint8_t *)out + 1 ) = *( (uint8_t *)(&tmp) + 2
);
*( (uint8_t *)out + 2 ) = *( (uint8_t *)(&tmp) + 1
);
out += 3; )
--- cut libs-core/desktop/unx/source/splashx.c ---
If I understand the code correctly, it used when you have the screen color
depth 24bpp. Most people use 32bpp. It might explain why they do not see the
problem.
I think that the followin lines are a bit suspicious:
--- cut libs-core/desktop/unx/source/splashx.c ---
if ( machine_byte_order == byte_order && byte_order == LSBFirst )
COPY_IN_OUT( 3, *( (color_t *)out ) = *( (color_t *)( &pixel )
); out += 3; )
--- cut libs-core/desktop/unx/source/splashx.c ---
It bumps the out pointer by 3; It is bumped again in the "else" part if the
following "if" condition. It might be the reason why it crashes.
Kendy, you wrote the code. What do you think?
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.