Saya ingin melihat siapa yang dapat membuat Python mengalami kerusakan fatal dengan kode paling kreatif. Ini berarti bahwa ketika program berjalan, Windows misalnya, akan mengambil alih dan muncul dengan sesuatu seperti "IDLE telah berhenti bekerja", atau Linux akan melakukan apa pun yang dilakukan Linux ketika sebuah program crash.
Aturan:
Ini harus dibuat dengan Python 2.7 atau lebih tinggi (Jadi bug lama tidak dieksploitasi yang telah diperbaiki di versi Python yang akan datang).
Definisi "crash" adalah "membuat IDLE atau Python keluar dengan cara yang tidak disengaja." Ini tidak berarti "membuat IDLE atau Python berhenti dan berikan traceback". Ini juga berarti keluar, sys.quit, batalkan dll bukan jawaban yang valid. Misalnya, ini tidak akan diterima:
import sys try: print c # Crashes Here, as c is not defined. except NameError, SyntaxError: print "Oh No!" sys.exit()
Membuat Python berhenti merespons tidak diterima.
Kode harus dijelaskan tentang apa yang terjadi pada crash. Tautan ke laporan bug baik-baik saja.
Jawaban yang paling banyak dipilih setelah 10 hari menang! Mulai!!
EDIT: Boleh saya perjelas bahwa tujuannya bukan untuk membuat Python berhenti menjalankan program dengan traceback. Tujuannya adalah membuat Python benar-benar macet atau berhenti bekerja. Ini berarti bahwa jika tugas ini berhasil diselesaikan, Windows akan memberikan ini (Saya tidak menabrak Word di sini, itu hanya contoh apa yang harus terjadi untuk program yang berbeda):
atau ini:
sumber
prnt
pertanyaan saya disengaja.Jawaban:
Seharusnya kontes kode-golf;) - Saya kira kreativitas adalah pernyataan yang dibuat oleh kode: "Saya tidak tahu apa yang terjadi di sini ..."
Salin dan tempel karakter berikut di IDLE yang berjalan di Windows:
Kecelakaan itu ada hubungannya dengan karakter yang dikodekan sebagai UTF-16 oleh Windows dan konversi yang gagal menjadi karakter UTF-8 oleh IDLE ...
Edit: python bug # 13153
sumber
𐒢
, bahkan sebelum Anda dapat menjalankannya.ctypes
penyalahgunaan:Ini melemparkan 1 ke alamat dan referensi itu. Pada sistem waras mana pun (yaitu yang 0x00000001 bukan alamat yang dipetakan), ini akan segfault secara instan.
sumber
ctypes
di Windows dengan cara lain, tetapi mungkin tidak dalam beberapa karakter.60
Bukan ide saya sendiri. Disalin dari Python Wiki di sini .
Ini menyebabkan rekursi tak terbatas, dan tidak dihentikan oleh penerjemah karena kami mengubah batas rekursi.
sumber
signal
penyalahgunaan (bukan Windows):Pada kebanyakan sistem (di mana SIGILL = 4) ini akan membunuh Python dengan kesalahan "instruksi ilegal".
Atau Anda dapat mematikan program menggunakan jam alarm pembunuh :
Setelah satu detik, Python mati dengan pesan samar "Jam alarm".
sumber
Dalam Python 3.3:
Dalam Python 2.7 objek kode sedikit berbeda:
Ya, Anda dapat meneruskan semua sampah lama ke juru kode byte dan menjalankannya ( masalah Python # 17187 ).
sumber
exec type((lambda:0).func_code)(0,1,0,0,'Q',(),(),(),'','',0,'')
.__code__
.Iterator rekursif menggunakan tumpukan C, bukan tumpukan Python ( edisi # 14010 dan edisi # 14507 ):
sumber
Salah satu cara mudah untuk menghentikan juru bahasa adalah dengan menjebaknya agar tidak melakukan deallocating.
Sebagai bonus, inilah cara cerdas untuk memisahkan Python 2:
Apa yang sebenarnya dilakukan ini dibiarkan sebagai latihan bagi pembaca.
sumber
Seseorang mengira mereka dapat mencegah
FlagsType
objek baru dibuat oleh pengaturanFlagsType.tp_new = NULL
, tetapi mereka lupa untuk menghapus metode ( masalah # 13204 ):(
sys.version_info
memiliki bug yang sama.)sumber
Penggunaan modul
alloca
inctypes
( edisi # 13096 ):sumber
Salah satu cara yang mungkin menabrak Python saya dengan
MemoryError
:sumber
MemoryError
. Itu perlu ditutup oleh OS.