diff --git a/src/detail/header.cpp b/src/detail/header.cpp index 79637a91..b436bae1 100644 --- a/src/detail/header.cpp +++ b/src/detail/header.cpp @@ -1125,10 +1125,12 @@ parse_start_line( it, end, request_line_rule); if(! rv) { - ec = rv.error(); - if( ec == system::error_code(grammar::error::need_more) && - new_size == lim.max_start_line) + if( rv.error() != grammar::error::need_more ) + ec = rv.error(); + else if( new_size == lim.max_start_line ) ec = error::start_line_limit; + else + ec = error::need_data; return; } // method @@ -1164,10 +1166,12 @@ parse_start_line( it, end, status_line_rule); if(! rv) { - ec = rv.error(); - if( ec == system::error_code(grammar::error::need_more) && - new_size == lim.max_start_line) + if( rv.error() != grammar::error::need_more ) + ec = rv.error(); + else if( new_size == lim.max_start_line ) ec = error::start_line_limit; + else + ec = error::need_data; return; } // version @@ -1216,19 +1220,20 @@ parse_field( it, end, field_rule); if(rv.has_error()) { - ec = rv.error(); - if(ec == system::error_code(grammar::error::end_of_range)) + if(rv.error() == grammar::error::end_of_range) { // final CRLF h.size = static_cast< header::offset_type>(it - h.cbuf); + ec = error::end_of_message; return; } - if( ec == system::error_code(grammar::error::need_more) && - new_size == lim.max_field) - { + if( rv.error() != grammar::error::need_more ) + ec = rv.error(); + else if( new_size == lim.max_field ) ec = error::field_size_limit; - } + else + ec = error::need_data; return; } if(h.count >= lim.max_fields) @@ -1285,7 +1290,7 @@ parse( *this, lim, new_size, ec); if(ec) { - if( ec == system::error_code(grammar::error::need_more) && + if( ec == error::need_data && new_size == lim.max_fields) { ec = error::headers_limit; @@ -1299,7 +1304,7 @@ parse( *this, lim, new_size, ec); if(ec) { - if( ec == system::error_code(grammar::error::need_more) && + if( ec == error::need_data && new_size == lim.max_size) { ec = error::headers_limit; @@ -1308,7 +1313,7 @@ parse( break; } } - if(ec == system::error_code(grammar::error::end_of_range)) + if(ec == error::end_of_message) ec = {}; } diff --git a/src/error.cpp b/src/error.cpp index 2f7aca46..e2ba5719 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -102,14 +102,8 @@ equivalent( { case condition::invalid_payload: return (ec == error::bad_payload); - case condition::need_more_input: - if( ec == system::error_code( - urls::grammar::error::need_more) || - ec == error::need_data ) - return true; - break; - + return ec == error::need_data; default: break; } diff --git a/src/fields_base.cpp b/src/fields_base.cpp index af1bb90f..dc4b16be 100644 --- a/src/fields_base.cpp +++ b/src/fields_base.cpp @@ -72,7 +72,7 @@ verify_field_value( grammar::parse(it, end, detail::field_value_rule); if( rv.has_error() ) { - if( rv.error() == condition::need_more_input ) + if( rv.error() == grammar::error::need_more ) return error::bad_field_value; return rv.error(); } diff --git a/test/unit/error.cpp b/test/unit/error.cpp index 5370028a..6fb55466 100644 --- a/test/unit/error.cpp +++ b/test/unit/error.cpp @@ -9,7 +9,6 @@ // Test that header file is self-contained. #include -#include #include @@ -111,8 +110,7 @@ class error_test check(n, condition::need_more_input, - system::error_code( - urls::grammar::error::need_more)); + error::need_data); check(n, condition::invalid_payload, error::bad_payload);