From b8cf048880594bf4d72cc588f0e8d82ad9556f1f Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 2 Nov 2025 16:34:44 +0100 Subject: dd: fix overflow for very large count/seek/skip values function old new delta xatoull_range_sfx - 49 +49 dd_main 1607 1640 +33 bb_banner 47 46 -1 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/1 up/down: 82/-1) Total: 81 bytes Signed-off-by: Sertonix Signed-off-by: Denys Vlasenko --- include/libbb.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'include') diff --git a/include/libbb.h b/include/libbb.h index 4b3319824..8d252d455 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -290,6 +290,7 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN /* "long" is long enough on this system */ typedef unsigned long uoff_t; # define XATOOFF(a) xatoul_range((a), 0, LONG_MAX) +# define XATOOFF_SFX(a, s) xatoul_range_sfx((a), 0, LONG_MAX, s) /* usage: sz = BB_STRTOOFF(s, NULL, 10); if (errno || sz < 0) die(); */ # define BB_STRTOOFF bb_strtoul # define STRTOOFF strtoul @@ -299,6 +300,7 @@ typedef unsigned long uoff_t; /* "long" is too short, need "long long" */ typedef unsigned long long uoff_t; # define XATOOFF(a) xatoull_range((a), 0, LLONG_MAX) +# define XATOOFF_SFX(a, s) xatoull_range_sfx((a), 0, LLONG_MAX, s) # define BB_STRTOOFF bb_strtoull # define STRTOOFF strtoull # define OFF_FMT "ll" @@ -314,12 +316,14 @@ typedef unsigned long long uoff_t; # if UINT_MAX == ULONG_MAX typedef unsigned long uoff_t; # define XATOOFF(a) xatoi_positive(a) +# define XATOOFF_SFX(a, s) xatoul_range_sfx((a), 0, INT_MAX, s) # define BB_STRTOOFF bb_strtou # define STRTOOFF strtol # define OFF_FMT "l" # else typedef unsigned long uoff_t; # define XATOOFF(a) xatoul_range((a), 0, LONG_MAX) +# define XATOOFF_SFX(a, s) xatoul_range_sfx((a), 0, LONG_MAX, s) # define BB_STRTOOFF bb_strtoul # define STRTOOFF strtol # define OFF_FMT "l" -- cgit v1.2.3-55-g6feb