@@ -116,33 +116,40 @@ def test_fsize_not_too_big(self):
116116        self .addCleanup (resource .setrlimit , resource .RLIMIT_FSIZE , (cur , max ))
117117
118118        def  expected (cur ):
119-             return  (min (cur , resource .RLIM_INFINITY ), max )
119+             # The glibc wrapper functions use a 64-bit rlim_t data type, 
120+             # even on 32-bit platforms. If a program tried to set a resource 
121+             # limit to a value larger than can be represented in a 32-bit 
122+             # unsigned long, then the glibc setrlimit() wrapper function 
123+             # silently converted the limit value to RLIM_INFINITY. 
124+             if  sys .maxsize  <  2 ** 32  <=  cur  <=  resource .RLIM_INFINITY :
125+                 return  [(resource .RLIM_INFINITY , max ), (cur , max )]
126+             return  [(min (cur , resource .RLIM_INFINITY ), max )]
120127
121128        resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 31 - 5 , max ))
122129        self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), (2 ** 31 - 5 , max ))
123130        resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 31 , max ))
124-         self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 31 ))
131+         self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 31 ))
125132        resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 32 - 5 , max ))
126-         self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 32 - 5 ))
133+         self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 32 - 5 ))
127134
128135        try :
129136            resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 32 , max ))
130137        except  OverflowError :
131138            pass 
132139        else :
133-             self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 32 ))
140+             self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 32 ))
134141
135142            resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 63 - 5 , max ))
136-             self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 63 - 5 ))
143+             self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 63 - 5 ))
137144            try :
138145                resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 63 , max ))
139146            except  ValueError :
140147                # There is a hard limit on macOS. 
141148                pass 
142149            else :
143-                 self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 63 ))
150+                 self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 63 ))
144151                resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 64 - 5 , max ))
145-                 self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 64 - 5 ))
152+                 self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 64 - 5 ))
146153
147154    @unittest .skipIf (sys .platform  ==  "vxworks" , 
148155                     "setting RLIMIT_FSIZE is not supported on VxWorks" ) 
0 commit comments