From 802cd6ce9001200e1f2f59058757768cedcfef30 Mon Sep 17 00:00:00 2001 From: Magnus Ullberg Date: Sun, 19 May 2024 08:07:52 -0400 Subject: [PATCH 1/3] Add error checking to strtof calls --- src/and_scale.c | 8 +++++++- src/gng_scale.c | 8 +++++++- src/steinberg_scale.c | 9 ++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/and_scale.c b/src/and_scale.c index edc865f..83fa5ec 100644 --- a/src/and_scale.c +++ b/src/and_scale.c @@ -43,7 +43,13 @@ static float _decode_measurement_msg(scale_standard_data_format_t * msg) { // Doesn't really matter though.. // Decode weight information - float weight = strtof(msg->data, NULL); + char *endptr; + float weight = strtof(msg->data, &endptr); + + if( endptr == msg->data ) { + // Conversion failed + return NAN; + } return weight; } diff --git a/src/gng_scale.c b/src/gng_scale.c index ebf1d86..d950a44 100644 --- a/src/gng_scale.c +++ b/src/gng_scale.c @@ -56,7 +56,13 @@ static float _decode_measurement_msg(gngscale_standard_data_format_t * msg) { } // Decode weight information - float weight = strtof(msg->data, NULL); + char *endptr; + float weight = strtof(msg->data, &endptr); + + if( endptr == msg->data ) { + // Conversion failed + return NAN; + } // Apply the sign weight *= sign; diff --git a/src/steinberg_scale.c b/src/steinberg_scale.c index 89a1a6f..34c939f 100644 --- a/src/steinberg_scale.c +++ b/src/steinberg_scale.c @@ -43,7 +43,14 @@ scale_handle_t steinberg_scale_handle = { static float _decode_measurement_msg(steinberg_sbs_data_format_t * msg) { - float weight = strtof(msg->data, NULL); + // Decode weight information + char *endptr; + float weight = strtof(msg->data, &endptr); + + if( endptr == msg->data ) { + // Conversion failed + return NAN; + } return weight; } From 35eb9fc25acc570f572ffca4d460250e9e15874e Mon Sep 17 00:00:00 2001 From: Magnus Ullberg Date: Sun, 19 May 2024 08:24:27 -0400 Subject: [PATCH 2/3] Just to be proper, return a fload NaN instead of the a generic one. --- src/and_scale.c | 2 +- src/gng_scale.c | 2 +- src/steinberg_scale.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/and_scale.c b/src/and_scale.c index 83fa5ec..eae7e8a 100644 --- a/src/and_scale.c +++ b/src/and_scale.c @@ -48,7 +48,7 @@ static float _decode_measurement_msg(scale_standard_data_format_t * msg) { if( endptr == msg->data ) { // Conversion failed - return NAN; + return nanf(msg->data); } return weight; diff --git a/src/gng_scale.c b/src/gng_scale.c index d950a44..29a4b7e 100644 --- a/src/gng_scale.c +++ b/src/gng_scale.c @@ -61,7 +61,7 @@ static float _decode_measurement_msg(gngscale_standard_data_format_t * msg) { if( endptr == msg->data ) { // Conversion failed - return NAN; + return nanf(msg->data); } // Apply the sign diff --git a/src/steinberg_scale.c b/src/steinberg_scale.c index 34c939f..63d70fa 100644 --- a/src/steinberg_scale.c +++ b/src/steinberg_scale.c @@ -49,7 +49,7 @@ static float _decode_measurement_msg(steinberg_sbs_data_format_t * msg) { if( endptr == msg->data ) { // Conversion failed - return NAN; + return nanf(msg->data); } return weight; From f71b7965e505c42a89a23779124e89b54ebe9c77 Mon Sep 17 00:00:00 2001 From: Magnus Ullberg Date: Sun, 19 May 2024 08:24:27 -0400 Subject: [PATCH 3/3] Just to be proper, return a float NaN instead of the a generic one. --- src/and_scale.c | 2 +- src/gng_scale.c | 2 +- src/steinberg_scale.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/and_scale.c b/src/and_scale.c index 83fa5ec..eae7e8a 100644 --- a/src/and_scale.c +++ b/src/and_scale.c @@ -48,7 +48,7 @@ static float _decode_measurement_msg(scale_standard_data_format_t * msg) { if( endptr == msg->data ) { // Conversion failed - return NAN; + return nanf(msg->data); } return weight; diff --git a/src/gng_scale.c b/src/gng_scale.c index d950a44..29a4b7e 100644 --- a/src/gng_scale.c +++ b/src/gng_scale.c @@ -61,7 +61,7 @@ static float _decode_measurement_msg(gngscale_standard_data_format_t * msg) { if( endptr == msg->data ) { // Conversion failed - return NAN; + return nanf(msg->data); } // Apply the sign diff --git a/src/steinberg_scale.c b/src/steinberg_scale.c index 34c939f..63d70fa 100644 --- a/src/steinberg_scale.c +++ b/src/steinberg_scale.c @@ -49,7 +49,7 @@ static float _decode_measurement_msg(steinberg_sbs_data_format_t * msg) { if( endptr == msg->data ) { // Conversion failed - return NAN; + return nanf(msg->data); } return weight;