HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/test/__pycache__/test_faulthandler.cpython-310.opt-2.pyc
o

�inx�@sddlmZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
ddlmZddlm
Z
mZddlmZddlZddlZddlmZzddlZWney[dZYnwdZejd	kZddd�Zd
d�Zedd��ZGdd�dej�Zedkr�e��dSdS)�)�contextmanagerN)�support)�	os_helper)�
script_helper�
is_android)�skip_if_sanitizer)�dedentg�?�nt�cCsH|}|d|7}|d|7}d|krd|d|d|Sd|dS)Nz#  File "<string>", line %s in func
z&  File "<string>", line %s in <module>r
�^�
�$�)Zlineno1Zlineno2�header�	min_count�regexrr�3/usr/local/lib/python3.10/test/test_faulthandler.py�expected_tracebacksrcCst�td�|�S)Nz(raising SIGSEGV on Android is unreliable)�unittest�skipIfr)�testrrr�skip_segfault_on_android#s
��rc	cs.�t��}z|VWt�|�dSt�|�w�N)�tempfile�mktempr�unlink��filenamerrr�temporary_filename(s
�rc	@sZeZdZd�dd�Zddddddddd�dd	�Zd�d
d�Zdd
�Ze�e	j
�d�d�dd��Ze
dd��Ze
dd��Zdd�Zdd�Ze�e	j
dkd�dd��Ze�edud�e�eed�d �e
d!d"����Ze�edud�e�eed#�d$�e
d%d&����Zd'd(�Zd)d*�Zd+d,�Ze�e	j
�d-�d.�e�eed/�d0�d1d2���Ze
d3d4��Zeddd5d6�e
d7d8���Z e�e	j
dkd9�eddd5d6�e
d:d;����Z!e
d<d=��Z"e
d>d?��Z#e
d@dA��Z$dBdC�Z%dDdE�Z&dFdG�Z'dHdI�Z(dddJ�dKdL�Z)dMdN�Z*dOdP�Z+e�e	j
dkd9�dQdR��Z,dSdT�Z-dUdV�Z.dWdX�Z/dYdZ�Z0d�dddJ�d\d]�Z1d^d_�Z2d`da�Z3dbdc�Z4ddde�Z5e�e	j
dkd9�dfdg��Z6dhdi�Z7e�eedj�dk�		d�dldm��Z8dndo�Z9dpdq�Z:drds�Z;e�e	j
dkd9�dtdu��Z<dvdw�Z=dxdy�Z>e?dzd{��Z@d|d}�ZAe�eBd~�dd���ZCe�eBd~�d�d���ZDe�eBd~�d�d���ZEe�eBd~�d�d���ZFd�d��ZGdS)��FaultHandlerTestsNc
	Csb	t|���}g}|dur|�|�t���,tjd||d�}|�|��\}}|��}Wd�n1s6wYWd�n1sEwY|�	dd�}|rx|�
|d�t|d��}	|	��}Wd�n1slwY|�	dd�}n3|dur�|�
|d�t
�|t
jd�t|ddd	��}	|	��}Wd�n1s�wY|�	dd�}|��|fS)
N�-c)�pass_fds�ascii�backslashreplace��rbrF)�closefd)r�strip�appendr�SuppressCrashReportrZspawn_python�communicate�wait�decode�assertEqual�open�read�os�lseek�SEEK_SET�
splitlines)
�self�coder�fdr!�process�output�stderr�exitcode�fprrr�
get_output1s8	


���
�
�zFaultHandlerTests.get_outputTFz<module>)r�all_threads�other_regexr6�know_current_thread�py_fatal_error�garbage_collecting�functioncCs�	|r|rd}nd}nd}d|��g}
|	r|
�d�|
�d�|
�|�d��|
r.|
�d�|
�d	|�d
|���d�|
�}
|rId|
�d
|�d�}
d|
��}
|j|||d�\}}d�|�}|�||
�|�|d�dS)NzCurrent thread 0x[0-9a-f]+zThread 0x[0-9a-f]+ZStackrz!Python runtime state: initializedr$z \(most recent call first\):z  Garbage-collectingz  File "<string>", line z in rz(?:�|�)z(?m)�rr6r)r(�joinr<�assertRegex�assertNotEqual)r4r5�lineno�fatal_errorrr=r>r6r?r@rArBrrr8r:rrr�check_errorRs,





zFaultHandlerTests.check_errorcKs2|rd||f}d|}|j|||fi|��dS)Nz%s: %szFatal Python error: %s�rK)r4r5�line_number�
name_regex�func�kwrJrrr�check_fatal_errorysz#FaultHandlerTests.check_fatal_errorcKs"d|}|j|||fi|��dS)NzWindows fatal exception: %srL)r4r5rMrNrPrJrrr�check_windows_exceptionsz)FaultHandlerTests.check_windows_exceptionZaixz5the first page of memory is a mapped read-only on AIXcCs(ts|�ddd�dS|�ddd�dS)Nz�
                import faulthandler
                faulthandler.enable()
                faulthandler._read_null()
                �z4(?:Segmentation fault|Bus error|Illegal instruction)�access violation)�
MS_WINDOWSrQrR�r4rrr�test_read_null�s��z FaultHandlerTests.test_read_nullcC�|�ddd�dS)Nzs
            import faulthandler
            faulthandler.enable()
            faulthandler._sigsegv()
            rS�Segmentation fault�rQrVrrr�test_sigsegv���zFaultHandlerTests.test_sigsegvcCs|jdddddd�dS)Na�
            import faulthandler
            import gc
            import sys

            faulthandler.enable()

            class RefCycle:
                def __del__(self):
                    faulthandler._sigsegv()

            # create a reference cycle which triggers a fatal
            # error in a destructor
            a = RefCycle()
            b = RefCycle()
            a.b = b
            b.a = a

            # Delete the objects, not the cycle
            a = None
            b = None

            # Break the reference cycle: call __del__()
            gc.collect()

            # Should not reach this line
            print("exit", file=sys.stderr)
            �	rY�__del__T)rBrArZrVrrr�test_gc�s
�zFaultHandlerTests.test_gccCs|jddddddd�dS)Nz�
            import faulthandler
            faulthandler.enable()
            faulthandler._fatal_error_c_thread()
            rSz
in new threadFZfaulthandler_fatal_error_threadT)r?rOr@rZrVrrr�test_fatal_error_c_thread�s
�z+FaultHandlerTests.test_fatal_error_c_threadcCrX)Nzs
            import faulthandler
            faulthandler.enable()
            faulthandler._sigabrt()
            rSZAbortedrZrVrrr�test_sigabrt�s�zFaultHandlerTests.test_sigabrt�win32z"SIGFPE cannot be caught on WindowscCrX)Nzr
            import faulthandler
            faulthandler.enable()
            faulthandler._sigfpe()
            rSzFloating point exceptionrZrVrrr�test_sigfpe�s�zFaultHandlerTests.test_sigfpezneed _testcapi�SIGBUSzneed signal.SIGBUScCrX)Nz�
            import faulthandler
            import signal

            faulthandler.enable()
            signal.raise_signal(signal.SIGBUS)
            �z	Bus errorrZrVrrr�test_sigbus���zFaultHandlerTests.test_sigbus�SIGILLzneed signal.SIGILLcCrX)Nz�
            import faulthandler
            import signal

            faulthandler.enable()
            signal.raise_signal(signal.SIGILL)
            rezIllegal instructionrZrVrrr�test_sigill�rgzFaultHandlerTests.test_sigillcCsJt���|jd|�d�ddddd�Wd�dS1swYdS)NzP
                import _testcapi
                _testcapi.fatal_error(b'xyz', �)
                �Zxyz�test_fatal_errorT)rOr@)rr)rQ)r4Zrelease_gilrrr�check_fatal_error_funcs
��"�z(FaultHandlerTests.check_fatal_error_funccC�|�d�dS)NF�rmrVrrrrl�z"FaultHandlerTests.test_fatal_errorcCrn)NTrorVrrr�test_fatal_error_without_gilrpz.FaultHandlerTests.test_fatal_error_without_gilZopenbsdzVIssue #12868: sigaltstack() doesn't work on OpenBSD if Python is compiled with pthreadZ_stack_overflowz#need faulthandler._stack_overflow()cC�|jddddd�dS)Nzz
            import faulthandler
            faulthandler.enable()
            faulthandler._stack_overflow()
            rSz (?:Segmentation fault|Bus error)z unable to raise a stack overflow)r>rZrVrrr�test_stack_overflows

�z%FaultHandlerTests.test_stack_overflowcCrX)Nzw
            import faulthandler
            faulthandler.enable()
            faulthandler._sigsegv(True)
            rSrYrZrVrrr�test_gil_released%r\z#FaultHandlerTests.test_gil_releasedz0sanitizer builds change crashing process output.)ZmemoryZub�reasoncCsJt��}|jdjt|�d�dd|d�Wd�dS1swYdS)Nz�
                import faulthandler
                output = open({filename}, 'wb')
                faulthandler.enable(output)
                faulthandler._sigsegv()
                r�rY)rrQ�format�repr�r4rrrr�test_enable_file/s��"�z"FaultHandlerTests.test_enable_filez.subprocess doesn't support pass_fds on WindowscCsNt�d��}|��}|jd|dd|d�Wd�dS1s wYdS)N�wb+z�
                import faulthandler
                import sys
                faulthandler.enable(%s)
                faulthandler._sigsegv()
                rvrY�r6)r�
TemporaryFile�filenorQ)r4r;r6rrr�test_enable_fd>s��"�z FaultHandlerTests.test_enable_fdcCrr)Nz�
            import faulthandler
            faulthandler.enable(all_threads=False)
            faulthandler._sigsegv()
            rSrYF�r=rZrVrrr�test_enable_single_threadPs

�z+FaultHandlerTests.test_enable_single_threadcCsHd}d}|�|�\}}d�|�}|�||vd||f�|�|d�dS)Nz�
            import faulthandler
            faulthandler.enable()
            faulthandler.disable()
            faulthandler._sigsegv()
            zFatal Python errorrz%r is present in %rr)r<rF�
assertTruerH)r4r5Znot_expectedr9r:rrr�test_disable[s


�zFaultHandlerTests.test_disablecCsrd}|�|�\}}d�|�}t�d|tj�}|s |�d|���t|�d����	d��}dD]}|�
||�q.dS)Nz�
            import faulthandler
            import sys
            # Don't filter stdlib module names
            sys.stdlib_module_names = frozenset()
            faulthandler.enable()
            faulthandler._sigsegv()
            rz*^Extension modules:(.*) \(total: [0-9]+\)$z$Cannot find 'Extension modules:' in r
z, )�sys�faulthandler)r<rF�re�search�	MULTILINEZfail�set�groupr'�split�assertIn)r4r5r9r:�match�modules�namerrr�test_dump_ext_modulesjs
��z'FaultHandlerTests.test_dump_ext_modulescCs�tj}zDtjt_t��}z#t��|�t���t��|�t���W|r+t��nt��n|r7t��wt��wW|t_dSW|t_dS|t_wr)	r�r9�
__stderr__r��
is_enabled�enabler��disableZassertFalse)r4Zorig_stderrZwas_enabledrrr�test_is_enabled~s$

�

�z!FaultHandlerTests.test_is_enabledcCs0d}tjdd|f}t�|�}|�|��d�dS)N�5import faulthandler; print(faulthandler.is_enabled())�-Er �False)r��
executable�
subprocess�check_outputr-�rstrip)r4r5�argsr8rrr�test_disabled_by_default�s
z*FaultHandlerTests.test_disabled_by_defaultcCs`d}tdtjtjjrdndddd|f�}tj��}|�dd�t	j
||d�}|�|��d	�dS)
Nr�r�r$z-Xr�r �PYTHONFAULTHANDLER��env�True)
�filterr�r��flags�ignore_environmentr0�environ�copy�popr�r�r-r��r4r5r�r�r8rrr�test_sys_xoptions�s�
z#FaultHandlerTests.test_sys_xoptionscCs�d}tjd|f}ttj�}d|d<d|d<tj||d�}|�|��d�ttj�}d|d<d|d<tj||d�}|�|��d	�dS)
Nr�r r$r�Z
PYTHONDEVMODEr�r��1r�)	r�r��dictr0r�r�r�r-r�r�rrr�test_env_var�s

