summaryrefslogtreecommitdiffstats
path: root/printing
diff options
context:
space:
mode:
authorvitalybuka <vitalybuka@chromium.org>2014-10-08 21:32:58 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-09 04:33:17 +0000
commitf16d34bbc32d79d739bd2e151552e5229de5e3c1 (patch)
treeeee789ae4176269bd47e62eb9dc6de416910ece4 /printing
parent679d31a211c8844eda3ec6b51efadb54e8fe1d0b (diff)
downloadchromium_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')
-rw-r--r--printing/backend/win_helper.cc12
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();
}