Skip to content

Commit 83197ed

Browse files
author
Noy
committed
Add additional null check for timer argument
Signed-off-by: Noy <[email protected]>
1 parent d5baf85 commit 83197ed

2 files changed

Lines changed: 14 additions & 7 deletions

File tree

rcl/include/rcl/timer.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ rcl_timer_fini(rcl_timer_t * timer);
225225
* \param[inout] timer the handle to the timer to call
226226
* \return #RCL_RET_OK if the timer was called successfully, or
227227
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
228-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
228+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
229229
* \return #RCL_RET_TIMER_CANCELED if the timer has been canceled, or
230230
* \return #RCL_RET_ERROR an unspecified error occur.
231231
*/
@@ -252,7 +252,6 @@ rcl_timer_call(rcl_timer_t * timer);
252252
* \param[out] clock the rcl_clock_t * in which the clock is stored
253253
* \return #RCL_RET_OK if the period was retrieved successfully, or
254254
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
255-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
256255
* \return #RCL_RET_ERROR an unspecified error occur.
257256
*/
258257
RCL_PUBLIC
@@ -282,7 +281,7 @@ rcl_timer_clock(rcl_timer_t * timer, rcl_clock_t ** clock);
282281
* \param[out] is_ready the bool used to store the result of the calculation
283282
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
284283
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
285-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
284+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
286285
* \return #RCL_RET_ERROR an unspecified error occur.
287286
*/
288287
RCL_PUBLIC
@@ -317,7 +316,7 @@ rcl_timer_is_ready(const rcl_timer_t * timer, bool * is_ready);
317316
* \param[out] time_until_next_call the output variable for the result
318317
* \return #RCL_RET_OK if the timer until next call was successfully calculated, or
319318
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
320-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
319+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
321320
* \return #RCL_RET_TIMER_CANCELED if the timer is canceled, or
322321
* \return #RCL_RET_ERROR an unspecified error occur.
323322
*/
@@ -350,7 +349,7 @@ rcl_timer_get_time_until_next_call(const rcl_timer_t * timer, int64_t * time_unt
350349
* \param[out] time_since_last_call the struct in which the time is stored
351350
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
352351
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
353-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
352+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
354353
* \return #RCL_RET_ERROR an unspecified error occur.
355354
*/
356355
RCL_PUBLIC
@@ -377,6 +376,7 @@ rcl_timer_get_time_since_last_call(const rcl_timer_t * timer, int64_t * time_sin
377376
* \param[out] period the int64_t in which the period is stored
378377
* \return #RCL_RET_OK if the period was retrieved successfully, or
379378
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
379+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
380380
* \return #RCL_RET_ERROR an unspecified error occur.
381381
*/
382382
RCL_PUBLIC
@@ -407,6 +407,7 @@ rcl_timer_get_period(const rcl_timer_t * timer, int64_t * period);
407407
* \param[out] old_period the int64_t in which the previous period is stored
408408
* \return #RCL_RET_OK if the period was retrieved successfully, or
409409
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
410+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
410411
* \return #RCL_RET_ERROR an unspecified error occur.
411412
*/
412413
RCL_PUBLIC
@@ -484,7 +485,6 @@ rcl_timer_exchange_callback(rcl_timer_t * timer, const rcl_timer_callback_t new_
484485
* \param[inout] timer the timer to be canceled
485486
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
486487
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
487-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
488488
* \return #RCL_RET_ERROR an unspecified error occur.
489489
*/
490490
RCL_PUBLIC
@@ -513,6 +513,7 @@ rcl_timer_cancel(rcl_timer_t * timer);
513513
* \param[out] is_canceled storage for the is canceled bool
514514
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
515515
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
516+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
516517
* \return #RCL_RET_ERROR an unspecified error occur.
517518
*/
518519
RCL_PUBLIC
@@ -538,7 +539,6 @@ rcl_timer_is_canceled(const rcl_timer_t * timer, bool * is_canceled);
538539
* \param[inout] timer the timer to be reset
539540
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
540541
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
541-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
542542
* \return #RCL_RET_ERROR an unspecified error occur.
543543
*/
544544
RCL_PUBLIC

rcl/src/rcl/timer.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ rcl_timer_call(rcl_timer_t * timer)
244244
{
245245
RCUTILS_LOG_DEBUG_NAMED(ROS_PACKAGE_NAME, "Calling timer");
246246
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
247+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
247248
if (rcutils_atomic_load_bool(&timer->impl->canceled)) {
248249
RCL_SET_ERROR_MSG("timer is canceled");
249250
return RCL_RET_TIMER_CANCELED;
@@ -294,6 +295,7 @@ rcl_ret_t
294295
rcl_timer_is_ready(const rcl_timer_t * timer, bool * is_ready)
295296
{
296297
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
298+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
297299
RCL_CHECK_ARGUMENT_FOR_NULL(is_ready, RCL_RET_INVALID_ARGUMENT);
298300
int64_t time_until_next_call;
299301
rcl_ret_t ret = rcl_timer_get_time_until_next_call(timer, &time_until_next_call);
@@ -311,6 +313,7 @@ rcl_ret_t
311313
rcl_timer_get_time_until_next_call(const rcl_timer_t * timer, int64_t * time_until_next_call)
312314
{
313315
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
316+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
314317
RCL_CHECK_ARGUMENT_FOR_NULL(time_until_next_call, RCL_RET_INVALID_ARGUMENT);
315318
if (rcutils_atomic_load_bool(&timer->impl->canceled)) {
316319
return RCL_RET_TIMER_CANCELED;
@@ -331,6 +334,7 @@ rcl_timer_get_time_since_last_call(
331334
rcl_time_point_value_t * time_since_last_call)
332335
{
333336
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
337+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
334338
RCL_CHECK_ARGUMENT_FOR_NULL(time_since_last_call, RCL_RET_INVALID_ARGUMENT);
335339
rcl_time_point_value_t now;
336340
rcl_ret_t ret = rcl_clock_get_now(timer->impl->clock, &now);
@@ -346,6 +350,7 @@ rcl_ret_t
346350
rcl_timer_get_period(const rcl_timer_t * timer, int64_t * period)
347351
{
348352
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
353+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
349354
RCL_CHECK_ARGUMENT_FOR_NULL(period, RCL_RET_INVALID_ARGUMENT);
350355
*period = rcutils_atomic_load_uint64_t(&timer->impl->period);
351356
return RCL_RET_OK;
@@ -357,6 +362,7 @@ rcl_timer_exchange_period(const rcl_timer_t * timer, int64_t new_period, int64_t
357362
RCUTILS_CAN_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
358363

359364
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
365+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
360366
RCL_CHECK_ARGUMENT_FOR_NULL(old_period, RCL_RET_INVALID_ARGUMENT);
361367
*old_period = rcutils_atomic_exchange_uint64_t(&timer->impl->period, new_period);
362368
RCUTILS_LOG_DEBUG_NAMED(
@@ -400,6 +406,7 @@ rcl_ret_t
400406
rcl_timer_is_canceled(const rcl_timer_t * timer, bool * is_canceled)
401407
{
402408
RCL_CHECK_ARGUMENT_FOR_NULL(timer, RCL_RET_INVALID_ARGUMENT);
409+
RCL_CHECK_ARGUMENT_FOR_NULL(timer->impl, RCL_RET_TIMER_INVALID);
403410
RCL_CHECK_ARGUMENT_FOR_NULL(is_canceled, RCL_RET_INVALID_ARGUMENT);
404411
*is_canceled = rcutils_atomic_load_bool(&timer->impl->canceled);
405412
return RCL_RET_OK;

0 commit comments

Comments
 (0)