Skip to content

Commit 5678556

Browse files
committed
apps/btshell: fix build on 'native' bsp
strl* methods are not always available, let's use snprintf() for string copy/concat actions in parse_dev_addr, as it allows us to keep buffer overflow control and NULL termination of string.
1 parent 7e368a9 commit 5678556

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

apps/btshell/src/cmd.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,19 @@ parse_dev_addr(const char *prefix, const struct kv_pair *addr_types,
9898
{
9999
char name[32];
100100
int rc;
101+
int written = 0;
101102

102103
if (!prefix) {
103104
name[0] = '\0';
104105
} else {
105-
if (strlcpy(name, prefix, sizeof(name)) >= sizeof(name)) {
106+
written = snprintf(name, sizeof(name) - 1, "%s", prefix);
107+
if (written >= sizeof(name) || written < 0) {
106108
return EINVAL;
107109
}
108110
}
109111

110-
if (strlcat(name, "addr", sizeof(name)) >= sizeof(name)) {
112+
written = snprintf(name + written, sizeof(name) - written - 1, "%s", "addr");
113+
if (written >= sizeof(name) || written < 0) {
111114
return EINVAL;
112115
}
113116
rc = parse_arg_addr(name, addr);
@@ -116,7 +119,8 @@ parse_dev_addr(const char *prefix, const struct kv_pair *addr_types,
116119
return rc;
117120
} else if (rc == EAGAIN) {
118121
/* address found, but no type provided */
119-
if (strlcat(name, "_type", sizeof(name)) >= sizeof(name)) {
122+
written = snprintf(name + written, sizeof(name) - written - 1, "%s", "_type");
123+
if (written >= sizeof(name) || written < 0) {
120124
return EINVAL;
121125
}
122126
addr->type = parse_arg_kv(name, addr_types, &rc);
@@ -130,7 +134,8 @@ parse_dev_addr(const char *prefix, const struct kv_pair *addr_types,
130134
return rc;
131135
} else {
132136
/* full address found, but let's just make sure there is no type arg */
133-
if (strlcat(name, "_type", sizeof(name)) >= sizeof(name)) {
137+
written = snprintf(name + written, sizeof(name) - written, "%s", "_type");
138+
if (written >= sizeof(name) || written < 0) {
134139
return EINVAL;
135140
}
136141
if (parse_arg_extract(name)) {

0 commit comments

Comments
 (0)