summaryrefslogtreecommitdiffstats
path: root/fpgm.c
blob: 65df1052ad85be7b8ee6c9920399cade66b94827 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* See LICENSE file for copyright and license details. */
#include "common.h"


int
libparsesfnt_parse_fpgm(
			const char *data, size_t size,
			uint8_t *programp,
			const struct libparsesfnt_tabdir_entry *tag,
			size_t first, size_t count)
{
	if (count > SIZE_MAX - first) {
		errno = EFBIG;
		return -1;
	}
	if (tag->offset < size || first + count > size - tag->offset) {
		errno = EBFONT;
		return -1;
	}
	memcpy(programp, &data[tag->offset + first], count - first);
	return 0;
}