Mensaje de error falso

18

Escriba un programa que imprima el mensaje de error de sintaxis del compilador o intérprete. El mensaje de error debe ser engañoso para que los encargados del mantenimiento del código tarden días en descubrir que el error fue falso, es decir, debe ofuscar (y ocultar su intención). Además, el error debe ser lo más exacto posible y debe hacer referencia al código correctamente.

Para los lenguajes cumplidos, suponga que su mantenedor de código hará compile program.p && ./programen la línea de comandos para compilar Y ejecutar el programa, eso significa que no puede distinguir si la salida proviene del compilador o del programa en sí. Además, suponga que su mantenedor de código activará los mensajes de error de sintaxis.

Como referencia, aquí hay un ejemplo que hice: https://gist.github.com/359604

La DATAsección codifica la cadena de mensaje de error, y el hash %abcdefes la tabla de decodificación. El error imprimió referencias a las barras diagonales inversas, lo que hace que un mantenedor de código intente contar las barras diagonales inversas.

Las entradas serán calificadas por:

  • El código tiene una intención engañosamente obvia /6
  • El código reproduce el error correctamente /16 (su punto comienza con 16 y se divide por los factores correspondientes para cada imprecisión)
    • Capitalización correcta: 4
    • Número correcto de línea y número de columna: 4
    • Redacción correcta: 2 por cada palabra incorrecta
  • El número de línea al que se hace referencia confunde al responsable del código /3

Por ejemplo,

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

obtiene 8 (16/2) en la corrección por faltar "inesperado" antes de "token", muestra un intérprete de Python normal

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

Si su punto "el código reproduce el error correctamente" es menor a 1, su entrada será descalificada.

En caso de empate, pondré factores de calificación adicionales.

Ming-Tang
fuente
Uh ... Cerré la reciente pregunta de ofuscación de Sparky por no ser objetivo, y ahora tenemos la cosa oculta de Peter y esto (lo que admito hace un esfuerzo valiente para obtener objetividad). En lugar de simplemente sentarme en todo lo que quiera o elegir según mi prejuicio personal, voy a abrir otro tema sobre meta, o tal vez resucitar uno viejo. Tenga en cuenta que Jeff parece pensar que "objetivo" es un requisito.
dmckee
Una solución puede ser el concurso de popularidad . Bueno, un criterio ganador objetivo.
Johannes Kuhn

Respuestas:

35

Pitón

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

Este es un programa que debe tomar un nombre de archivo en la línea de comando, evaluar la primera línea e imprimir el resultado. Tiene 2 errores. El error principal es que debe usar sys.argv[1], no sys.argv[0], por lo que termina evaluando el programa en sí, no el contenido del archivo nombrado por el primer argumento. El segundo error es que el argumento print_exchace que imprima solo el cuadro más profundo de la pila, ocultando el hecho de que el error tuvo lugar dentro del eval. Como resultado, obtienes un error como este:

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

Esto se parece mucho a que la primera línea del programa tiene un error de sintaxis. No es del todo correcto , pero el archivo <string>no fake_error.pyse puede distinguir del caso en el que, por ejemplo, se escribe importmal.

Ambos errores son algo "poco claros" ya que pueden ser accidentales.

Keith Randall
fuente
Esto es brillante
Cruncher
Brillante. Esto me recuerda a otra rareza de Python. Al ejecutarse raiseen Python 2, pero en IDLE, el IDE predeterminado de Python, se produce un error interno al imprimir galimatías sobre colas. 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
El Matt
10

Me recuerda una broma práctica.

$ 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
fuente
9

BrainF ***

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

No puedo encontrar el compilador particular que usé antes, pero le aseguro que ese es el mensaje de error exacto.

Ry-
fuente
55
Para aquellos de ustedes sin compiladores BF que tienen curiosidad, esto imprime, "F ***! Error de sintaxis: cierre] token apareció antes de una apertura [token"
Peter Olson
1
Es bueno verte en CG, Minitech:)
Bojangles
Lol, el historial de revisiones es divertido: P
Pomo de la puerta
1

Java

throw new Error();  

No sabía si se refería a lanzar una excepción no controlada (como en ese ejemplo) o simular un mensaje de error. Si ese es el caso, esto debería funcionar:

C

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

(esto supone que stdio.hestá # incluido)

Nate Koppenhaver
fuente
Vaya, solo lee tu publicación en profundidad sobre la parte de ofuscación. Le agregaría un ofuscador, pero actualmente no tengo acceso a ninguna idea. [:(] cuando obtenga uno, definitivamente publicaré una versión ofuscada (quién sabe, tal vez incluso en otro idioma;)
Nate Koppenhaver
0

Game Maker Language

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

ACTIONSCRIPT 3

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