THRIFT-5660: Revert "lib: cpp: TTransportException: create thrift::numeric_cast"

This reverts commit 6e9cbbd059.

See https://issues.apache.org/jira/browse/THRIFT-5660 for a discussion.
This commit is contained in:
Mario Emmenlauer 2023-10-14 15:03:12 +02:00
parent 3fdc63649e
commit 49e4cea002
2 changed files with 2 additions and 73 deletions

View File

@ -1,70 +0,0 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 THRIFT_NUMERIC_CAST_H
#define THRIFT_NUMERIC_CAST_H
#include <limits>
#include <stdexcept>
#if defined(_MSC_VER)
// avoid compiler warnings and errors in MSVC if max is defined as a macro
#undef max
#endif
namespace apache {
namespace thrift {
/**
* @brief Perform a safe numeric cast
*
* Previously this was provided by `boost::numeric_cast`. This
* implementation reduces the dependency on `boost`.
*
* @tparam Dst The destination type
* @tparam Src The source type
* @param value The value to be converted
* @return Dst The converted value
*
* @see <a href="https://stackoverflow.com/a/49658950/5636218">SA49658182</a>
*/
template <typename Dst, typename Src>
inline Dst numeric_cast(Src value) {
typedef std::numeric_limits<Dst> DstLim;
typedef std::numeric_limits<Src> SrcLim;
const bool positive_overflow_possible = DstLim::max() < SrcLim::max();
const bool negative_overflow_possible = DstLim::lowest() > SrcLim::lowest();
if (positive_overflow_possible && value > DstLim::max()) {
throw std::bad_cast();
}
if (negative_overflow_possible && (value < DstLim::lowest())) {
throw std::bad_cast();
}
// limits have been checked, therefore safe to cast
return static_cast<Dst>(value);
}
} // namespace thrift
} // namespace apache
#endif

View File

@ -20,9 +20,8 @@
#ifndef _THRIFT_TRANSPORT_TTRANSPORTEXCEPTION_H_
#define _THRIFT_TRANSPORT_TTRANSPORTEXCEPTION_H_ 1
#include <boost/numeric/conversion/cast.hpp>
#include <string>
#include <thrift/numeric_cast.h>
#include <thrift/Thrift.h>
namespace apache {
@ -93,7 +92,7 @@ protected:
*/
template <typename To, typename From> To safe_numeric_cast(From i) {
try {
return apache::thrift::numeric_cast<To>(i);
return boost::numeric_cast<To>(i);
}
catch (const std::bad_cast& bc) {
throw TTransportException(TTransportException::CORRUPTED_DATA,