Je voudrais voir qui peut faire en sorte que Python tombe en panne fatale avec le code le plus créatif. Cela signifie que lorsque le programme s'exécute, Windows par exemple, prendra le relais et affichera quelque chose comme «IDLE a cessé de fonctionner», ou Linux fera tout ce que Linux fait lorsqu'un programme se bloque.
Règles:
Cela doit être fait en Python 2.7 ou supérieur (donc les anciens bogues ne sont pas exploités qui ont été corrigés dans les futures versions de Python).
La définition de "plantage" est "faire sortir IDLE ou Python d'une manière non intentionnelle". Cela ne signifie pas "arrêtez IDLE ou Python et donnez une trace". Cela signifie également que exit, sys.quit, abort, etc. ne sont pas des réponses valides. Par exemple, cela ne sera pas accepté:
import sys try: print c # Crashes Here, as c is not defined. except NameError, SyntaxError: print "Oh No!" sys.exit()
Faire arrêter Python de répondre n'est pas accepté.
Le code doit être expliqué sur ce qu'il fait pour planter. Un lien vers un rapport de bogue est très bien.
La réponse la plus votée après 10 jours gagne! Commencer!!
EDIT: Puis-je préciser que l'objectif n'est pas de faire en sorte que Python arrête juste d'exécuter le programme avec une traceback. L'objectif est de faire complètement planter Python ou de cesser de fonctionner. Cela signifie que si cette tâche est accomplie avec succès, Windows donnerait ceci (je ne plante pas Word ici, c'est juste un exemple de ce qui devrait arriver pour un autre programme):
ou ca:
la source
prnt
question est intentionnelle.Réponses:
Cela aurait dû être un concours de golf de code;) - Je suppose que la créativité est la déclaration du code: "Je ne sais tout simplement pas ce qui se passe ici ..."
Copiez et collez le caractère suivant dans IDLE exécuté sur Windows:
Le crash a quelque chose à voir avec le caractère encodé en UTF-16 par Windows et la conversion infructueuse en caractère UTF-8 par IDLE ...
Edit: bug python # 13153
la source
𐒢
, avant même de pouvoir l'exécuter.ctypes
abuser de:Cela convertit 1 en une adresse et la déréférence. Sur n'importe quel système sain (c.-à-d. Celui sur lequel 0x00000001 n'est pas une adresse mappée), cela se produira instantanément.
la source
ctypes
Windows d'une autre manière, mais peut-être pas avec si peu de caractères.60
Pas ma propre idée. Copié du Wiki Python ici .
Cela provoque une récursion infinie et n'est pas arrêté par l'interpréteur car nous avons modifié la limite de récursivité.
la source
signal
abus (non-Windows uniquement):Sur la plupart des systèmes (sur lesquels SIGILL = 4), cela tuera Python avec une erreur "instruction illégale".
Ou vous pouvez tuer le programme en utilisant le réveil tueur :
Après une seconde, Python meurt avec le message cryptique "Réveil".
la source
En Python 3.3:
En Python 2.7, les objets de code sont légèrement différents:
Oui, vous pouvez transmettre n'importe quel vieux déchet à l'interpréteur de code d'octet et il l'exécute ( problème Python # 17187 ).
la source
exec type((lambda:0).func_code)(0,1,0,0,'Q',(),(),(),'','',0,'')
.__code__
.Les itérateurs récursifs utilisent la pile C, pas la pile Python ( problème # 14010 et problème # 14507 ):
la source
Un moyen simple de planter l'interpréteur est de le tromper en désallouant Aucun:
En bonus, voici un moyen intelligent de segfault Python 2:
Ce que cela fait exactement est laissé au lecteur.
la source
Quelqu'un a pensé qu'il pourrait empêcher la création de nouveaux
FlagsType
objets en définissantFlagsType.tp_new = NULL
, mais il a oublié de supprimer la méthode ( problème # 13204 ):(
sys.version_info
a le même bug.)la source
Utilisation du module
alloca
inctypes
( problème # 13096 ):la source
Une façon possible de bloquer mon Python avec
MemoryError
:la source
MemoryError
. Il doit être fermé par le système d'exploitation.