From 0ca9a1fb092f7ce9d88c82e24917d1c51b54fa81 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 18 Feb 2015 21:24:09 +0000 Subject: [PATCH] Integer read: use strtoimax rather than strtol and check explicitly for overflow of int32_t --- src/OpenFOAM/primitives/ints/int32/int32IO.C | 7 +++++-- src/OpenFOAM/primitives/ints/int64/int64IO.C | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/OpenFOAM/primitives/ints/int32/int32IO.C b/src/OpenFOAM/primitives/ints/int32/int32IO.C index 0b18d9702..d491e236a 100644 --- a/src/OpenFOAM/primitives/ints/int32/int32IO.C +++ b/src/OpenFOAM/primitives/ints/int32/int32IO.C @@ -28,6 +28,7 @@ License #include "int32.H" #include "IOstreams.H" +#include #include #include @@ -87,9 +88,11 @@ bool Foam::read(const char* buf, int32_t& s) { char *endptr = NULL; errno = 0; - long l = strtol(buf, &endptr, 10); + intmax_t l = strtoimax(buf, &endptr, 10); s = int32_t(l); - return (*endptr == 0) && (errno == 0); + return + (*endptr == 0) && (errno == 0) + && (l >= INT32_MIN) && (l <= INT32_MAX); } diff --git a/src/OpenFOAM/primitives/ints/int64/int64IO.C b/src/OpenFOAM/primitives/ints/int64/int64IO.C index 6cc0b5e09..1cba3d0b5 100644 --- a/src/OpenFOAM/primitives/ints/int64/int64IO.C +++ b/src/OpenFOAM/primitives/ints/int64/int64IO.C @@ -28,6 +28,7 @@ License #include "int64.H" #include "IOstreams.H" +#include #include #include @@ -87,7 +88,7 @@ bool Foam::read(const char* buf, int64_t& s) { char *endptr = NULL; errno = 0; - long l = strtol(buf, &endptr, 10); + intmax_t l = strtoimax(buf, &endptr, 10); s = int64_t(l); return (*endptr == 0) && (errno == 0); }