Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/locale/collate.c
Show First 20 Lines • Show All 144 Lines • ▼ Show 20 Lines | if (sbuf.st_size < (COLLATE_STR_LEN + sizeof (info))) { | ||||
return (_LDP_ERROR); | return (_LDP_ERROR); | ||||
} | } | ||||
map = mmap(NULL, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); | map = mmap(NULL, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); | ||||
(void) _close(fd); | (void) _close(fd); | ||||
if ((TMP = map) == NULL) { | if ((TMP = map) == NULL) { | ||||
return (_LDP_ERROR); | return (_LDP_ERROR); | ||||
} | } | ||||
if (strncmp(TMP, COLLATE_VERSION, COLLATE_STR_LEN) != 0) { | if (strncmp(TMP, COLLATE_VERSION, COLLATE_FORMAT_VERSION_LEN) != 0) { | ||||
(void) munmap(map, sbuf.st_size); | (void) munmap(map, sbuf.st_size); | ||||
errno = EINVAL; | errno = EINVAL; | ||||
return (_LDP_ERROR); | return (_LDP_ERROR); | ||||
} | } | ||||
TMP += COLLATE_STR_LEN; | TMP += COLLATE_FORMAT_VERSION_LEN; | ||||
strlcpy(table->header.version, TMP, sizeof(table->header.version)); | |||||
yuripv: You likely want strlcpy() here to make sure it's NUL-terminated. | |||||
TMP += XLOCALE_VERSION_LEN; | |||||
info = (void *)TMP; | info = (void *)TMP; | ||||
TMP += sizeof (*info); | TMP += sizeof (*info); | ||||
if ((info->directive_count < 1) || | if ((info->directive_count < 1) || | ||||
(info->directive_count >= COLL_WEIGHTS_MAX) || | (info->directive_count >= COLL_WEIGHTS_MAX) || | ||||
((chains = BSWAP(info->chain_count)) < 0)) { | ((chains = BSWAP(info->chain_count)) < 0)) { | ||||
(void) munmap(map, sbuf.st_size); | (void) munmap(map, sbuf.st_size); | ||||
▲ Show 20 Lines • Show All 544 Lines • Show Last 20 Lines |
You likely want strlcpy() here to make sure it's NUL-terminated.