zFaultHandlerTests.test_env_varrEcCsn	d}|j||d�}|rd}n	|durd}nd}dd|dd	g}|�|||�\}}|�||�|�|d
�dS)Na[
            import faulthandler

            filename = {filename!r}
            fd = {fd}

            def funcB():
                if filename:
                    with open(filename, "wb") as fp:
                        faulthandler.dump_traceback(fp, all_threads=False)
                elif fd is not None:
                    faulthandler.dump_traceback(fd,
                                                all_threads=False)
                else:
                    faulthandler.dump_traceback(all_threads=False)

            def funcA():
                funcB()

            funcA()
            rEr]���Stack (most recent call first):z#  File "<string>", line %s in funcBz#  File "<string>", line 17 in funcAz&  File "<string>", line 19 in <module>r�rwr<r-)r4rr6r5rI�expected�tracer:rrr�check_dump_traceback�s&��z&FaultHandlerTests.check_dump_tracebackcC�|��dSr)r�rVrrr�test_dump_traceback��z%FaultHandlerTests.test_dump_tracebackcC�8t��}|j|d�Wd�dS1swYdS�Nr)rr�ryrrr�test_dump_traceback_file��"�z*FaultHandlerTests.test_dump_traceback_filecC�@t�d��}|j|��d�Wd�dS1swYdS�Nr{r|)rr}r�r~�r4r;rrr�test_dump_traceback_fd��"�z(FaultHandlerTests.test_dump_traceback_fdcCsdd}d|d}d|d}d}|j|d�}dd|d	g}|�|�\}}|�||�|�|d
