Index: util/numeric/safe_assignment.h |
diff --git a/util/numeric/safe_assignment.h b/util/numeric/safe_assignment.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..05e0b2d9cfd2e2bf8476b8a5996a84284e9296c5 |
--- /dev/null |
+++ b/util/numeric/safe_assignment.h |
@@ -0,0 +1,44 @@ |
+// Copyright 2014 The Crashpad Authors. All rights reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+#ifndef CRASHPAD_UTIL_NUMERIC_SAFE_ASSIGNMENT_H_ |
+#define CRASHPAD_UTIL_NUMERIC_SAFE_ASSIGNMENT_H_ |
+ |
+#include "base/numerics/safe_conversions.h" |
+ |
+namespace crashpad { |
+ |
+//! \brief Performs an assignment if it can be done safely, and signals if it |
+//! cannot be done safely. |
+//! |
+//! \param[out] destination A pointer to the variable to be assigned to. |
+//! \param[in] source The value to assign. |
+//! |
+//! \return `true` if \a source is in the range supported by the type of \a |
+//! *destination, with the assignment to \a *destination having been |
+//! performed. `false` if the assignment cannot be completed safely because |
+//! \a source is outside of this range. |
+template <typename Destination, typename Source> |
+bool AssignIfInRange(Destination* destination, Source source) { |
+ if (!base::IsValueInRangeForNumericType<Destination>(source)) { |
+ return false; |
+ } |
+ |
+ *destination = source; |
+ return true; |
+} |
+ |
+} // namespace crashpad |
+ |
+#endif // CRASHPAD_UTIL_NUMERIC_SAFE_ASSIGNMENT_H_ |