Commit b34d9527 authored by Scott Little's avatar Scott Little Committed by Commit Bot

Prevent integer overflow in translate::ReportForceTriggerOnEnglishPages()

Previously, it was theoretically possible for this method to encounter
an integer overflow. This CL prevents that by capping the value at max
int.

Bug: 1085171
Change-Id: Ib4e7208a8f4322c3ccaedc092fe853593df2cb01
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2210934
Auto-Submit: Scott Little <sclittle@chromium.org>
Commit-Queue: Megan Jablonski <megjablon@chromium.org>
Reviewed-by: default avatarMegan Jablonski <megjablon@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770819}
parent f97afcbd
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "components/translate/core/browser/translate_prefs.h" #include "components/translate/core/browser/translate_prefs.h"
#include <algorithm> #include <algorithm>
#include <limits>
#include <memory> #include <memory>
#include <set> #include <set>
#include <utility> #include <utility>
...@@ -803,7 +804,7 @@ int TranslatePrefs::GetForceTriggerOnEnglishPagesCount() const { ...@@ -803,7 +804,7 @@ int TranslatePrefs::GetForceTriggerOnEnglishPagesCount() const {
void TranslatePrefs::ReportForceTriggerOnEnglishPages() { void TranslatePrefs::ReportForceTriggerOnEnglishPages() {
int current_count = GetForceTriggerOnEnglishPagesCount(); int current_count = GetForceTriggerOnEnglishPagesCount();
if (current_count != -1) if (current_count != -1 && current_count < std::numeric_limits<int>::max())
prefs_->SetInteger(kForceTriggerTranslateCount, current_count + 1); prefs_->SetInteger(kForceTriggerTranslateCount, current_count + 1);
} }
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "components/translate/core/browser/translate_prefs.h" #include "components/translate/core/browser/translate_prefs.h"
#include <algorithm> #include <algorithm>
#include <limits>
#include <string> #include <string>
#include <utility> #include <utility>
#include <vector> #include <vector>
...@@ -42,6 +43,9 @@ const char kAcceptLanguagesPref[] = "intl.accept_languages"; ...@@ -42,6 +43,9 @@ const char kAcceptLanguagesPref[] = "intl.accept_languages";
const char kTranslateBlockedLanguagesPref[] = "translate_blocked_languages"; const char kTranslateBlockedLanguagesPref[] = "translate_blocked_languages";
const char kForceTriggerTranslateCountPref[] =
"translate_force_trigger_on_english_count_for_backoff_1";
} // namespace } // namespace
namespace translate { namespace translate {
...@@ -982,4 +986,30 @@ TEST_F(TranslatePrefsTest, CanTranslateLanguage) { ...@@ -982,4 +986,30 @@ TEST_F(TranslatePrefsTest, CanTranslateLanguage) {
EXPECT_TRUE(translate_prefs_->CanTranslateLanguage( EXPECT_TRUE(translate_prefs_->CanTranslateLanguage(
&translate_accept_languages, "en")); &translate_accept_languages, "en"));
} }
TEST_F(TranslatePrefsTest, ForceTriggerOnEnglishPagesCount) {
prefs_->SetInteger(kForceTriggerTranslateCountPref,
std::numeric_limits<int>::max() - 1);
EXPECT_EQ(std::numeric_limits<int>::max() - 1,
translate_prefs_->GetForceTriggerOnEnglishPagesCount());
// The count should increment up to max int.
translate_prefs_->ReportForceTriggerOnEnglishPages();
EXPECT_EQ(std::numeric_limits<int>::max(),
translate_prefs_->GetForceTriggerOnEnglishPagesCount());
// The count should not increment past max int.
translate_prefs_->ReportForceTriggerOnEnglishPages();
EXPECT_EQ(std::numeric_limits<int>::max(),
translate_prefs_->GetForceTriggerOnEnglishPagesCount());
translate_prefs_->ReportAcceptedAfterForceTriggerOnEnglishPages();
EXPECT_EQ(-1, translate_prefs_->GetForceTriggerOnEnglishPagesCount());
// Incrementing after force triggering has already been accepted should have
// no effect.
translate_prefs_->ReportForceTriggerOnEnglishPages();
EXPECT_EQ(-1, translate_prefs_->GetForceTriggerOnEnglishPagesCount());
}
} // namespace translate } // namespace translate
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment