4242
4343import static com .oracle .graal .python .nodes .ErrorMessages .INVALID_VALUE_NAN ;
4444import static com .oracle .graal .python .nodes .ErrorMessages .TOO_LARGE_TO_CONVERT_TO ;
45+ import static com .oracle .graal .python .runtime .PosixSupportLibrary .FD_SETSIZE ;
46+ import static com .oracle .graal .python .runtime .exception .PythonErrorType .ValueError ;
4547
4648import java .util .List ;
4749
@@ -177,7 +179,7 @@ private PList toList(boolean[] result, ObjAndFDList fds) {
177179 return factory ().createList (PythonUtils .arrayCopyOf (resultObjs , resultObjsIdx ));
178180 }
179181
180- private static ObjAndFDList seq2set (VirtualFrame frame , Object sequence , PythonObjectLibrary sequenceLib , PythonObjectLibrary itemLib , LookupAndCallBinaryNode callGetItemNode ,
182+ private ObjAndFDList seq2set (VirtualFrame frame , Object sequence , PythonObjectLibrary sequenceLib , PythonObjectLibrary itemLib , LookupAndCallBinaryNode callGetItemNode ,
181183 FastConstructListNode constructListNode , PosixResources resources ) {
182184 PArguments .ThreadState threadState = PArguments .getThreadState (frame );
183185 // We cannot assume any size of those two arrays, because the sequence may change as a
@@ -191,6 +193,9 @@ private static ObjAndFDList seq2set(VirtualFrame frame, Object sequence, PythonO
191193 Object pythonObject = callGetItemNode .executeObject (frame , pSequence , i );
192194 objects .add (pythonObject );
193195 int fd = itemLib .asFileDescriptorWithState (pythonObject , threadState );
196+ if (fd >= FD_SETSIZE ) {
197+ throw raise (ValueError , ErrorMessages .FILE_DESCRIPTOR_OUT_OF_RANGE_IN_SELECT );
198+ }
194199 fds .add (fd );
195200 containsSocket |= resources .isSocket (fd );
196201 }
0 commit comments