Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Functions | Variables
SkTiffUtility.cpp File Reference
#include "src/codec/SkTiffUtility.h"
#include "include/core/SkData.h"
#include "src/codec/SkCodecPriv.h"
#include <cstddef>
#include <utility>

Go to the source code of this file.

Functions

static const uint8_t * get_entry_address (const SkData *data, uint32_t ifdOffset, uint16_t entryIndex)
 
static bool validate_ifd (const SkData *data, bool littleEndian, uint32_t ifdOffset, uint16_t *outNumEntries, uint32_t *outNextIfdOffset)
 

Variables

constexpr size_t kSizeEntry = 12
 
constexpr size_t kSizeShort = 2
 
constexpr size_t kSizeLong = 4
 

Function Documentation

◆ get_entry_address()

static const uint8_t * get_entry_address ( const SkData data,
uint32_t  ifdOffset,
uint16_t  entryIndex 
)
static

Definition at line 53 of file SkTiffUtility.cpp.

55 {
56 return data->bytes() + // Base address
57 ifdOffset + // IFD offset
58 kSizeShort + // IFD number of entries
59 kSizeEntry * entryIndex; // Entries
60}
constexpr size_t kSizeShort
constexpr size_t kSizeEntry
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switches.h:41

◆ validate_ifd()

static bool validate_ifd ( const SkData data,
bool  littleEndian,
uint32_t  ifdOffset,
uint16_t *  outNumEntries,
uint32_t *  outNextIfdOffset 
)
static

Definition at line 64 of file SkTiffUtility.cpp.

68 {
69 const uint8_t* dataCurrent = data->bytes();
70 size_t dataSize = data->size();
71
72 // Seek to the IFD offset.
73 if (dataSize < ifdOffset) {
74 SkCodecPrintf("IFD offset is too large.\n");
75 return false;
76 }
77 dataCurrent += ifdOffset;
78 dataSize -= ifdOffset;
79
80 // Read the number of entries.
81 if (dataSize < kSizeShort) {
82 SkCodecPrintf("Insufficient space to store number of entries.\n");
83 return false;
84 }
85 uint16_t numEntries = get_endian_short(dataCurrent, littleEndian);
86 dataCurrent += kSizeShort;
87 dataSize -= kSizeShort;
88
89 // Check that there is enough space for all entries.
90 if (dataSize < kSizeEntry * numEntries) {
91 SkCodecPrintf("Insufficient space (%u) to store all %u entries.\n",
92 static_cast<uint32_t>(data->size()),
93 numEntries);
94 return false;
95 }
96
97 // Save the number of entries.
98 *outNumEntries = numEntries;
99
100 // Seek past the entries.
101 dataCurrent += kSizeEntry * numEntries;
102 dataSize -= kSizeEntry * numEntries;
103
104 // Read the next IFD offset.
105 if (dataSize < kSizeLong) {
106 SkCodecPrintf("Insufficient space to store next IFD offset.\n");
107 return false;
108 }
109
110 // Save the next IFD offset.
111 *outNextIfdOffset = get_endian_int(dataCurrent, littleEndian);
112 return true;
113}
static uint32_t get_endian_int(const uint8_t *data, bool littleEndian)
static uint16_t get_endian_short(const uint8_t *data, bool littleEndian)
#define SkCodecPrintf(...)
Definition SkCodecPriv.h:23
constexpr size_t kSizeLong

Variable Documentation

◆ kSizeEntry

constexpr size_t kSizeEntry = 12
constexpr

Definition at line 16 of file SkTiffUtility.cpp.

◆ kSizeLong

constexpr size_t kSizeLong = 4
constexpr

Definition at line 18 of file SkTiffUtility.cpp.

◆ kSizeShort

constexpr size_t kSizeShort = 2
constexpr

Definition at line 17 of file SkTiffUtility.cpp.