�dS)Ni��x�2z...z�
            import faulthandler

            def {func_name}():
                faulthandler.dump_traceback(all_threads=False)

            {func_name}()
            )�	func_namer�z  File "<string>", line 4 in %sz%  File "<string>", line 6 in <module>rr�)r4�maxlenr�Z	truncatedr5r�r�r:rrr�
test_truncate�s��zFaultHandlerTests.test_truncatecCsr	d}|jt|�d�}|�||�\}}d�|�}|rd}nd}d}t|j|d����}|�||�|�|d�dS)	Na�
            import faulthandler
            from threading import Thread, Event
            import time

            def dump():
                if {filename}:
                    with open({filename}, "wb") as fp:
                        faulthandler.dump_traceback(fp, all_threads=True)
                else:
                    faulthandler.dump_traceback(all_threads=True)

            class Waiter(Thread):
                # avoid blocking if the main thread raises an exception.
                daemon = True

                def __init__(self):
                    Thread.__init__(self)
                    self.running = Event()
                    self.stop = Event()

                def run(self):
                    self.running.set()
                    self.stop.wait()

            waiter = Waiter()
            waiter.start()
            waiter.running.wait()
            dump()
            waiter.stop.set()
            waiter.join()
            rr��
a�
            ^Thread 0x[0-9a-f]+ \(most recent call first\):
            (?:  File ".*threading.py", line [0-9]+ in [_a-z]+
            ){{1,3}}  File "<string>", line 23 in run
              File ".*threading.py", line [0-9]+ in _bootstrap_inner
              File ".*threading.py", line [0-9]+ in _bootstrap

            Current thread 0x[0-9a-f]+ \(most recent call first\):
              File "<string>", line {lineno} in dump
              File "<string>", line 28 in <module>$
            )rIr)rwrxr<rFrr'rGr-)r4rr5r8r:rIrrrr�check_dump_traceback_threads
