aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/lib/strings/numbers.cc
diff options
context:
space:
mode:
authorGravatar David G. Andersen <dga@google.com>2016-10-20 18:25:04 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2016-10-20 19:38:28 -0700
commit7231d01fcb2cd9ef9ffbfea03b724892c8a4026e (patch)
tree4db9d5770fcb03f1342dcd4d36e2623debf2a6ce /tensorflow/core/lib/strings/numbers.cc
parent7b4af07b7424d76d460ea1afc999532f77ee8386 (diff)
Fix out-of-bounds read discovered by libFuzzer.
locale_independent_strtonum returned str-1 incorrectly if there was overflow, because s.fail() was set, which causes s.tellg() to return -1. Change: 136790139
Diffstat (limited to 'tensorflow/core/lib/strings/numbers.cc')
-rw-r--r--tensorflow/core/lib/strings/numbers.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/tensorflow/core/lib/strings/numbers.cc b/tensorflow/core/lib/strings/numbers.cc
index 797233e746..4df0f54378 100644
--- a/tensorflow/core/lib/strings/numbers.cc
+++ b/tensorflow/core/lib/strings/numbers.cc
@@ -86,9 +86,11 @@ T locale_independent_strtonum(const char* str, const char** endptr) {
if (result == std::numeric_limits<T>::max()) {
result = std::numeric_limits<T>::infinity();
real_fail = false;
+ s.clear(s.rdstate() & ~std::ios::failbit);
} else if (result == -std::numeric_limits<T>::max()) {
result = -std::numeric_limits<T>::infinity();
real_fail = false;
+ s.clear(s.rdstate() & ~std::ios::failbit);
}
}