Coverage Report

Created: 2025-08-29 06:13

/src/exiv2/src/orfimage_int.cpp
Line
Count
Source (jump to first uncovered line)
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
3
#include "orfimage_int.hpp"
4
5
namespace Exiv2::Internal {
6
18.2k
OrfHeader::OrfHeader(ByteOrder byteOrder) : TiffHeaderBase(0x4f52, 8, byteOrder, 0x00000008) {
7
18.2k
}
8
9
18.2k
bool OrfHeader::read(const byte* pData, size_t size) {
10
18.2k
  if (size < 8)
11
0
    return false;
12
13
18.2k
  if (pData[0] == 'I' && pData[0] == pData[1]) {
14
189
    setByteOrder(littleEndian);
15
18.0k
  } else if (pData[0] == 'M' && pData[0] == pData[1]) {
16
369
    setByteOrder(bigEndian);
17
17.6k
  } else {
18
17.6k
    return false;
19
17.6k
  }
20
21
558
  uint16_t sig = getUShort(pData + 2, byteOrder());
22
558
  if (tag() != sig && 0x5352 != sig)
23
49
    return false;  // #658: Added 0x5352 "SR" for SP-560UZ
24
509
  sig_ = sig;
25
509
  setOffset(getULong(pData + 4, byteOrder()));
26
509
  return true;
27
558
}
28
29
42
DataBuf OrfHeader::write() const {
30
42
  DataBuf buf(8);
31
42
  switch (byteOrder()) {
32
18
    case littleEndian:
33
18
      buf.write_uint8(0, 'I');
34
18
      break;
35
24
    case bigEndian:
36
24
      buf.write_uint8(0, 'M');
37
24
      break;
38
0
    default:
39
0
      break;
40
42
  }
41
42
  buf.write_uint8(1, buf.read_uint8(0));
42
43
42
  buf.write_uint16(2, sig_, byteOrder());
44
42
  buf.write_uint32(4, 0x00000008, byteOrder());
45
42
  return buf;
46
42
}
47
48
}  // namespace Exiv2::Internal