From 0a4617da9e2ff971760f7d17e5e594b77219688e Mon Sep 17 00:00:00 2001 From: Yonggang Yu Date: Tue, 14 May 2024 10:21:00 -0600 Subject: [PATCH] Add _FAIL to sub. fglob, if pathlen exceeds upper bound of filename length (ESMF_MAXSTR) --- CHANGELOG.md | 1 + base/MAPL_ObsUtil.F90 | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a355c1f4648..a63c0e95f05a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Update `FindESMF.cmake` to match that in ESMF 8.6.1 +- If file path length exceeds ESMF_MAXSTR, add _FAIL in subroutine fglob ### Changed diff --git a/base/MAPL_ObsUtil.F90 b/base/MAPL_ObsUtil.F90 index b5da6efa79d2..1b96fad92ae8 100644 --- a/base/MAPL_ObsUtil.F90 +++ b/base/MAPL_ObsUtil.F90 @@ -941,11 +941,16 @@ subroutine fglob(search_name, filename, rc) ! give the last name character(kind=C_CHAR, len=:), allocatable :: c_search_name character(kind=C_CHAR, len=512) :: c_filename - integer slen + integer :: slen, lenmax c_search_name = trim(search_name)//C_NULL_CHAR rc = f_call_c_glob(c_search_name, c_filename, slen) filename="" + lenmax = len(filename) + if (lenmax < slen) then + if (MAPL_AM_I_ROOT()) write(6,*) 'pathlen vs filename_max_char_len: ', slen, lenmax + _FAIL ('PATHLEN is greater than filename_max_char_len') + end if if (slen>0) filename(1:slen)=c_filename(1:slen) return