LCOV - code coverage report
Current view: top level - libs/url/src/grammar/dec_octet_rule.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 30 30
Test Date: 2024-09-08 09:46:47 Functions: 100.0 % 1 1

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
       3              : //
       4              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6              : //
       7              : // Official repository: https://github.com/boostorg/url
       8              : //
       9              : 
      10              : 
      11              : #include <boost/url/detail/config.hpp>
      12              : #include <boost/url/grammar/charset.hpp>
      13              : #include <boost/url/grammar/dec_octet_rule.hpp>
      14              : #include <boost/url/grammar/digit_chars.hpp>
      15              : #include <boost/url/grammar/error.hpp>
      16              : 
      17              : namespace boost {
      18              : namespace urls {
      19              : namespace grammar {
      20              : namespace implementation_defined {
      21              : auto
      22         2297 : dec_octet_rule_t::
      23              : parse(
      24              :     char const*& it,
      25              :     char const* const end
      26              :         ) const noexcept ->
      27              :     system::result<value_type>
      28              : {
      29         2297 :     if(it == end)
      30              :     {
      31              :         // end
      32           14 :         BOOST_URL_RETURN_EC(
      33              :             error::mismatch);
      34              :     }
      35         2283 :     if(! digit_chars(*it))
      36              :     {
      37              :         // expected DIGIT
      38         1653 :         BOOST_URL_RETURN_EC(
      39              :             error::mismatch);
      40              :     }
      41          630 :     unsigned v = *it - '0';
      42          630 :     ++it;
      43         1194 :     if( it == end ||
      44          564 :         ! digit_chars(*it))
      45              :     {
      46          424 :         return static_cast<
      47          424 :             value_type>(v);
      48              :     }
      49          206 :     if(v == 0)
      50              :     {
      51              :         // leading '0'
      52           11 :         BOOST_URL_RETURN_EC(
      53              :             error::invalid);
      54              :     }
      55          195 :     v = (10 * v) + *it - '0';
      56          195 :     ++it;
      57          386 :     if( it == end ||
      58          191 :         ! digit_chars(*it))
      59              :     {
      60           23 :         return static_cast<
      61           23 :             value_type>(v);
      62              :     }
      63          172 :     if(v > 25)
      64              :     {
      65              :         // integer overflow
      66           13 :         BOOST_URL_RETURN_EC(
      67              :             error::invalid);
      68              :     }
      69          159 :     v = (10 * v) + *it - '0';
      70          159 :     if(v > 255)
      71              :     {
      72              :         // integer overflow
      73           17 :         BOOST_URL_RETURN_EC(
      74              :             error::invalid);
      75              :     }
      76          142 :     ++it;
      77          272 :     if( it != end &&
      78          130 :         digit_chars(*it))
      79              :     {
      80              :         // integer overflow
      81            7 :         BOOST_URL_RETURN_EC(
      82              :             error::invalid);
      83              :     }
      84          135 :     return static_cast<
      85          135 :         value_type>(v);
      86              : }
      87              : } // implementation_defined
      88              : } // grammar
      89              : } // urls
      90              : } // boost
      91              : 
        

Generated by: LCOV version 2.1