Skip to content

Commit 82700b6

Browse files
authored
Add validation functions accepting string length (#135)
Add rmw_validate_full_topic_name_with_size() Add rmw_validate_namespace_with_size() Add rmw_validate_node_name_with_size()
1 parent 558d5ad commit 82700b6

File tree

6 files changed

+90
-3
lines changed

6 files changed

+90
-3
lines changed

rmw/include/rmw/validate_full_topic_name.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,22 @@ rmw_validate_full_topic_name(
8989
int * validation_result,
9090
size_t * invalid_index);
9191

92+
/// Deterimine if a given topic name is valid.
93+
/**
94+
* This is an overload with an extra parameter for the length of topic_name.
95+
* \param[in] topic_name_length The number of characters in topic_name.
96+
*
97+
* \sa rmw_validate_full_topic_name(const char *, int *, size_t *)
98+
*/
99+
RMW_PUBLIC
100+
RMW_WARN_UNUSED
101+
rmw_ret_t
102+
rmw_validate_full_topic_name_with_size(
103+
const char * topic_name,
104+
size_t topic_name_length,
105+
int * validation_result,
106+
size_t * invalid_index);
107+
92108
/// Return a validation result description, or NULL if unknown or RMW_TOPIC_VALID.
93109
RMW_PUBLIC
94110
RMW_WARN_UNUSED

rmw/include/rmw/validate_namespace.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,22 @@ rmw_validate_namespace(
9595
int * validation_result,
9696
size_t * invalid_index);
9797

98+
/// Deterimine if a given namespace is valid.
99+
/**
100+
* This is an overload with an extra parameter for the length of namespace_.
101+
* \param[in] namespace_length The number of characters in namespace_.
102+
*
103+
* \sa rmw_validate_namespace(const char *, int *, size_t *)
104+
*/
105+
RMW_PUBLIC
106+
RMW_WARN_UNUSED
107+
rmw_ret_t
108+
rmw_validate_namespace_with_size(
109+
const char * namespace_,
110+
size_t namespace_length,
111+
int * validation_result,
112+
size_t * invalid_index);
113+
98114
/// Return a validation result description, or NULL if unknown or RMW_NAMESPACE_VALID.
99115
RMW_PUBLIC
100116
RMW_WARN_UNUSED

rmw/include/rmw/validate_node_name.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,22 @@ rmw_validate_node_name(
8383
int * validation_result,
8484
size_t * invalid_index);
8585

86+
/// Deterimine if a given node name is valid.
87+
/**
88+
* This is an overload with an extra parameter for the length of node_name.
89+
* \param[in] node_name_length The number of characters in node_name.
90+
*
91+
* \sa rmw_validate_node_name(const char *, int *, size_t *)
92+
*/
93+
RMW_PUBLIC
94+
RMW_WARN_UNUSED
95+
rmw_ret_t
96+
rmw_validate_node_name_with_size(
97+
const char * node_name,
98+
size_t node_name_length,
99+
int * validation_result,
100+
size_t * invalid_index);
101+
86102
/// Return a validation result description, or NULL if unknown or RMW_NODE_NAME_VALID.
87103
RMW_PUBLIC
88104
RMW_WARN_UNUSED

rmw/src/validate_full_topic_name.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,27 @@ rmw_validate_full_topic_name(
2424
const char * topic_name,
2525
int * validation_result,
2626
size_t * invalid_index)
27+
{
28+
if (!topic_name) {
29+
return RMW_RET_INVALID_ARGUMENT;
30+
}
31+
return rmw_validate_full_topic_name_with_size(
32+
topic_name, strlen(topic_name), validation_result, invalid_index);
33+
}
34+
35+
rmw_ret_t
36+
rmw_validate_full_topic_name_with_size(
37+
const char * topic_name,
38+
size_t topic_name_length,
39+
int * validation_result,
40+
size_t * invalid_index)
2741
{
2842
if (!topic_name) {
2943
return RMW_RET_INVALID_ARGUMENT;
3044
}
3145
if (!validation_result) {
3246
return RMW_RET_INVALID_ARGUMENT;
3347
}
34-
size_t topic_name_length = strlen(topic_name);
3548
if (topic_name_length == 0) {
3649
*validation_result = RMW_TOPIC_INVALID_IS_EMPTY_STRING;
3750
if (invalid_index) {

rmw/src/validate_namespace.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,20 @@ rmw_validate_namespace(
2828
const char * namespace_,
2929
int * validation_result,
3030
size_t * invalid_index)
31+
{
32+
if (!namespace_) {
33+
return RMW_RET_INVALID_ARGUMENT;
34+
}
35+
return rmw_validate_namespace_with_size(
36+
namespace_, strlen(namespace_), validation_result, invalid_index);
37+
}
38+
39+
rmw_ret_t
40+
rmw_validate_namespace_with_size(
41+
const char * namespace_,
42+
size_t namespace_length,
43+
int * validation_result,
44+
size_t * invalid_index)
3145
{
3246
if (!namespace_) {
3347
return RMW_RET_INVALID_ARGUMENT;
@@ -36,7 +50,6 @@ rmw_validate_namespace(
3650
return RMW_RET_INVALID_ARGUMENT;
3751
}
3852

39-
size_t namespace_length = strlen(namespace_);
4053
// Special case for root namepsace
4154
if (namespace_length == 1 && namespace_[0] == '/') {
4255
// Ok to return here, it is valid and will not exceed RMW_NAMESPACE_MAX_LENGTH.

rmw/src/validate_node_name.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,27 @@ rmw_validate_node_name(
2424
const char * node_name,
2525
int * validation_result,
2626
size_t * invalid_index)
27+
{
28+
if (!node_name) {
29+
return RMW_RET_INVALID_ARGUMENT;
30+
}
31+
return rmw_validate_node_name_with_size(
32+
node_name, strlen(node_name), validation_result, invalid_index);
33+
}
34+
35+
rmw_ret_t
36+
rmw_validate_node_name_with_size(
37+
const char * node_name,
38+
size_t node_name_length,
39+
int * validation_result,
40+
size_t * invalid_index)
2741
{
2842
if (!node_name) {
2943
return RMW_RET_INVALID_ARGUMENT;
3044
}
3145
if (!validation_result) {
3246
return RMW_RET_INVALID_ARGUMENT;
3347
}
34-
size_t node_name_length = strlen(node_name);
3548
if (node_name_length == 0) {
3649
*validation_result = RMW_NODE_NAME_INVALID_IS_EMPTY_STRING;
3750
if (invalid_index) {

0 commit comments

Comments
 (0)