From 9486f130c7bc0662a783832c2a7745287b2289c9 Mon Sep 17 00:00:00 2001 From: Tomohiro Degawa Date: Sun, 24 Apr 2022 23:36:08 +0900 Subject: [PATCH 1/3] fixed 32bit integer overflow --- src/stdlib_io_npy_load.fypp | 2 +- src/stdlib_io_npy_save.fypp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stdlib_io_npy_load.fypp b/src/stdlib_io_npy_load.fypp index 965efd32e..1dc82d58d 100644 --- a/src/stdlib_io_npy_load.fypp +++ b/src/stdlib_io_npy_load.fypp @@ -136,7 +136,7 @@ contains header_len = ichar(buf(1)) & & + ichar(buf(2)) * 2**8 & & + ichar(buf(3)) * 2**16 & - & + ichar(buf(4)) * 2**32 + & + ichar(buf(4)) * 2**24 else header_len = ichar(buf(1)) & & + ichar(buf(2)) * 2**8 diff --git a/src/stdlib_io_npy_save.fypp b/src/stdlib_io_npy_save.fypp index abee741af..5640b2bc2 100644 --- a/src/stdlib_io_npy_save.fypp +++ b/src/stdlib_io_npy_save.fypp @@ -62,8 +62,8 @@ contains str = achar(mod(val, 2**8)) // & & achar(mod(val, 2**16) / 2**8) // & - & achar(mod(val, 2**32) / 2**16) // & - & achar(val / 2**32) + & achar(mod(val, 2**24) / 2**16) // & + & achar(val / 2**24) end function to_bytes_i4 From 0756096766d4ebdfc0edf9e80a0601f4e654789c Mon Sep 17 00:00:00 2001 From: Tomohiro Degawa Date: Sun, 24 Apr 2022 23:48:34 +0900 Subject: [PATCH 2/3] refactored power of base number at each position --- src/stdlib_io_npy_load.fypp | 10 +++++----- src/stdlib_io_npy_save.fypp | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/stdlib_io_npy_load.fypp b/src/stdlib_io_npy_load.fypp index 1dc82d58d..2a0bbb36e 100644 --- a/src/stdlib_io_npy_load.fypp +++ b/src/stdlib_io_npy_load.fypp @@ -134,12 +134,12 @@ contains if (major > 1) then header_len = ichar(buf(1)) & - & + ichar(buf(2)) * 2**8 & - & + ichar(buf(3)) * 2**16 & - & + ichar(buf(4)) * 2**24 + & + ichar(buf(2)) * 256**1 & + & + ichar(buf(3)) * 256**2 & + & + ichar(buf(4)) * 256**3 else - header_len = ichar(buf(1)) & - & + ichar(buf(2)) * 2**8 + header_len = ichar(buf(1)) & + & + ichar(buf(2)) * 256**1 end if allocate(character(header_len) :: dict, stat=stat) if (stat /= 0) return diff --git a/src/stdlib_io_npy_save.fypp b/src/stdlib_io_npy_save.fypp index 5640b2bc2..706c3cd90 100644 --- a/src/stdlib_io_npy_save.fypp +++ b/src/stdlib_io_npy_save.fypp @@ -60,10 +60,10 @@ contains !> String of bytes character(len=4) :: str - str = achar(mod(val, 2**8)) // & - & achar(mod(val, 2**16) / 2**8) // & - & achar(mod(val, 2**24) / 2**16) // & - & achar(val / 2**24) + str = achar(mod(val, 256**1)) // & + & achar(mod(val, 256**2) / 256**1) // & + & achar(mod(val, 256**3) / 256**2) // & + & achar(val / 256**3) end function to_bytes_i4 From c4701c5cba939df5815c3e12dd6cfbd8542ed0cd Mon Sep 17 00:00:00 2001 From: Tomohiro Degawa Date: Mon, 25 Apr 2022 00:23:25 +0900 Subject: [PATCH 3/3] removed a whitespace --- src/stdlib_io_npy_load.fypp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib_io_npy_load.fypp b/src/stdlib_io_npy_load.fypp index 2a0bbb36e..01fce87a9 100644 --- a/src/stdlib_io_npy_load.fypp +++ b/src/stdlib_io_npy_load.fypp @@ -138,7 +138,7 @@ contains & + ichar(buf(3)) * 256**2 & & + ichar(buf(4)) * 256**3 else - header_len = ichar(buf(1)) & + header_len = ichar(buf(1)) & & + ichar(buf(2)) * 256**1 end if allocate(character(header_len) :: dict, stat=stat)