Coverage Report

Created: 2026-09-14 07:15

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openexr/src/lib/OpenEXR/ImfIDManifestAttribute.cpp
Line
Count
Source
1
// SPDX-License-Identifier: BSD-3-Clause
2
// Copyright (c) Contributors to the OpenEXR Project.
3
4
#define COMPILING_IMF_IDMANIFEST_ATTRIBUTE
5
#include "ImfIDManifestAttribute.h"
6
7
#include <stdlib.h>
8
9
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER
10
11
#if defined(_MSC_VER)
12
// suppress warning about non-exported base classes
13
#    pragma warning(disable : 4251)
14
#    pragma warning(disable : 4275)
15
#endif
16
17
using namespace OPENEXR_IMF_INTERNAL_NAMESPACE;
18
19
template <>
20
IMF_EXPORT const char*
21
IDManifestAttribute::staticTypeName ()
22
42
{
23
42
    return "idmanifest";
24
42
}
25
26
template <>
27
IMF_EXPORT void
28
IDManifestAttribute::writeValueTo (
29
    OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, int version) const
30
0
{
31
0
    uint64_t uncompressedDataSize = _value._uncompressedDataSize;
32
0
    Xdr::write<StreamIO> (os, uncompressedDataSize);
33
0
    const char* output = (const char*) _value._data;
34
0
    Xdr::write<StreamIO> (os, output, _value._compressedDataSize);
35
0
}
36
37
template <>
38
IMF_EXPORT void
39
IDManifestAttribute::readValueFrom (
40
    OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int size, int version)
41
2.60k
{
42
43
2.60k
    if (size < static_cast<int> (sizeof (uint64_t)))
44
10
    {
45
10
        throw IEX_NAMESPACE::InputExc (
46
10
            "Invalid size field reading idmanifest attribute");
47
10
    }
48
2.59k
    _value._compressedDataSize = size - sizeof (uint64_t);
49
50
2.59k
    if (_value._data)
51
0
    {
52
        // if attribute is reallocated , free up previous memory
53
0
        free (static_cast<void*> (_value._data));
54
0
        _value._data = nullptr;
55
0
    }
56
57
2.59k
    uint64_t uncompressedDataSize;
58
    //
59
    // first eight bytes: data size once data is uncompressed
60
    //
61
2.59k
    Xdr::read<StreamIO> (is, uncompressedDataSize);
62
63
2.59k
    _value._uncompressedDataSize = uncompressedDataSize;
64
65
    //
66
    // allocate memory for compressed storage and read data
67
    //
68
2.59k
    _value._data =
69
2.59k
        static_cast<unsigned char*> (malloc (size - sizeof (uint64_t)));
70
2.59k
    char* input = (char*) _value._data;
71
2.59k
    Xdr::read<StreamIO> (is, input, _value._compressedDataSize);
72
2.59k
}
73
74
template class IMF_EXPORT_TEMPLATE_INSTANCE
75
    TypedAttribute<OPENEXR_IMF_INTERNAL_NAMESPACE::CompressedIDManifest>;
76
77
OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT