mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-29 08:40:03 +00:00
Merge "feat(lib): implement strnlen secure and strcpy secure function" into integration
This commit is contained in:
commit
38b5f93a2b
4 changed files with 66 additions and 0 deletions
|
@ -30,5 +30,7 @@ char *strrchr(const char *p, int ch);
|
||||||
size_t strlcpy(char * dst, const char * src, size_t dsize);
|
size_t strlcpy(char * dst, const char * src, size_t dsize);
|
||||||
size_t strlcat(char * dst, const char * src, size_t dsize);
|
size_t strlcat(char * dst, const char * src, size_t dsize);
|
||||||
char *strtok_r(char *s, const char *delim, char **last);
|
char *strtok_r(char *s, const char *delim, char **last);
|
||||||
|
size_t strnlen_secure(const char *str, size_t maxlen);
|
||||||
|
int strcpy_secure(char *restrict dest, size_t dest_size, const char *restrict src);
|
||||||
|
|
||||||
#endif /* STRING_H */
|
#endif /* STRING_H */
|
||||||
|
|
|
@ -21,9 +21,11 @@ LIBC_SRCS := $(addprefix lib/libc/, \
|
||||||
snprintf.c \
|
snprintf.c \
|
||||||
strchr.c \
|
strchr.c \
|
||||||
strcmp.c \
|
strcmp.c \
|
||||||
|
strcpy_secure.c \
|
||||||
strlcat.c \
|
strlcat.c \
|
||||||
strlcpy.c \
|
strlcpy.c \
|
||||||
strlen.c \
|
strlen.c \
|
||||||
|
strnlen_secure.c \
|
||||||
strncmp.c \
|
strncmp.c \
|
||||||
strnlen.c \
|
strnlen.c \
|
||||||
strrchr.c \
|
strrchr.c \
|
||||||
|
|
40
lib/libc/strcpy_secure.c
Normal file
40
lib/libc/strcpy_secure.c
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024-2025, Altera Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
int strcpy_secure(char *restrict dest, size_t dest_size, const char *restrict src)
|
||||||
|
{
|
||||||
|
/* Check for null pointers */
|
||||||
|
if ((dest == NULL) || (src == NULL)) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check the destination size valid range */
|
||||||
|
if (dest_size == 0) {
|
||||||
|
return -ERANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the length of the source string */
|
||||||
|
size_t src_len = strnlen_secure(src, dest_size);
|
||||||
|
|
||||||
|
/* Check if the source string fits in the destination buffer */
|
||||||
|
if (src_len >= dest_size) {
|
||||||
|
/* Set destination to an empty string */
|
||||||
|
dest[0] = '\0';
|
||||||
|
return -ERANGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the source string to the destination */
|
||||||
|
for (dest[src_len] = '\0'; src_len > 0; src_len--) {
|
||||||
|
dest[src_len - 1] = src[src_len - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
22
lib/libc/strnlen_secure.c
Normal file
22
lib/libc/strnlen_secure.c
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024-2025, Altera Corporation. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
size_t strnlen_secure(const char *str, size_t maxlen)
|
||||||
|
{
|
||||||
|
size_t len = 0;
|
||||||
|
|
||||||
|
if (str == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((len < maxlen) && (str[len] != '\0')) {
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue