Le bureau est calme. Trop calme. Les projets avancent, vos clients sont heureux et – pire ! – vos collègues sourient.
Il est temps de changer tout ça.
Choisissez une victime qui est partie boire un café sans locker sa session (quitte à faire un exemple, autant choisir un être faible), et créez un petit fichier dans le chemin “~/au/fin/fond/de/ses/reps/de/travail/evil.py”.
Ensuite mettez ça dedans :
import random import functools # on garde une référence à l'ancienne fonction # pour éviter une récursion infinie old_range = range # on lui créé un remplaçant avec les mêmes métatadas @functools.wraps(range) def random_range(start, stop=None, step=1): # on mimic la signature un peu originale de range() if not stop: stop = start start = 0 # et on fait un range avec un tout petit peu de piment return old_range(start, stop + random.randint(-1, 1), step) # on range (lol) tout comme si de rien était __builtins__.range = random_range |
Et il n’y a plus qu’à faire pointer la variable d’environnement PYTHONSTARTUP
dessus. Par exemple sous Unix, dans son .bashrc
:
export PYTHONSTARTUP=~/au/fin/fon/de/ses/reps/de/travail/evil.py
Et maintenant, à chaque fois qu’il ou elle lancera son shell:
>>> range <function builtins.range> >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8] |
*Zoom final sur rire diabolique*
Tu viens d’enchanter mon petit dej (et sans doute de faire raler une dizaine de personne avant la fin de ce jour).
Ah ah excellent !!! C’est trop fort, je retiens de pouvoir modifier une fonction built-in comme ça, c’est top !
Génial, je ne savais pas que l’on pouvait modifier les fonctions built-in. La question que je me pose, c’est est-ce qu’il y a moyen de savoir que la fonction a été modifiée ?
Il y a des différences subtiles, par exemple sous Python 3, avant le remplacement:
Après remplacement:
Mais faut vraiment être super observateur…
Dernière étape:
– attendre que la victime se ridiculise en postant un billet sur “bugs.python.org” pour dire qu’elle a trouvé un bug sur la fonction range
Là où ce serait très vicieux, ce serait de faire la modif genre une fois sur cent.
OMG tu es le diable en personne !