Message ID | 20200615082702.32693-8-sde@unmatched.eu |
---|---|
State | Accepted |
Headers | show |
Series | Add semantic versioning support | expand |
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 --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; } /*