diff mbox series

[v3,7/7] Fix coverity reports (#304621, #304620)

Message ID 20200615082702.32693-8-sde@unmatched.eu
State Accepted
Headers show
Series Add semantic versioning support | expand

Commit Message

Stijn Devriendt June 15, 2020, 8:27 a.m. UTC
Comparisons against MAX_SAFE_INT were done in the int domain, rather than
the source domain.
---
 core/semver.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Stefano Babic June 15, 2020, 9:59 a.m. UTC | #1
On 15.06.20 10:27, Stijn Devriendt wrote:
> Comparisons against MAX_SAFE_INT were done in the int domain, rather than
> the source domain.
> ---
>  core/semver.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/core/semver.c b/core/semver.c
> index d778e57..763e7a0 100644
> --- a/core/semver.c
> +++ b/core/semver.c
> @@ -49,7 +49,7 @@ strcut (char *str, int begin, int len) {
>    size_t l;
>    l = strlen(str);
>  
> -  if((int)l < 0 || (int)l > MAX_SAFE_INT) return -1;
> +  if(l > (size_t)MAX_SAFE_INT) return -1;
>  
>    if (len < 0) len = l - begin + 1;
>    if (begin + len > (int)l) len = l - begin;
> @@ -88,14 +88,17 @@ binary_comparison (int x, int y) {
>  
>  static int
>  parse_int (const char *s) {
> -  int valid, num;
> +  int valid;
> +  long int num;
>    valid = has_valid_chars(s, NUMBERS);
>    if (valid == 0) return -1;
>  
>    num = strtol(s, NULL, 10);
>    if (num > MAX_SAFE_INT) return -1;
> +  /* Shouldn't happen because '-' is a delimiter! */
> +  if (num < 0) return -1;
>  
> -  return num;
> +  return (int)num;
>  }
>  
>  /*
> 

Thanks, this fixes the defects - I merge the series into -master.

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/core/semver.c b/core/semver.c
index d778e57..763e7a0 100644
--- a/core/semver.c
+++ b/core/semver.c
@@ -49,7 +49,7 @@  strcut (char *str, int begin, int len) {
   size_t l;
   l = strlen(str);
 
-  if((int)l < 0 || (int)l > MAX_SAFE_INT) return -1;
+  if(l > (size_t)MAX_SAFE_INT) return -1;
 
   if (len < 0) len = l - begin + 1;
   if (begin + len > (int)l) len = l - begin;
@@ -88,14 +88,17 @@  binary_comparison (int x, int y) {
 
 static int
 parse_int (const char *s) {
-  int valid, num;
+  int valid;
+  long int num;
   valid = has_valid_chars(s, NUMBERS);
   if (valid == 0) return -1;
 
   num = strtol(s, NULL, 10);
   if (num > MAX_SAFE_INT) return -1;
+  /* Shouldn't happen because '-' is a delimiter! */
+  if (num < 0) return -1;
 
-  return num;
+  return (int)num;
 }
 
 /*