@@ -371,42 +371,46 @@ def _read_pyc(
371371 fp = open (pyc , "rb" )
372372 except OSError :
373373 return None
374- with fp :
375- try :
376- stat_result = os .stat (source )
377- mtime = int (stat_result .st_mtime )
378- size = stat_result .st_size
379- data = fp .read (16 )
380- except OSError as e :
381- trace (f"_read_pyc({ source } ): OSError { e } " )
382- return None
383- # Check for invalid or out of date pyc file.
384- if len (data ) != (16 ):
385- trace (f"_read_pyc({ source } ): invalid pyc (too short)" )
386- return None
387- if data [:4 ] != importlib .util .MAGIC_NUMBER :
388- trace (f"_read_pyc({ source } ): invalid pyc (bad magic number)" )
389- return None
390- if data [4 :8 ] != b"\x00 \x00 \x00 \x00 " :
391- trace (f"_read_pyc({ source } ): invalid pyc (unsupported flags)" )
392- return None
393- mtime_data = data [8 :12 ]
394- if int .from_bytes (mtime_data , "little" ) != mtime & 0xFFFFFFFF :
395- trace (f"_read_pyc({ source } ): out of date" )
396- return None
397- size_data = data [12 :16 ]
398- if int .from_bytes (size_data , "little" ) != size & 0xFFFFFFFF :
399- trace (f"_read_pyc({ source } ): invalid pyc (incorrect size)" )
400- return None
401- try :
402- co = marshal .load (fp )
403- except Exception as e :
404- trace (f"_read_pyc({ source } ): marshal.load error { e } " )
405- return None
406- if not isinstance (co , types .CodeType ):
407- trace (f"_read_pyc({ source } ): not a code object" )
408- return None
409- return co
374+ try :
375+ with fp :
376+ try :
377+ stat_result = os .stat (source )
378+ mtime = int (stat_result .st_mtime )
379+ size = stat_result .st_size
380+ data = fp .read (16 )
381+ except OSError as e :
382+ trace (f"_read_pyc({ source } ): OSError { e } " )
383+ return None
384+ # Check for invalid or out of date pyc file.
385+ if len (data ) != (16 ):
386+ trace (f"_read_pyc({ source } ): invalid pyc (too short)" )
387+ return None
388+ if data [:4 ] != importlib .util .MAGIC_NUMBER :
389+ trace (f"_read_pyc({ source } ): invalid pyc (bad magic number)" )
390+ return None
391+ if data [4 :8 ] != b"\x00 \x00 \x00 \x00 " :
392+ trace (f"_read_pyc({ source } ): invalid pyc (unsupported flags)" )
393+ return None
394+ mtime_data = data [8 :12 ]
395+ if int .from_bytes (mtime_data , "little" ) != mtime & 0xFFFFFFFF :
396+ trace (f"_read_pyc({ source } ): out of date" )
397+ return None
398+ size_data = data [12 :16 ]
399+ if int .from_bytes (size_data , "little" ) != size & 0xFFFFFFFF :
400+ trace (f"_read_pyc({ source } ): invalid pyc (incorrect size)" )
401+ return None
402+ try :
403+ co = marshal .load (fp )
404+ except Exception as e :
405+ trace (f"_read_pyc({ source } ): marshal.load error { e } " )
406+ return None
407+ if not isinstance (co , types .CodeType ):
408+ trace (f"_read_pyc({ source } ): not a code object" )
409+ return None
410+ return co
411+ except OSError as e :
412+ trace (f"_read_pyc({ source } ): OSError { e } " )
413+ return None
410414
411415
412416def rewrite_asserts (
0 commit comments