mirror of
https://github.com/boostorg/utility.git
synced 2025-05-09 02:44:10 +00:00
Make string_{view|ref} remove_prefix and remove_suffix throw on invalid lengths. Addresses issue #73
This commit is contained in:
parent
7aafdf92a0
commit
601fc9371f
@ -147,15 +147,15 @@ namespace boost {
|
||||
// modifiers
|
||||
void clear() { len_ = 0; }
|
||||
void remove_prefix(size_type n) {
|
||||
if ( n > len_ )
|
||||
n = len_;
|
||||
if ( n > size())
|
||||
BOOST_THROW_EXCEPTION( std::out_of_range ( "string_ref::substr" ) );
|
||||
ptr_ += n;
|
||||
len_ -= n;
|
||||
}
|
||||
|
||||
void remove_suffix(size_type n) {
|
||||
if ( n > len_ )
|
||||
n = len_;
|
||||
if ( n > size())
|
||||
BOOST_THROW_EXCEPTION( std::out_of_range ( "string_ref::substr" ) );
|
||||
len_ -= n;
|
||||
}
|
||||
|
||||
|
@ -141,15 +141,15 @@ namespace boost {
|
||||
void clear() BOOST_NOEXCEPT { len_ = 0; } // Boost extension
|
||||
|
||||
BOOST_CXX14_CONSTEXPR void remove_prefix(size_type n) {
|
||||
if ( n > len_ )
|
||||
n = len_;
|
||||
if ( n > size())
|
||||
BOOST_THROW_EXCEPTION( std::out_of_range ( "string_ref::substr" ) );
|
||||
ptr_ += n;
|
||||
len_ -= n;
|
||||
}
|
||||
|
||||
BOOST_CXX14_CONSTEXPR void remove_suffix(size_type n) {
|
||||
if ( n > len_ )
|
||||
n = len_;
|
||||
if ( n > size())
|
||||
BOOST_THROW_EXCEPTION( std::out_of_range ( "string_ref::substr" ) );
|
||||
len_ -= n;
|
||||
}
|
||||
|
||||
|
@ -74,6 +74,13 @@ void test_remove ( const std::string &str ) {
|
||||
}
|
||||
}
|
||||
|
||||
ref = str;
|
||||
try {
|
||||
ref.remove_prefix(ref.size() + 1);
|
||||
BOOST_TEST(false);
|
||||
}
|
||||
catch ( const std::out_of_range &) {}
|
||||
|
||||
for ( size_t i = 1; i < sz; ++ i ) {
|
||||
work = str;
|
||||
ref = str;
|
||||
@ -83,6 +90,13 @@ void test_remove ( const std::string &str ) {
|
||||
ref.remove_suffix (i);
|
||||
}
|
||||
}
|
||||
|
||||
ref = str;
|
||||
try {
|
||||
ref.remove_suffix(ref.size() + 1);
|
||||
BOOST_TEST(false);
|
||||
}
|
||||
catch ( const std::out_of_range &) {}
|
||||
}
|
||||
|
||||
const char *test_strings [] = {
|
||||
|
@ -75,6 +75,13 @@ void test_remove ( const std::string &str ) {
|
||||
}
|
||||
}
|
||||
|
||||
ref = str;
|
||||
try {
|
||||
ref.remove_prefix(ref.size() + 1);
|
||||
BOOST_TEST(false);
|
||||
}
|
||||
catch ( const std::out_of_range &) {}
|
||||
|
||||
for ( size_t i = 1; i < sz; ++ i ) {
|
||||
work = str;
|
||||
ref = str;
|
||||
@ -84,6 +91,13 @@ void test_remove ( const std::string &str ) {
|
||||
ref.remove_suffix (i);
|
||||
}
|
||||
}
|
||||
|
||||
ref = str;
|
||||
try {
|
||||
ref.remove_suffix(ref.size() + 1);
|
||||
BOOST_TEST(false);
|
||||
}
|
||||
catch ( const std::out_of_range &) {}
|
||||
}
|
||||
|
||||
void test_hash(const std::string& str) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user