LLVMFuzzerTestOneInput:
   35|    139|{
   36|    139|    FuzzHelper f(data, size);
   37|    139|    f.run();
   38|    139|    return 0;
   39|    139|}
_ZN10FuzzHelperC2EPKhm:
   10|    139|        data(data),
   11|    139|        size(size)
   12|    139|    {
   13|    139|    }
_ZN10FuzzHelper3runEv:
   17|    139|    {
   18|    139|        Pl_Discard discard;
   19|    139|        Pl_ASCIIHexDecoder p("decode", &discard);
   20|    139|        try {
   21|    139|            p.write(data, size);
   22|    139|            p.finish();
   23|    139|        } catch (std::runtime_error const& e) {
   24|     41|            std::cerr << "runtime_error: " << e.what() << '\n';
   25|     41|        }
   26|    139|    }

_ZN8PipelineD2Ev:
   52|    278|    virtual ~Pipeline() = default;
_ZNK8Pipeline4nextEv:
  103|  4.76k|    {
  104|  4.76k|        return next_;
  105|  4.76k|    }

_ZN3QTC2TCEPKcS1_i:
   36|  13.4k|    {
   37|       |#ifndef QPDF_DISABLE_QTC
   38|       |        TC_real(scope, ccase, n);
   39|       |#endif // QPDF_DISABLE_QTC
   40|  13.4k|    }

_ZN8PipelineC2EPKcPS_:
   11|    278|    identifier(identifier),
   12|    278|    next_(next)
   13|    278|{
   14|    278|}

_ZN18Pl_ASCIIHexDecoderC2EPKcP8Pipeline:
   13|    139|    Pipeline(identifier, next)
   14|    139|{
   15|    139|    util::assertion(next, "Attempt to create Pl_ASCIIHexDecoder with nullptr as next");
   16|    139|}
_ZN18Pl_ASCIIHexDecoder5writeEPKhm:
   20|    139|{
   21|    139|    if (eod) {
  ------------------
  |  Branch (21:9): [True: 0, False: 139]
  ------------------
   22|      0|        return;
   23|      0|    }
   24|  18.1k|    for (size_t i = 0; i < len; ++i) {
  ------------------
  |  Branch (24:24): [True: 18.0k, False: 90]
  ------------------
   25|  18.0k|        char ch = static_cast<char>(toupper(buf[i]));
   26|  18.0k|        switch (ch) {
   27|  1.44k|        case ' ':
  ------------------
  |  Branch (27:9): [True: 1.44k, False: 16.5k]
  ------------------
   28|  1.95k|        case '\f':
  ------------------
  |  Branch (28:9): [True: 509, False: 17.5k]
  ------------------
   29|  2.77k|        case '\v':
  ------------------
  |  Branch (29:9): [True: 822, False: 17.2k]
  ------------------
   30|  8.05k|        case '\t':
  ------------------
  |  Branch (30:9): [True: 5.27k, False: 12.7k]
  ------------------
   31|  8.30k|        case '\r':
  ------------------
  |  Branch (31:9): [True: 259, False: 17.7k]
  ------------------
   32|  8.68k|        case '\n':
  ------------------
  |  Branch (32:9): [True: 373, False: 17.6k]
  ------------------
   33|  8.68k|            QTC::TC("libtests", "Pl_ASCIIHexDecoder ignore space");
   34|       |            // ignore whitespace
   35|  8.68k|            break;
   36|       |
   37|      8|        case '>':
  ------------------
  |  Branch (37:9): [True: 8, False: 18.0k]
  ------------------
   38|      8|            eod = true;
   39|      8|            flush();
   40|      8|            break;
   41|       |
   42|  9.34k|        default:
  ------------------
  |  Branch (42:9): [True: 9.34k, False: 8.69k]
  ------------------
   43|  9.34k|            if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F')) {
  ------------------
  |  Branch (43:18): [True: 9.31k, False: 25]
  |  Branch (43:31): [True: 1.17k, False: 8.13k]
  |  Branch (43:46): [True: 8.13k, False: 31]
  |  Branch (43:59): [True: 8.12k, False: 10]
  ------------------
   44|  9.30k|                inbuf[pos++] = ch;
   45|  9.30k|                if (pos == 2) {
  ------------------
  |  Branch (45:21): [True: 4.63k, False: 4.66k]
  ------------------
   46|  4.63k|                    flush();
   47|  4.63k|                }
   48|  9.30k|            } else {
   49|     41|                char t[2];
   50|     41|                t[0] = ch;
   51|     41|                t[1] = 0;
   52|     41|                throw std::runtime_error("character out of range during base Hex decode: "s + t);
   53|     41|            }
   54|  9.30k|            break;
   55|  18.0k|        }
   56|  17.9k|        if (eod) {
  ------------------
  |  Branch (56:13): [True: 8, False: 17.9k]
  ------------------
   57|      8|            break;
   58|      8|        }
   59|  17.9k|    }
   60|    139|}
_ZN18Pl_ASCIIHexDecoder5flushEv:
   64|  4.74k|{
   65|  4.74k|    if (pos == 0) {
  ------------------
  |  Branch (65:9): [True: 80, False: 4.66k]
  ------------------
   66|     80|        QTC::TC("libtests", "Pl_ASCIIHexDecoder no-op flush");
   67|     80|        return;
   68|     80|    }
   69|  4.66k|    int b[2];
   70|  13.9k|    for (int i = 0; i < 2; ++i) {
  ------------------
  |  Branch (70:21): [True: 9.32k, False: 4.66k]
  ------------------
   71|  9.32k|        if (inbuf[i] >= 'A') {
  ------------------
  |  Branch (71:13): [True: 8.12k, False: 1.20k]
  ------------------
   72|  8.12k|            b[i] = inbuf[i] - 'A' + 10;
   73|  8.12k|        } else {
   74|  1.20k|            b[i] = inbuf[i] - '0';
   75|  1.20k|        }
   76|  9.32k|    }
   77|  4.66k|    auto ch = static_cast<unsigned char>((b[0] << 4) + b[1]);
   78|       |
   79|  4.66k|    QTC::TC("libtests", "Pl_ASCIIHexDecoder partial flush", (pos == 2) ? 0 : 1);
  ------------------
  |  Branch (79:61): [True: 4.63k, False: 26]
  ------------------
   80|       |    // Reset before calling getNext()->write in case that throws an exception.
   81|  4.66k|    pos = 0;
   82|  4.66k|    inbuf[0] = '0';
   83|  4.66k|    inbuf[1] = '0';
   84|  4.66k|    inbuf[2] = '\0';
   85|       |
   86|  4.66k|    next()->write(&ch, 1);
   87|  4.66k|}
_ZN18Pl_ASCIIHexDecoder6finishEv:
   91|     98|{
   92|     98|    flush();
   93|     98|    next()->finish();
   94|     98|}

_ZN10Pl_DiscardC2Ev:
    9|    139|    Pipeline("discard", nullptr)
   10|    139|{
   11|    139|}
_ZN10Pl_DiscardD2Ev:
   14|    139|Pl_Discard::~Pl_Discard() = default;
_ZN10Pl_Discard5writeEPKhm:
   18|  4.66k|{
   19|  4.66k|}
_ZN10Pl_Discard6finishEv:
   23|     98|{
   24|     98|}

_ZN4qpdf4util9assertionIRA58_KcEEvbOT_:
   27|    139|    {
   28|    139|        if (!cond) {
  ------------------
  |  Branch (28:13): [True: 0, False: 139]
  ------------------
   29|      0|            throw std::logic_error(std::forward<T>(msg));
   30|      0|        }
   31|    139|    }

