Coverage Report

Created: 2026-10-28 07:03

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qpdf/libqpdf/QPDFObject.cc
Line
Count
Source
1
#include <qpdf/QPDFObject_private.hh>
2
3
std::string
4
QPDFObject::getDescription()
5
68.8k
{
6
68.8k
    qpdf_offset_t shift = (getTypeCode() == ::ot_dictionary) ? 2
7
68.8k
        : (getTypeCode() == ::ot_array)                      ? 1
8
29.2k
                                                             : 0;
9
10
68.8k
    if (object_description) {
11
56.8k
        switch (object_description->index()) {
12
54.3k
        case 0:
13
54.3k
            {
14
                // Simple template string
15
54.3k
                auto description = std::get<0>(*object_description);
16
17
54.3k
                if (auto pos = description.find("$OG"); pos != std::string::npos) {
18
0
                    description.replace(pos, 3, og.unparse(' '));
19
0
                }
20
54.3k
                if (auto pos = description.find("$PO"); pos != std::string::npos) {
21
53.8k
                    description.replace(pos, 3, std::to_string(parsed_offset + shift));
22
53.8k
                }
23
54.3k
                return description;
24
0
            }
25
0
        case 1:
26
0
            {
27
                // QPDF::JSONReactor generated description
28
0
                auto j_descr = std::get<1>(*object_description);
29
0
                return (
30
0
                    *j_descr.input + (j_descr.object.empty() ? "" : ", " + j_descr.object) +
31
0
                    " at offset " + std::to_string(parsed_offset));
32
0
            }
33
1.29k
        case 2:
34
1.29k
            {
35
                // Child object description
36
1.29k
                auto j_descr = std::get<2>(*object_description);
37
1.29k
                std::string result;
38
1.29k
                if (auto p = j_descr.parent.lock()) {
39
1.29k
                    result = p->getDescription();
40
1.29k
                }
41
1.29k
                result += j_descr.static_descr;
42
1.29k
                if (auto pos = result.find("$VD"); pos != std::string::npos) {
43
1.29k
                    result.replace(pos, 3, j_descr.var_descr);
44
1.29k
                }
45
1.29k
                return result;
46
0
            }
47
1.14k
        case 3:
48
1.14k
            auto [stream_id, obj_id] = std::get<3>(*object_description);
49
1.14k
            std::string result = qpdf ? qpdf->getFilename() : "";
50
1.14k
            result += " object stream " + std::to_string(stream_id) + ", object " +
51
1.14k
                std::to_string(obj_id) + " 0 at offset " + std::to_string(parsed_offset + shift);
52
1.14k
            return result;
53
56.8k
        }
54
55
56.8k
    } else if (og.isIndirect()) {
56
11.7k
        return "object " + og.unparse(' ');
57
11.7k
    }
58
262
    return {};
59
68.8k
}