Faux message d'erreur

18

Écrivez un programme qui affiche le message d'erreur de syntaxe du compilateur ou de l'interpréteur. Le message d'erreur doit être trompeur afin que les responsables du code mettent des jours à découvrir que l'erreur a été truquée, cela signifie que vous devez masquer (et masquer votre intention). En outre, l'erreur doit être aussi exacte que possible et doit faire référence au code correctement.

Pour les langages conformes, supposez que votre responsable de code fera compile program.p && ./programsur la ligne de commande pour compiler ET exécuter le programme, cela signifie qu'il ne peut pas distinguer si la sortie provient du compilateur ou du programme lui-même. Supposez également que votre responsable de code active les messages d'erreur de syntaxe.

Pour référence, voici un exemple que j'ai fait: https://gist.github.com/359604

La DATAsection code la chaîne de message d'erreur et le hachage %abcdefest la table de décodage. L'erreur a imprimé des références aux barres obliques inverses, ce qui oblige un responsable du code à essayer de compter les barres obliques inverses.

Les inscriptions seront classées par:

  • Le code a une intention trompeuse évidente /6
  • Le code reproduit correctement l'erreur /16 (votre point commence par 16, et divisez par les facteurs correspondants pour chaque inexactitude)
    • Capitalisation correcte: 4
    • Numéro de ligne et numéro de colonne corrects: 4
    • Libellé correct: 2 pour chaque mot incorrect
  • Le numéro de ligne référencé induit en erreur le responsable du code /3

Par exemple,

./pythontest1.py: line 7: syntax error near token `('
./pythontest1.py: line 7: `   x=input("Enter a number:") #Number input'

obtient 8 (16/2) sur l'exactitude pour "inattendu" manquant avant "jeton", un interpréteur Python normal affiche

./pythontest1.py: line 7: syntax error near unexpected token `('
./pythontest1.py: line 7: `   x=input("Enter a number:") #Number input'

Si votre point "code reproduit l'erreur correctement" est inférieur à 1, votre inscription est disqualifiée.

En cas d'égalité, je mettrai en place des facteurs de classement supplémentaires.

Ming-Tang
la source
Euh ... J'ai fermé la récente question d'obscurcissement de Sparky parce qu'elle n'était pas objective, et maintenant nous avons le truc sournois de Peter et ceci (qui j'admets fait un vaillant effort pour obtenir l'objectivité). Plutôt que de m'asseoir sur tout ce que je veux ou de choisir en fonction de mes préjugés personnels, je vais ouvrir un autre sujet sur les méta, ou peut-être ressusciter un ancien. Sachez que Jeff semble penser que "l'objectif" est une exigence.
dmckee
Une solution peut être le concours de popularité . Eh bien, un critère de gain objectif.
Johannes Kuhn

Réponses:

35

Python

import sys,traceback
try:
  f=open(sys.argv[0])
  print eval(f.readline())
except Exception, e:
  traceback.print_exc(0)

Il s'agit d'un programme qui doit prendre un nom de fichier sur la ligne de commande, évaluer la première ligne et imprimer le résultat. Il a 2 bugs. Le bogue majeur est qu'il ne doit pas utiliser sys.argv[1], sys.argv[0]donc il finit par évaluer le programme lui-même, pas le contenu du fichier nommé par le premier argument. Le deuxième bogue est que l'argument pour print_excqu'il imprime uniquement le cadre le plus profond de la pile, cachant le fait que l'erreur s'est produite à l'intérieur du eval. En conséquence, vous obtenez une erreur comme celle-ci:

$ python fake_error.py twelve 
Traceback (most recent call last):
  File "<string>", line 1
     import sys,traceback
          ^
 SyntaxError: invalid syntax

Cela ressemble beaucoup à la première ligne du programme a une erreur de syntaxe. Ce n'est pas tout à fait correct car le fichier l'est <string>, fake_error.pymais sinon, il est impossible de le distinguer du cas où, par exemple, vous vous importtrompez.

Les deux erreurs sont quelque peu "sournoises" en ce qu'elles peuvent être accidentelles.

Keith Randall
la source
C'est génial
Cruncher
Brillant. Cela me rappelle une autre bizarrerie de Python. L'exécution raiseen Python 2, mais en IDLE, l'EDI par défaut de python, provoque une erreur interne d'impression de charabia sur les files d'attente. Traceback (most recent call last): ** IDLE Internal Exception: File "2.7/lib/python2.7/idlelib/run.py", line 325, in runcode exec code in self.locals File "2.7/lib/python2.7/idlelib/run.py", line 111, in main seq, request = rpc.request_queue.get(block=True, timeout=0.05) File "2.7/lib/python2.7/Queue.py", line 176, in get raise Empty
Le Matt
10

Me rappelle une blague pratique.

$ ls -l
$ cat readme.txt
cat: readme.txt: No such file or directory
$ echo 'cat: readme.txt: No such file or directory' >readme.txt
$ ls -l
total 8
-rw-r--r--  1 florian  staff  43 Mar 16 09:52 readme.txt
$ cat readme.txt
cat: readme.txt: No such file or directory
$ 
Florian F
la source
9

BrainF ***

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>++++++++++[<+++++++++++<++++++++++<++++++++++<+++++++++++<+++++++++++<+++<+++++++++<+++<++++++++++<+++++++++++<++++++++++<+++++++++++<++++++++++<+++++++++++<+++++++++++<+++<+++++++++++<+++++++++<+++<++++++++++<+++++++++++<+++++++++++<++++++++++<++++++++++<+++++++++<+++<++++++++++<++++++++++<+++++++++++<+++++++++<++++++++++<+++++++++++<+++++++++++<+++++++++<+++<+++++++++++<++++++++++<++++++++++<+++++++++++<+++++++++++<+++<+++++++++<+++<++++++++++<+++++++++++<++++++++++<+++++++++++<+++++++++++<++++++++++<+++++++++<+++<+++++<+++++++++++<+++++++++++<+++++++++++<+++++++++++<++++++++++<+++<++++++++++++<+++++++++<+++++++++++<+++++++++++<++++++++++++<++++++++<+++<+++<++++<++++<++++<+++++++>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.>++.>++.>++.>+++.>++.>+++.>+.>.>++++++.>+++++++.>.>++.>+.>++++.>++++.>+.>++++.>++++++++.>++.>+++++++++.>++++++++.>+.>+++++.>+++++.>.>+++.>++.>+++.>++.>++++++.>+.>+++++++.>+.>.>++.>+++++++.>++.>++.>+.>+++++++.>++++.>+.>.>++.>++++++++.>+.>++.>+.>++++.>+.>++.>+++++++.>.>++.>+.>++.>+.>.>+++++.>.>+++.>++.>+.>++.>++++++.>+.>+++++++.>+.>.>

Je ne trouve pas le compilateur particulier que j'ai utilisé auparavant, mais je vous assure que c'est le message d'erreur exact.

Ry-
la source
5
Pour ceux d' entre vous sans compilateurs BF qui sont curieux, ce imprime, « F *** Erreur de syntaxe: fermeture] jeton a comparu devant une ouverture [token! »
Peter Olson
1
Ravi de vous voir sur CG, Minitech:)
Bojangles
Lol, l'historique des révisions est amusant: P
Poignée de porte
1

Java

throw new Error();  

Je ne savais pas si vous vouliez réellement lancer une exception non gérée (comme dans cet exemple) ou simuler un message d'erreur. Si tel est le cas, cela devrait fonctionner:

C

printf("FATAL ERROR #0xBAD\nProgram execution stopped\n\nIn line 123, character 321, of file 'buggy.c'");

(cela suppose que stdio.hc'est #inclus)

Nate Koppenhaver
la source
oups, lisez simplement votre article en profondeur sur la partie obscurcissement. j'y ajouterais un obfuscateur, mais je n'ai actuellement accès à aucun ides. [:(] quand j'en aurai un, je posterai définitivement une version obscurcie (qui sait, peut-être même dans une autre langue;)
Nate Koppenhaver
0

Langue de Game Maker

show_error("Error: Undefined variable a##Line 1, character 4, of event Create in obj_controller",0)
Timtech
la source
0

ACTIONSCRIPT 3

trace("TypeError: Error #1009: Cannot access a property or method of a null object reference.");
wuiyang
la source