diff options
author | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-21 23:27:25 +0000 |
---|---|---|
committer | vitalybuka@chromium.org <vitalybuka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-21 23:27:25 +0000 |
commit | 25ecf19e35e5e874d53f0f029ba7fbc6b68aa31e (patch) | |
tree | 1adf0772511b9a65c63a6b8c1b9c0e97e9a1ab61 /printing | |
parent | e908b234787a8f216ca36ac0f531a1cde04e3152 (diff) | |
download | chromium_src-25ecf19e35e5e874d53f0f029ba7fbc6b68aa31e.zip chromium_src-25ecf19e35e5e874d53f0f029ba7fbc6b68aa31e.tar.gz chromium_src-25ecf19e35e5e874d53f0f029ba7fbc6b68aa31e.tar.bz2 |
Less strict CHECK for DeviceCapabilities results.
We should crash only if returned result is bigger that buffer we provided.
BUG=345605
NOTRY=true
Review URL: https://codereview.chromium.org/175603002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@252685 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'printing')
-rw-r--r-- | printing/backend/print_backend_win.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/printing/backend/print_backend_win.cc b/printing/backend/print_backend_win.cc index b23407c..7d4ebda 100644 --- a/printing/backend/print_backend_win.cc +++ b/printing/backend/print_backend_win.cc @@ -8,6 +8,7 @@ #include <winspool.h> #include "base/memory/scoped_ptr.h" +#include "base/numerics/safe_conversions.h" #include "base/strings/string_piece.h" #include "base/strings/utf_string_conversions.h" #include "base/win/scoped_bstr.h" @@ -42,10 +43,15 @@ void GetDeviceCapabilityArray(const wchar_t* printer, int count = DeviceCapabilities(printer, port, id, NULL, NULL); if (count <= 0) return; - result->resize(count); - CHECK_EQ(count, - DeviceCapabilities(printer, port, id, - reinterpret_cast<LPTSTR>(result->data()), NULL)); + std::vector<T> tmp; + tmp.resize(count * 2); + count = DeviceCapabilities(printer, port, id, + reinterpret_cast<LPTSTR>(tmp.data()), NULL); + if (count <= 0) + return; + CHECK_LE(count, base::checked_cast<int>(tmp.size())); + tmp.resize(count); + result->swap(tmp); } void LoadPaper(const wchar_t* printer, |