Coverage Report

Created: 2026-06-07 06:33

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/poco/Net/fuzzing/HTTPParse.cpp
Line
Count
Source
1
#include "Poco/MemoryStream.h"
2
#include "Poco/Net/EscapeHTMLStream.h"
3
#include "Poco/Net/HTMLForm.h"
4
#include "Poco/Net/HTTPCredentials.h"
5
#include "Poco/Net/HTTPRequest.h"
6
#include "Poco/Net/HTTPResponse.h"
7
#include "Poco/Net/OAuth10Credentials.h"
8
#include "Poco/Net/OAuth20Credentials.h"
9
#include "Poco/Net/DNS.h"
10
#include "Poco/NullStream.h"
11
12
using namespace Poco;
13
using namespace Poco::Net;
14
15
template <class F>
16
void catchExceptions(const F& func)
17
47.6k
{
18
47.6k
  try
19
47.6k
  {
20
47.6k
    func();
21
47.6k
  }
22
47.6k
  catch (const std::exception&)
23
47.6k
  {
24
35.6k
  }
25
47.6k
}
HTTPParse.cpp:void catchExceptions<LLVMFuzzerTestOneInput::$_0>(LLVMFuzzerTestOneInput::$_0 const&)
Line
Count
Source
17
11.9k
{
18
11.9k
  try
19
11.9k
  {
20
11.9k
    func();
21
11.9k
  }
22
11.9k
  catch (const std::exception&)
23
11.9k
  {
24
3.11k
  }
25
11.9k
}
HTTPParse.cpp:void catchExceptions<LLVMFuzzerTestOneInput::$_1>(LLVMFuzzerTestOneInput::$_1 const&)
Line
Count
Source
17
11.9k
{
18
11.9k
  try
19
11.9k
  {
20
11.9k
    func();
21
11.9k
  }
22
11.9k
  catch (const std::exception&)
23
11.9k
  {
24
10.2k
  }
25
11.9k
}
HTTPParse.cpp:void catchExceptions<LLVMFuzzerTestOneInput::$_2>(LLVMFuzzerTestOneInput::$_2 const&)
Line
Count
Source
17
11.9k
{
18
11.9k
  try
19
11.9k
  {
20
11.9k
    func();
21
11.9k
  }
22
11.9k
  catch (const std::exception&)
23
11.9k
  {
24
10.4k
  }
25
11.9k
}
HTTPParse.cpp:void catchExceptions<LLVMFuzzerTestOneInput::$_3>(LLVMFuzzerTestOneInput::$_3 const&)
Line
Count
Source
17
11.9k
{
18
11.9k
  try
19
11.9k
  {
20
11.9k
    func();
21
11.9k
  }
22
11.9k
  catch (const std::exception&)
23
11.9k
  {
24
11.8k
  }
25
11.9k
}
26
27
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
28
11.9k
{
29
11.9k
  NullOutputStream null;
30
31
  // HTTPRequest parsing
32
11.9k
  catchExceptions(
33
11.9k
    [&]
34
11.9k
    {
35
11.9k
      MemoryInputStream stream(reinterpret_cast<const char*>(data), size);
36
11.9k
      HTTPRequest request;
37
11.9k
      request.read(stream);
38
11.9k
      request.write(null);
39
40
11.9k
      HTTPCredentials creds;
41
11.9k
      creds.fromURI(URI(request.getURI()));
42
11.9k
      creds.updateAuthInfo(request);
43
11.9k
      creds.updateProxyAuthInfo(request);
44
11.9k
    });
45
46
  // HTTPResponse parsing
47
11.9k
  catchExceptions(
48
11.9k
    [&]
49
11.9k
    {
50
11.9k
      MemoryInputStream stream(reinterpret_cast<const char*>(data), size);
51
11.9k
      HTTPResponse response;
52
11.9k
      response.read(stream);
53
11.9k
      response.write(null);
54
55
11.9k
      HTTPRequest request(HTTPRequest::HTTP_GET, "/");
56
11.9k
      request.setHost(DNS::encodeIDN(DNS::decodeIDN(response.get(HTTPRequest::HOST))));
57
58
11.9k
      HTTPCredentials creds;
59
11.9k
      creds.authenticate(request, response);
60
11.9k
      creds.proxyAuthenticate(request, response);
61
11.9k
    });
62
63
  // OAuth10Credentials
64
11.9k
  catchExceptions(
65
11.9k
    [&]
66
11.9k
    {
67
11.9k
      MemoryInputStream stream(reinterpret_cast<const char*>(data), size);
68
11.9k
      HTTPRequest request;
69
11.9k
      request.read(stream);
70
71
11.9k
      EscapeHTMLOutputStream htmlStream(null);
72
11.9k
      HTMLForm form(request, stream);
73
11.9k
      form.prepareSubmit(request);
74
11.9k
      form.write(htmlStream);
75
76
11.9k
      OAuth10Credentials oauth10(request);
77
11.9k
      oauth10.verify(request, URI(request.getURI()), form);
78
11.9k
      oauth10.authenticate(request, URI(request.getURI()), form,
79
11.9k
                 request.hasToken("X-Method", "Plain") ? OAuth10Credentials::SIGN_PLAINTEXT
80
11.9k
                                     : OAuth10Credentials::SIGN_HMAC_SHA1);
81
11.9k
    });
82
83
  // OAuth20Credentials
84
11.9k
  catchExceptions(
85
11.9k
    [&]
86
11.9k
    {
87
11.9k
      MemoryInputStream stream(reinterpret_cast<const char*>(data), size);
88
11.9k
      HTTPRequest request;
89
11.9k
      request.read(stream);
90
91
11.9k
      OAuth20Credentials oauth20(request);
92
11.9k
      oauth20.authenticate(request);
93
11.9k
    });
94
95
11.9k
  return 0;
96
11.9k
}