Skip to content

Commit 6f1b6ad

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

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

rcl/include/rcl/timer.h

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,8 @@ 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_INVALID_ARGUMENT if the timer is invalid, or
229+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
229230
* \return #RCL_RET_TIMER_CANCELED if the timer has been canceled, or
230231
* \return #RCL_RET_ERROR an unspecified error occur.
231232
*/
@@ -252,7 +253,7 @@ rcl_timer_call(rcl_timer_t * timer);
252253
* \param[out] clock the rcl_clock_t * in which the clock is stored
253254
* \return #RCL_RET_OK if the period was retrieved successfully, or
254255
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
255-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
256+
* \return #RCL_RET_INVALID_ARGUMENT if the timer is invalid, or
256257
* \return #RCL_RET_ERROR an unspecified error occur.
257258
*/
258259
RCL_PUBLIC
@@ -282,7 +283,8 @@ rcl_timer_clock(rcl_timer_t * timer, rcl_clock_t ** clock);
282283
* \param[out] is_ready the bool used to store the result of the calculation
283284
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
284285
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
285-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
286+
* \return #RCL_RET_INVALID_ARGUMENT if the timer is invalid, or
287+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
286288
* \return #RCL_RET_ERROR an unspecified error occur.
287289
*/
288290
RCL_PUBLIC
@@ -317,7 +319,8 @@ rcl_timer_is_ready(const rcl_timer_t * timer, bool * is_ready);
317319
* \param[out] time_until_next_call the output variable for the result
318320
* \return #RCL_RET_OK if the timer until next call was successfully calculated, or
319321
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
320-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
322+
* \return #RCL_RET_INVALID_ARGUMENT if the timer is invalid, or
323+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
321324
* \return #RCL_RET_TIMER_CANCELED if the timer is canceled, or
322325
* \return #RCL_RET_ERROR an unspecified error occur.
323326
*/
@@ -350,7 +353,8 @@ rcl_timer_get_time_until_next_call(const rcl_timer_t * timer, int64_t * time_unt
350353
* \param[out] time_since_last_call the struct in which the time is stored
351354
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
352355
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
353-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
356+
* \return #RCL_RET_INVALID_ARGUMENT if the timer is invalid, or
357+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
354358
* \return #RCL_RET_ERROR an unspecified error occur.
355359
*/
356360
RCL_PUBLIC
@@ -377,6 +381,7 @@ rcl_timer_get_time_since_last_call(const rcl_timer_t * timer, int64_t * time_sin
377381
* \param[out] period the int64_t in which the period is stored
378382
* \return #RCL_RET_OK if the period was retrieved successfully, or
379383
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
384+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
380385
* \return #RCL_RET_ERROR an unspecified error occur.
381386
*/
382387
RCL_PUBLIC
@@ -407,6 +412,7 @@ rcl_timer_get_period(const rcl_timer_t * timer, int64_t * period);
407412
* \param[out] old_period the int64_t in which the previous period is stored
408413
* \return #RCL_RET_OK if the period was retrieved successfully, or
409414
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
415+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
410416
* \return #RCL_RET_ERROR an unspecified error occur.
411417
*/
412418
RCL_PUBLIC
@@ -484,7 +490,7 @@ rcl_timer_exchange_callback(rcl_timer_t * timer, const rcl_timer_callback_t new_
484490
* \param[inout] timer the timer to be canceled
485491
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
486492
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
487-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
493+
* \return #RCL_RET_INVALID_ARGUMENT if the timer is invalid, or
488494
* \return #RCL_RET_ERROR an unspecified error occur.
489495
*/
490496
RCL_PUBLIC
@@ -513,6 +519,7 @@ rcl_timer_cancel(rcl_timer_t * timer);
513519
* \param[out] is_canceled storage for the is canceled bool
514520
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
515521
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
522+
* \return #RCL_RET_TIMER_INVALID if the timer->impl is invalid, or
516523
* \return #RCL_RET_ERROR an unspecified error occur.
517524
*/
518525
RCL_PUBLIC
@@ -538,7 +545,7 @@ rcl_timer_is_canceled(const rcl_timer_t * timer, bool * is_canceled);
538545
* \param[inout] timer the timer to be reset
539546
* \return #RCL_RET_OK if the last call time was retrieved successfully, or
540547
* \return #RCL_RET_INVALID_ARGUMENT if any arguments are invalid, or
541-
* \return #RCL_RET_TIMER_INVALID if the timer is invalid, or
548+
* \return #RCL_RET_INVALID_ARGUMENT if the timer is invalid, or
542549
* \return #RCL_RET_ERROR an unspecified error occur.
543550
*/
544551
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)