s 
z.FaultHandlerTests.check_dump_traceback_threadscCs|�d�dSr)r�rVrrr�test_dump_traceback_threadsHrpz-FaultHandlerTests.test_dump_traceback_threadscCs6t��}|�|�Wd�dS1swYdSr)rr�ryrrr� test_dump_traceback_threads_fileKs"�z2FaultHandlerTests.test_dump_traceback_threads_filer
c
Cs�	ttjtd��}d}|jt|||||d�}|�||�\}}	d�|�}|s@|}
|r-|
d9}
d|}tdd||
d	�}|�||�n|�	|d
�|�	|	d�dS)N)Zsecondsa�
            import faulthandler
            import time
            import sys

            timeout = {timeout}
            repeat = {repeat}
            cancel = {cancel}
            loops = {loops}
            filename = {filename!r}
            fd = {fd}

            def func(timeout, repeat, cancel, file, loops):
                for loop in range(loops):
                    faulthandler.dump_traceback_later(timeout, repeat=repeat, file=file)
                    if cancel:
                        faulthandler.cancel_dump_traceback_later()
                    time.sleep(timeout * 5)
                    faulthandler.cancel_dump_traceback_later()

            if filename:
                file = open(filename, "wb")
            elif fd is not None:
                file = sys.stderr.fileno()
            else:
                file = None
            func(timeout, repeat, cancel, file, loops)
            if filename:
                file.close()
            )�timeout�repeat�cancel�loopsrr6rrkzATimeout \(%s\)!\nThread 0x[0-9a-f]+ \(most recent call first\):\n��)rr$r)
