Fix buffer overrun in Linux/x86_64 (Pixel is a 64 bit long, passing

a 32 bit int pointer to XtVaGetValues will cause trouble). Using a long
should suffice. A configure test would be better.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41640 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Mattia Barbon
2006-10-05 19:34:25 +00:00
parent 07a84e7bbb
commit 3e0071d949
15 changed files with 55 additions and 54 deletions

View File

@@ -195,7 +195,7 @@ wxWindowDC::wxWindowDC( wxWindow *window )
&gcvalues);
}
m_backgroundPixel = (int) gcvalues.background;
m_backgroundPixel = gcvalues.background;
SetBackground(wxBrush(m_window->GetBackgroundColour(), wxSOLID));
}
@@ -797,13 +797,13 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
// foreground colour. [m_textForegroundColour] Background pixels (0)
// will be painted with backgound colour (m_textBackgroundColour)
// Using ::SetPen is horribly slow, so avoid doing it
int oldBackgroundPixel = -1;
int oldForegroundPixel = -1;
WXPixel oldBackgroundPixel = -1;
WXPixel oldForegroundPixel = -1;
if (m_textBackgroundColour.Ok())
{
oldBackgroundPixel = m_backgroundPixel;
int pixel = m_textBackgroundColour.AllocColour(m_display);
WXPixel pixel = m_textBackgroundColour.AllocColour(m_display);
XSetBackground ((Display*) m_display, (GC) m_gc, pixel);
if (m_window && m_window->GetBackingPixmap())
@@ -818,7 +818,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
CalculatePixel( m_textForegroundColour,
m_textForegroundColour, true);
int pixel = m_textForegroundColour.GetPixel();
WXPixel pixel = m_textForegroundColour.GetPixel();
if (pixel > -1)
SetForegroundPixelWithLogicalFunction(pixel);
}
@@ -1056,7 +1056,7 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
if (!sameColour || !GET_OPTIMIZATION)
{
int pixel = m_textBackgroundColour.AllocColour(m_display);
WXPixel pixel = m_textBackgroundColour.AllocColour(m_display);
m_currentColour = m_textBackgroundColour;
// Set the GC to the required colour
@@ -1089,8 +1089,8 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
if (!sameColour || !GET_OPTIMIZATION)
{
int pixel = CalculatePixel(m_textForegroundColour,
m_currentColour, false);
WXPixel pixel = CalculatePixel(m_textForegroundColour,
m_currentColour, false);
// Set the GC to the required colour
if (pixel > -1)
@@ -1161,10 +1161,10 @@ void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y,
wxCHECK_RET( Ok(), "invalid dc" );
int oldBackgroundPixel = -1;
int oldForegroundPixel = -1;
int foregroundPixel = -1;
int backgroundPixel = -1;
WXPixel oldBackgroundPixel = -1;
WXPixel oldForegroundPixel = -1;
WXPixel foregroundPixel = -1;
WXPixel backgroundPixel = -1;
if (m_textBackgroundColour.Ok())
{
@@ -1414,7 +1414,7 @@ void wxWindowDC::SetFont( const wxFont &font )
#endif
}
void wxWindowDC::SetForegroundPixelWithLogicalFunction(int pixel)
void wxWindowDC::SetForegroundPixelWithLogicalFunction(WXPixel pixel)
{
if (m_logicalFunction == wxXOR)
{
@@ -1434,12 +1434,12 @@ void wxWindowDC::SetForegroundPixelWithLogicalFunction(int pixel)
}
}
int wxWindowDC::CalculatePixel(wxColour& colour, wxColour& curCol,
WXPixel wxWindowDC::CalculatePixel(wxColour& colour, wxColour& curCol,
bool roundToWhite) const
{
const unsigned char wp = (unsigned char)255;
int pixel = -1;
WXPixel pixel = -1;
if(!m_colour) // Mono display
{
unsigned char red = colour.Red ();
@@ -1451,16 +1451,16 @@ int wxWindowDC::CalculatePixel(wxColour& colour, wxColour& curCol,
((red != 0 || blue != 0 || green != 0) && roundToWhite))
{
curCol = *wxWHITE;
pixel = (int)WhitePixel((Display*) m_display,
DefaultScreen((Display*) m_display));
pixel = WhitePixel((Display*) m_display,
DefaultScreen((Display*) m_display));
curCol.SetPixel(pixel);
colour.SetPixel(pixel);
}
else
{
curCol = *wxBLACK;
pixel = (int)BlackPixel((Display*) m_display,
DefaultScreen((Display*) m_display));
pixel = BlackPixel((Display*) m_display,
DefaultScreen((Display*) m_display));
curCol.SetPixel(pixel);
colour.SetPixel(pixel);
}
@@ -1717,7 +1717,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
if (!sameColour || !GET_OPTIMIZATION
|| ((m_logicalFunction == wxXOR) || (m_autoSetting & 0x2)))
{
int pixel = -1;
WXPixel pixel = -1;
if (m_pen.GetStyle () == wxTRANSPARENT)
pixel = m_backgroundPixel;
else
@@ -1884,7 +1884,7 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
// must test m_logicalFunction, because it involves background!
if (!sameColour || !GET_OPTIMIZATION || m_logicalFunction == wxXOR)
{
int pixel = CalculatePixel(m_brush.GetColour(), m_currentColour, true);
WXPixel pixel = CalculatePixel(m_brush.GetColour(), m_currentColour, true);
if (pixel > -1)
SetForegroundPixelWithLogicalFunction(pixel);
@@ -2172,7 +2172,7 @@ static void XCopyRemote(Display *src_display, Display *dest_display,
static const int CACHE_SIZE = 256;
unsigned int i, j;
unsigned long cachesrc[CACHE_SIZE], cachedest[CACHE_SIZE];
Pixel cachesrc[CACHE_SIZE], cachedest[CACHE_SIZE];
int k, cache_pos, all_cache;
if (!cache || !*cache)
@@ -2190,7 +2190,7 @@ static void XCopyRemote(Display *src_display, Display *dest_display,
for (i = 0; i < w; i++)
for (j = 0; j < h; j++) {
unsigned long pixel;
Pixel pixel;
XColor xcol;
pixel = XGetPixel(image, i, j);