aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Benoit Steiner <bsteiner@google.com>2018-01-04 13:42:13 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-01-04 13:45:42 -0800
commit698bc996f7190f5cd836d48d29b8c1b3ddcd37c2 (patch)
tree39bc4c4e1d504c9c6d99e0a12f856eda4f5a5190
parentcc6a4bb1952642f481875e41183e0749d6f5dbaa (diff)
Fixed the implementation of DataTypeString to avoid a stack overflow when
processing invalid types PiperOrigin-RevId: 180839917
-rw-r--r--tensorflow/core/framework/types.cc16
1 files changed, 11 insertions, 5 deletions
diff --git a/tensorflow/core/framework/types.cc b/tensorflow/core/framework/types.cc
index 58354d6f4e..8bc4403094 100644
--- a/tensorflow/core/framework/types.cc
+++ b/tensorflow/core/framework/types.cc
@@ -47,11 +47,8 @@ const std::string DeviceName<Eigen::GpuDevice>::value = DEVICE_GPU;
const std::string DeviceName<Eigen::SyclDevice>::value = DEVICE_SYCL;
#endif // TENSORFLOW_USE_SYCL
-string DataTypeString(DataType dtype) {
- if (IsRefType(dtype)) {
- DataType non_ref = static_cast<DataType>(dtype - kDataTypeRefOffset);
- return strings::StrCat(DataTypeString(non_ref), "_ref");
- }
+namespace {
+string DataTypeStringInternal(DataType dtype) {
switch (dtype) {
case DT_INVALID:
return "INVALID";
@@ -106,6 +103,15 @@ string DataTypeString(DataType dtype) {
return strings::StrCat("unknown dtype enum (", dtype, ")");
}
}
+} // end namespace
+
+string DataTypeString(DataType dtype) {
+ if (IsRefType(dtype)) {
+ DataType non_ref = static_cast<DataType>(dtype - kDataTypeRefOffset);
+ return strings::StrCat(DataTypeStringInternal(non_ref), "_ref");
+ }
+ return DataTypeStringInternal(dtype);
+}
bool DataTypeFromString(StringPiece sp, DataType* dt) {
if (sp.ends_with("_ref")) {