Skip to content

Commit ebb35fb

Browse files
author
Noy
committed
Add additional null check for timer argument
1 parent d5baf85 commit ebb35fb

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

rcl/src/rcl/timer.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ rcl_ret_t
233233
rcl_timer_clock(rcl_timer_t * timer, rcl_clock_t ** clock)
234234
{
235235
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
236+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
236237
RCL_CHECK_ARGUMENT_FOR_NULL(clock, RCL_RET_INVALID_ARGUMENT);
237238
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
238239
*clock = timer->impl->clock;
@@ -244,6 +245,7 @@ rcl_timer_call(rcl_timer_t * timer)
244245
{
245246
RCUTILS_LOG_DEBUG_NAMED(ROS_PACKAGE_NAME, "Calling timer");
246247
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
248+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
247249
if (rcutils_atomic_load_bool(&timer->impl->canceled)) {
248250
RCL_SET_ERROR_MSG("timer is canceled");
249251
return RCL_RET_TIMER_CANCELED;
@@ -294,6 +296,7 @@ rcl_ret_t
294296
rcl_timer_is_ready(const rcl_timer_t * timer, bool * is_ready)
295297
{
296298
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
299+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
297300
RCL_CHECK_ARGUMENT_FOR_NULL(is_ready, RCL_RET_INVALID_ARGUMENT);
298301
int64_t time_until_next_call;
299302
rcl_ret_t ret = rcl_timer_get_time_until_next_call(timer, &time_until_next_call);
@@ -311,6 +314,7 @@ rcl_ret_t
311314
rcl_timer_get_time_until_next_call(const rcl_timer_t * timer, int64_t * time_until_next_call)
312315
{
313316
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
317+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
314318
RCL_CHECK_ARGUMENT_FOR_NULL(time_until_next_call, RCL_RET_INVALID_ARGUMENT);
315319
if (rcutils_atomic_load_bool(&timer->impl->canceled)) {
316320
return RCL_RET_TIMER_CANCELED;
@@ -331,6 +335,7 @@ rcl_timer_get_time_since_last_call(
331335
rcl_time_point_value_t * time_since_last_call)
332336
{
333337
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
338+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
334339
RCL_CHECK_ARGUMENT_FOR_NULL(time_since_last_call, RCL_RET_INVALID_ARGUMENT);
335340
rcl_time_point_value_t now;
336341
rcl_ret_t ret = rcl_clock_get_now(timer->impl->clock, &now);
@@ -346,6 +351,7 @@ rcl_ret_t
346351
rcl_timer_get_period(const rcl_timer_t * timer, int64_t * period)
347352
{
348353
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
354+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
349355
RCL_CHECK_ARGUMENT_FOR_NULL(period, RCL_RET_INVALID_ARGUMENT);
350356
*period = rcutils_atomic_load_uint64_t(&timer->impl->period);
351357
return RCL_RET_OK;
@@ -354,9 +360,14 @@ rcl_timer_get_period(const rcl_timer_t * timer, int64_t * period)
354360
rcl_ret_t
355361
rcl_timer_exchange_period(const rcl_timer_t * timer, int64_t new_period, int64_t * old_period)
356362
{
363+
if (new_period < 0) {
364+
return RCL_RET_INVALID_ARGUMENT;
365+
}
366+
357367
RCUTILS_CAN_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
358368

359369
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
370+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
360371
RCL_CHECK_ARGUMENT_FOR_NULL(old_period, RCL_RET_INVALID_ARGUMENT);
361372
*old_period = rcutils_atomic_exchange_uint64_t(&timer->impl->period, new_period);
362373
RCUTILS_LOG_DEBUG_NAMED(
@@ -400,6 +411,7 @@ rcl_ret_t
400411
rcl_timer_is_canceled(const rcl_timer_t * timer, bool * is_canceled)
401412
{
402413
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
414+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_INVALID_ARGUMENT);
403415
RCL_CHECK_ARGUMENT_FOR_NULL(is_canceled, RCL_RET_INVALID_ARGUMENT);
404416
*is_canceled = rcutils_atomic_load_bool(&timer->impl->canceled);
405417
return RCL_RET_OK;

0 commit comments

Comments
 (0)