Coverage Report

Created: 2026-10-17 07:07

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/PcapPlusPlus/Tests/Fuzzers/FuzzX509.cpp
Line
Count
Source
1
#include <cstdint>
2
#include <memory>
3
#include <vector>
4
5
#include <X509Decoder.h>
6
#include <X509ExtensionDataDecoder.h>
7
#include <Logger.h>
8
9
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
10
3.40k
{
11
3.40k
  if (size == 0)
12
0
    return 0;
13
14
3.40k
  pcpp::Logger::getInstance().suppressLogs();
15
16
  // fromDER needs a mutable buffer that outlives the parse
17
3.40k
  std::vector<uint8_t> buf(data, data + size);
18
19
3.40k
  try
20
3.40k
  {
21
3.40k
    auto cert = pcpp::X509Certificate::fromDER(buf.data(), buf.size());
22
3.40k
    if (!cert)
23
0
      return 0;
24
25
3.40k
    cert->getVersion();
26
3.40k
    cert->getSerialNumber();
27
3.40k
    cert->getIssuer();
28
3.40k
    cert->getSubject();
29
3.40k
    cert->getNotBefore();
30
3.40k
    cert->getNotAfter();
31
3.40k
    cert->getPublicKeyAlgorithm();
32
3.40k
    cert->getPublicKey();
33
3.40k
    cert->getSignatureAlgorithm();
34
3.40k
    cert->getSignature();
35
3.40k
    cert->toJson();
36
37
3.40k
    for (const auto& ext : cert->getExtensions())
38
2.71k
    {
39
2.71k
      ext.getType();
40
2.71k
      ext.isCritical();
41
42
2.71k
      auto extData = ext.getData();
43
2.71k
      if (!extData)
44
1.12k
        continue;
45
46
1.58k
      switch (ext.getType())
47
1.58k
      {
48
335
      case pcpp::X509ExtensionType::BasicConstraints:
49
335
      {
50
335
        auto* bc = extData->castAs<pcpp::X509BasicConstraintsExtension>();
51
335
        bc->isCA();
52
335
        bc->getPathLenConstraint();
53
335
        break;
54
0
      }
55
347
      case pcpp::X509ExtensionType::KeyUsage:
56
347
      {
57
347
        auto* ku = extData->castAs<pcpp::X509KeyUsageExtension>();
58
347
        ku->isDigitalSignature();
59
347
        ku->isNonRepudiation();
60
347
        ku->isKeyEncipherment();
61
347
        ku->isDataEncipherment();
62
347
        ku->isKeyAgreement();
63
347
        ku->isKeyCertSign();
64
347
        ku->isCRLSign();
65
347
        ku->isEncipherOnly();
66
347
        ku->isDecipherOnly();
67
347
        break;
68
0
      }
69
397
      case pcpp::X509ExtensionType::ExtendedKeyUsage:
70
397
        extData->castAs<pcpp::X509ExtendedKeyUsageExtension>()->getPurposes();
71
397
        break;
72
216
      case pcpp::X509ExtensionType::SubjectKeyIdentifier:
73
216
        extData->castAs<pcpp::X509SubjectKeyIdentifierExtension>()->getKeyIdentifier();
74
216
        break;
75
0
      default:
76
0
        break;
77
1.58k
      }
78
1.58k
    }
79
3.40k
  }
80
3.40k
  catch (...)
81
3.40k
  {}
82
83
3.40k
  return 0;
84
3.40k
}