Closed Bug 1265739 Opened 9 years ago Closed 9 years ago

DocumentPropertiesW's return values are handled incorrectly in CreateGlobalDevModeAndInit

Categories

(Core :: Printing: Setup, defect)

All
Windows
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla51
Tracking Status
firefox51 --- fixed

People

(Reporter: so61pi.re, Unassigned)

Details

Attachments

(1 file)

User Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 Build ID: 20160407164938
DocumentPropertiesW's return type is LONG and negative value indicates an error. But currently in CreateGlobalDevModeAndInit it is casted to DWORD which can change its sign-ness.
OS: Unspecified → All
Hardware: Unspecified → All
OS: All → Windows
Thanks. This should probably be in Printing: Setup ... my fault I filed the previous one in the wrong component.
Status: UNCONFIRMED → NEW
Component: Printing: Output → Printing: Setup
Ever confirmed: true
Comment on attachment 8783403 [details] Bug 1265739 - DocumenetProperties should use LONG as return type. https://reviewboard.mozilla.org/r/73202/#review71426 ::: embedding/components/printingui/win/nsPrintDialogUtil.cpp:484 (Diff revision 1) > > // Make sure hPrinter is closed on all paths > nsAutoPrinter autoPrinter(hPrinter); > > // Get the buffer size > - DWORD dwNeeded = ::DocumentPropertiesW(gParentWnd, hPrinter, printName, nullptr, > + LONG needed = ::DocumentPropertiesW(gParentWnd, hPrinter, printName, nullptr, nit - indentation ::: embedding/components/printingui/win/nsPrintDialogUtil.cpp:503 (Diff revision 1) > nsAutoGlobalMem globalDevMode(hDevMode); > if (!hDevMode) { > return nsReturnRef<nsHGLOBAL>(); > } > > - DWORD dwRet = ::DocumentPropertiesW(gParentWnd, hPrinter, printName, newDevMode, > + LONG ret = ::DocumentPropertiesW(gParentWnd, hPrinter, printName, newDevMode, nit - indentation ::: embedding/components/printingui/win/nsPrintDialogUtil.cpp:523 (Diff revision 1) > nsCOMPtr<nsIPrintSettingsWin> psWin = do_QueryInterface(aPS); > MOZ_ASSERT(psWin); > psWin->CopyToNative(devMode); > > // Sets back the changes we made to the DevMode into the Printer Driver > - dwRet = ::DocumentPropertiesW(gParentWnd, hPrinter, printName, devMode, devMode, > + ret = ::DocumentPropertiesW(gParentWnd, hPrinter, printName, devMode, devMode, nit - indentation ::: widget/windows/nsDeviceContextSpecWin.cpp:346 (Diff revision 1) > > // Allocate a buffer of the correct size. > - dwNeeded = ::DocumentPropertiesW(nullptr, hPrinter, name, nullptr, nullptr, 0); > + LONG needed = ::DocumentPropertiesW(nullptr, hPrinter, name, nullptr, > + nullptr, 0); > + if (needed < 0) { > + PR_PL(("**** nsDeviceContextSpecWin::GetDataFromPrinter - Couldn't get size of DEVMODE using DocumentPropertiesW(pDeviceName = \"%s\"). GetLastEror() = %08x\n", lets wrap this sting over so it's not over 80 char limit.
Comment on attachment 8783403 [details] Bug 1265739 - DocumenetProperties should use LONG as return type. https://reviewboard.mozilla.org/r/73202/#review71430
Attachment #8783403 - Flags: review?(jmathies) → review+
Pushed by m_kato@ga2.so-net.ne.jp: https://hg.mozilla.org/integration/mozilla-inbound/rev/79e57fc02263 DocumenetProperties should use LONG as return type. r=jimm
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla51
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: