diff options
author | Stephan Schäfer <ssa@openoffice.org> | 2001-12-03 12:41:04 +0000 |
---|---|---|
committer | Stephan Schäfer <ssa@openoffice.org> | 2001-12-03 12:41:04 +0000 |
commit | cc076cb9a05e81b9a9bab01bc1d205de8a3201ea (patch) | |
tree | 1a26ef1cbd770568c42f8c7d2dda3448a4acd1ec /vcl/win/source/gdi/salprn.cxx | |
parent | a1b8fa2a616225c41e948f8b9f493b8bf830c52e (diff) |
#95347# avoid buffer overwrites by buggy printer drivers
Diffstat (limited to 'vcl/win/source/gdi/salprn.cxx')
-rw-r--r-- | vcl/win/source/gdi/salprn.cxx | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/vcl/win/source/gdi/salprn.cxx b/vcl/win/source/gdi/salprn.cxx index 2817acb654c3..97dba89b4074 100644 --- a/vcl/win/source/gdi/salprn.cxx +++ b/vcl/win/source/gdi/salprn.cxx @@ -2,9 +2,9 @@ * * $RCSfile: salprn.cxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: mba $ $Date: 2001-05-14 09:47:51 $ + * last change: $Author: ssa $ $Date: 2001-12-03 13:41:04 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -780,10 +780,21 @@ static HDC ImplCreateSalPrnIC( SalInfoPrinter* pPrinter, ImplJobSetup* pSetupDat else pDevMode = NULL; // !!! UNICODE - NT Optimierung !!! - HDC hDC = CreateICA( ImplSalGetWinAnsiString( pPrinter->maPrinterData.maDriverName, TRUE ).GetBuffer(), - ImplSalGetWinAnsiString( pPrinter->maPrinterData.maDeviceName, TRUE ).GetBuffer(), + // #95347 some buggy drivers (eg, OKI) write to those buffers in CreateIC, although declared const - so provide some space + ByteString aDriver ( ImplSalGetWinAnsiString( pPrinter->maPrinterData.maDriverName, TRUE ) ); + ByteString aDevice ( ImplSalGetWinAnsiString( pPrinter->maPrinterData.maDeviceName, TRUE ) ); + int n = aDriver.Len() > aDevice.Len() ? aDriver.Len() : aDevice.Len(); + n += 2048; + char *lpszDriverName = new char[n]; + char *lpszDeviceName = new char[n]; + strcpy( lpszDriverName, aDriver.GetBuffer() ); + strcpy( lpszDeviceName, aDevice.GetBuffer() ); + HDC hDC = CreateICA( lpszDriverName, + lpszDeviceName, 0, (LPDEVMODE)pDevMode ); + delete [] lpszDriverName; + delete [] lpszDeviceName; return hDC; } @@ -1200,10 +1211,22 @@ BOOL SalPrinter::StartJob( const XubString* pFileName, pDevMode = NULL; // !!! UNICODE - NT Optimierung !!! - HDC hDC = CreateDCA( ImplSalGetWinAnsiString( maPrinterData.mpInfoPrinter->maPrinterData.maDriverName, TRUE ).GetBuffer(), - ImplSalGetWinAnsiString( maPrinterData.mpInfoPrinter->maPrinterData.maDeviceName, TRUE ).GetBuffer(), + // #95347 some buggy drivers (eg, OKI) write to those buffers in CreateDC, although declared const - so provide some space + ByteString aDriver ( ImplSalGetWinAnsiString( maPrinterData.mpInfoPrinter->maPrinterData.maDriverName, TRUE ) ); + ByteString aDevice ( ImplSalGetWinAnsiString( maPrinterData.mpInfoPrinter->maPrinterData.maDeviceName, TRUE ) ); + int n = aDriver.Len() > aDevice.Len() ? aDriver.Len() : aDevice.Len(); + n += 2048; + char *lpszDriverName = new char[n]; + char *lpszDeviceName = new char[n]; + strcpy( lpszDriverName, aDriver.GetBuffer() ); + strcpy( lpszDeviceName, aDevice.GetBuffer() ); + HDC hDC = CreateDCA( lpszDriverName, + lpszDeviceName, 0, - (LPDEVMODEA)pDevMode ); + (LPDEVMODE)pDevMode ); + + delete [] lpszDriverName; + delete [] lpszDeviceName; if ( pDevMode != pOrgDevMode ) delete pDevMode; |