@@ -116,33 +116,40 @@ def test_fsize_not_too_big(self):
116
116
self .addCleanup (resource .setrlimit , resource .RLIMIT_FSIZE , (cur , max ))
117
117
118
118
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 )]
120
127
121
128
resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 31 - 5 , max ))
122
129
self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), (2 ** 31 - 5 , max ))
123
130
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 ))
125
132
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 ))
127
134
128
135
try :
129
136
resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 32 , max ))
130
137
except OverflowError :
131
138
pass
132
139
else :
133
- self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 32 ))
140
+ self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 32 ))
134
141
135
142
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 ))
137
144
try :
138
145
resource .setrlimit (resource .RLIMIT_FSIZE , (2 ** 63 , max ))
139
146
except ValueError :
140
147
# There is a hard limit on macOS.
141
148
pass
142
149
else :
143
- self .assertEqual (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 63 ))
150
+ self .assertIn (resource .getrlimit (resource .RLIMIT_FSIZE ), expected (2 ** 63 ))
144
151
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 ))
146
153
147
154
@unittest .skipIf (sys .platform == "vxworks" ,
148
155
"setting RLIMIT_FSIZE is not supported on VxWorks" )
0 commit comments