�str�datetimeZ	timedelta�TIMEOUTrwr<rFrrGr-)
r4r�r�r�rr6Ztimeout_strr5r�r:�countrrrrr�check_dump_traceback_laterOs,�
z,FaultHandlerTests.check_dump_traceback_latercCr�r�r�rVrrr�test_dump_traceback_later�r�z+FaultHandlerTests.test_dump_traceback_latercC�|jdd�dS)NT)r�r�rVrrr� test_dump_traceback_later_repeat��z2FaultHandlerTests.test_dump_traceback_later_repeatcCr�)NT)r�r�rVrrr� test_dump_traceback_later_cancel�r�z2FaultHandlerTests.test_dump_traceback_later_cancelcCr�r�)rr�ryrrr�test_dump_traceback_later_file�r�z0FaultHandlerTests.test_dump_traceback_later_filecCr�r�)rr}r�r~r�rrr�test_dump_traceback_later_fd�r�z.FaultHandlerTests.test_dump_traceback_later_fdcCr�)Nrk)r�r�rVrrr�test_dump_traceback_later_twice�r�z1FaultHandlerTests.test_dump_traceback_later_twice�registerzneed faulthandler.registercCs�	tj}d}|j||||||d�}|�||�\}}	d�|�}|s4|r%d}
nd}
tdd|
�}
|�||
�n|�|d�|rD|�|	d	�dS|�|	d	�dS)
Naz
            import faulthandler
            import os
            import signal
            import sys

            all_threads = {all_threads}
            signum = {signum:d}
            unregister = {unregister}
            chain = {chain}
            filename = {filename!r}
            fd = {fd}

            def func(signum):
                os.kill(os.getpid(), signum)

            def handler(signum, frame):
                handler.called = True
            handler.called = False

            if filename:
                file = open(filename, "wb")
            elif fd is not None:
                file = sys.stderr.fileno()
            else:
                file = None
            if chain:
                signal.signal(signum, handler)
            faulthandler.register(signum, file=file,
                                  all_threads=all_threads, chain={chain})
            if unregister:
                faulthandler.unregister(signum)
            func(signum)
            if chain and not handler.called:
                if file is not None:
                    output = file
                else:
                    output = sys.stderr
                print("Error: signal handler not called!", file=output)
                exitcode = 1
            else:
                exitcode = 0
            if filename:
                file.close()
            sys.exit(exitcode)
            )r=�signum�
