diff options
author | vitalybuka <vitalybuka@chromium.org> | 2014-10-08 21:32:58 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-09 04:33:17 +0000 |
commit | f16d34bbc32d79d739bd2e151552e5229de5e3c1 (patch) | |
tree | eee789ae4176269bd47e62eb9dc6de416910ece4 /printing/backend/win_helper.cc | |
parent | 679d31a211c8844eda3ec6b51efadb54e8fe1d0b (diff) | |
download | chromium_src-f16d34bbc32d79d739bd2e151552e5229de5e3c1.zip chromium_src-f16d34bbc32d79d739bd2e151552e5229de5e3c1.tar.gz chromium_src-f16d34bbc32d79d739bd2e151552e5229de5e3c1.tar.bz2 |
Zeroes buffer for DocumentProperties.
Suspecting that driver does not reset dmDriverExtra.
BUG=421402
Review URL: https://codereview.chromium.org/644463002
Cr-Commit-Position: refs/heads/master@{#298760}
Diffstat (limited to 'printing/backend/win_helper.cc')
-rw-r--r-- | printing/backend/win_helper.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc index bb6b69e..8996b34 100644 --- a/printing/backend/win_helper.cc +++ b/printing/backend/win_helper.cc @@ -477,14 +477,16 @@ scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(HANDLE printer, if (buffer_size < static_cast<int>(sizeof(DEVMODE))) return scoped_ptr<DEVMODE, base::FreeDeleter>(); scoped_ptr<DEVMODE, base::FreeDeleter> out( - reinterpret_cast<DEVMODE*>(malloc(buffer_size))); + reinterpret_cast<DEVMODE*>(calloc(buffer_size, 1))); DWORD flags = (in ? (DM_IN_BUFFER) : 0) | DM_OUT_BUFFER; if (DocumentProperties( NULL, printer, const_cast<wchar_t*>(L""), out.get(), in, flags) != IDOK) { return scoped_ptr<DEVMODE, base::FreeDeleter>(); } - CHECK_GE(buffer_size, out.get()->dmSize + out.get()->dmDriverExtra); + int size = out->dmSize; + int extra_size = out->dmDriverExtra; + CHECK_GE(buffer_size, size + extra_size); return out.Pass(); } @@ -504,7 +506,7 @@ scoped_ptr<DEVMODE, base::FreeDeleter> PromptDevMode( if (buffer_size < static_cast<int>(sizeof(DEVMODE))) return scoped_ptr<DEVMODE, base::FreeDeleter>(); scoped_ptr<DEVMODE, base::FreeDeleter> out( - reinterpret_cast<DEVMODE*>(malloc(buffer_size))); + reinterpret_cast<DEVMODE*>(calloc(buffer_size, 1))); DWORD flags = (in ? (DM_IN_BUFFER) : 0) | DM_OUT_BUFFER | DM_IN_PROMPT; LONG result = DocumentProperties(window, printer, @@ -516,7 +518,9 @@ scoped_ptr<DEVMODE, base::FreeDeleter> PromptDevMode( *canceled = (result == IDCANCEL); if (result != IDOK) return scoped_ptr<DEVMODE, base::FreeDeleter>(); - CHECK_GE(buffer_size, out.get()->dmSize + out.get()->dmDriverExtra); + int size = out->dmSize; + int extra_size = out->dmDriverExtra; + CHECK_GE(buffer_size, size + extra_size); return out.Pass(); } |