Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Unified Diff: printing/backend/win_helper.cc

Issue 644463002: Zeroes buffer for DocumentProperti (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: printing/backend/win_helper.cc
diff --git a/printing/backend/win_helper.cc b/printing/backend/win_helper.cc
index bb6b69e7424ad5646c7e82c2506ab5e76497b3d3..30db31ec1a317694f7f8bb2605cd073346aa5409 100644
--- a/printing/backend/win_helper.cc
+++ b/printing/backend/win_helper.cc
@@ -478,13 +478,16 @@ scoped_ptr<DEVMODE, base::FreeDeleter> CreateDevMode(HANDLE printer,
return scoped_ptr<DEVMODE, base::FreeDeleter>();
scoped_ptr<DEVMODE, base::FreeDeleter> out(
reinterpret_cast<DEVMODE*>(malloc(buffer_size)));
+ memset(out.get(), 0, buffer_size);
Lei Zhang 2014/10/08 20:11:34 Just calloc() instead?
Vitaly Buka (NO REVIEWS) 2014/10/08 20:18:15 Done.
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);
+ WORD size = out->dmSize;
+ WORD extra_size = out->dmDriverExtra;
+ CHECK_GE(buffer_size, size + extra_size);
Lei Zhang 2014/10/08 20:11:34 Do we care if size + extra_size overflows?
Vitaly Buka (NO REVIEWS) 2014/10/08 20:18:15 Done.
Lei Zhang 2014/10/08 20:24:15 I just checked and a WORD is only 16-bit. There's
Vitaly Buka (NO REVIEWS) 2014/10/08 20:32:55 C++ does WORD+WORD->WORD, so old version indeed ha
return out.Pass();
}
@@ -505,6 +508,7 @@ scoped_ptr<DEVMODE, base::FreeDeleter> PromptDevMode(
return scoped_ptr<DEVMODE, base::FreeDeleter>();
scoped_ptr<DEVMODE, base::FreeDeleter> out(
reinterpret_cast<DEVMODE*>(malloc(buffer_size)));
+ memset(out.get(), 0, buffer_size);
DWORD flags = (in ? (DM_IN_BUFFER) : 0) | DM_OUT_BUFFER | DM_IN_PROMPT;
LONG result = DocumentProperties(window,
printer,
@@ -516,7 +520,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);
+ WORD size = out->dmSize;
+ WORD extra_size = out->dmDriverExtra;
+ CHECK_GE(buffer_size, size + extra_size);
return out.Pass();
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698