unregister�chainrr6rz8Current thread 0x[0-9a-f]+ \(most recent call first\):\nz#Stack \(most recent call first\):\nr�� r$r)	�signal�SIGUSR1rwr<rFrrGr-rH)r4rr=r�r�r6r�r5r�r:rrrr�check_register�s..�
z FaultHandlerTests.check_registercCr�r�r�rVrrr�
test_register�r�zFaultHandlerTests.test_registercCr�)NT)r�r�rVrrr�test_unregister�r�z!FaultHandlerTests.test_unregistercCr�r�)rr�ryrrr�test_register_file�r�z$FaultHandlerTests.test_register_filecCr�r�)rr}r�r~r�rrr�test_register_fdr�z"FaultHandlerTests.test_register_fdcCr�)NTr�r�rVrrr�test_register_threadsr�z'FaultHandlerTests.test_register_threadscCr�)NT)r�r�rVrrr�test_register_chain	r�z%FaultHandlerTests.test_register_chainccsf�tj}z*dt_|�t��}dVWd�n1swY|�t|j�d�W|t_dS|t_w)Nzsys.stderr is None)r�r9ZassertRaises�RuntimeErrorr-r��	exception)r4r9�cmrrr�check_stderr_nones��z#FaultHandlerTests.check_stderr_nonecCs�|���t��Wd�n1swY|���t��Wd�n1s+wY|���
t�d�Wd�n1sDwYttd�rk|���t�tj�Wd�dS1sdwYdSdS)Ng����MbP?r�)	r�r�r�Zdump_tracebackZdump_traceback_later�hasattrr�r�r�rVrrr�test_stderr_Nones

�

�
�

"��z"FaultHandlerTests.test_stderr_Nonezspecific to WindowscCs(dD]\}}|�d|�d�d|�qdS)N))ZEXCEPTION_ACCESS_VIOLATIONrT)ZEXCEPTION_INT_DIVIDE_BY_ZEROzint divide by zero)ZEXCEPTION_STACK_OVERFLOWzstack overflowz�
                import faulthandler
                faulthandler.enable()
                faulthandler._raise_exception(faulthandler._rjrS)rR)r4�excr�rrr�test_raise_exception$s���z&FaultHandlerTests.test_raise_exceptioncCsHdD]}d|�d�}t|�}|�|�\}}|�|g�|�||�qdS)N)lcs�@lRC�@z�
                    import faulthandler
                    faulthandler.enable()
                    faulthandler._raise_exception(z)
                    �rr<r-)r4Zexc_coder5r8r:rrr�test_ignore_exception3s��z'FaultHandlerTests.test_ignore_exceptioncCsFdD]}|�d|d�d��\}}|�|g�|�|||d@f�qdS)N)ri�xV4i@i@ipi���z{
                import faulthandler
                faulthandler.enable()
                faulthandler._raise_exception(0xr�rji����)r<r-r�)r4r�r8r:rrr�test_raise_nonfatal_exceptionCs�
��z/FaultHandlerTests.test_raise_nonfatal_exceptioncC�2td�}|�|�\}}|�|g�|�|d�dS)Nz�
            import faulthandler
            faulthandler.enable()
            faulthandler.disable()
            code = faulthandler._EXCEPTION_ACCESS_VIOLATION
            faulthandler._raise_exception(code)
        lr��r4r5r8r:rrr� test_disable_windows_exc_handler_sz2FaultHandlerTests.test_disable_windows_exc_handlercCr�)Nz`
            import faulthandler
            faulthandler.cancel_dump_traceback_later()
        rr�r�rrr�.test_cancel_later_without_dump_traceback_laterlsz@FaultHandlerTests.test_cancel_later_without_dump_traceback_later)NNr)FFr
)FFFFN)H�__name__�
__module__�__qualname__r<rKrQrRrrr��platform�
startswithrWrr[r_r`rarc�	_testcapiZ
skipUnlessr�r�rfrirmrlrqr�rsrtrrzrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�rUr�r�r�r�r�rrrrr0s�
"�
'�

	
#	�
	��

	�



.�
;�>�
��Q�










r�__main__)r
) �
contextlibrr�r�r0r�r�r�r�rrZtest.supportrrrrrr�textwraprr�ImportErrorr�r�rUrrrZTestCaserr��mainrrrr�<module>sH�

	
N