Mensagem de erro falsa


18

Escreva um programa que imprima a mensagem de erro de sintaxe do compilador ou intérprete. A mensagem de erro deve ser enganosa, para que os mantenedores de código levem dias para descobrir que o erro foi falsificado, ou seja, você deve ofuscar (e ocultar sua intenção). Além disso, o erro deve ser o mais exato possível e deve fazer referência ao código corretamente.

Para idiomas cumpridos, suponha que seu mantenedor de código faça compile program.p && ./programna linha de comando para compilar E executar o programa, ou seja, ele não pode distinguir se a saída vem do compilador ou do próprio programa. Além disso, suponha que seu mantenedor de código ative as mensagens de erro de sintaxe.

Para referência, aqui está um exemplo que eu fiz: https://gist.github.com/359604

A DATAseção codifica a sequência de mensagens de erro e o hash %abcdefé a tabela de decodificação. O erro imprimiu referências às barras invertidas, o que faz com que um mantenedor de código tente contar as barras invertidas.

As inscrições serão classificadas por:

  • O código tem uma intenção enganosamente óbvia /6
  • O código reproduz o erro corretamente /16 (seu ponto começa com 16 e divide pelos fatores correspondentes para cada imprecisão)
    • Capitalização correta: 4
    • Número correto da linha e número da coluna: 4
    • Redação correta: 2 para cada palavra incorreta
  • O número da linha referenciado engana o mantenedor do código /3

Por exemplo,

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

obtém 8 (16/2) de correção por falta "inesperada" antes de "token", um interpretador Python normal exibe

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

Se o seu ponto "código reproduz erro corretamente" estiver abaixo de 1, sua entrada será desqualificada.

Em caso de empate, colocarei fatores adicionais de classificação.


Uh ... Fechei a recente pergunta de obscurecimento de Sparky por não ser objetiva, e agora temos a coisa secreta de Peter e isso (que eu admito faz um valente esforço para obter objetividade). Em vez de ficar sentado em tudo, quer ou não, ou com base no meu preconceito pessoal, vou abrir outro tópico sobre a meta, ou talvez ressuscitar uma antiga. Esteja ciente de que Jeff parece pensar que "objetivo" é um requisito.
precisa saber é o seguinte


Uma solução pode ser o concurso de popularidade . Bem, um critério objetivo de ganhar.
Johannes Kuhn

Respostas:


35

Pitão

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

Este é um programa que deve colocar um nome de arquivo na linha de comando, avaliar a primeira linha e imprimir o resultado. Possui 2 bugs. O principal erro é que ele não deve ser usado sys.argv[1], sys.argv[0]por isso acaba avaliando o próprio programa, não o conteúdo do arquivo nomeado pelo primeiro argumento. O segundo erro é que o argumento para print_excimprimir apenas o quadro mais profundo da pilha, oculta o fato de que o erro ocorreu dentro do eval. Como resultado, você recebe um erro como este:

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

Parece muito com a primeira linha do programa com um erro de sintaxe. Não é tão correto quanto o arquivo <string>, não fake_error.py, mas, caso contrário, é indistinguível do caso em que, por exemplo, você escreve importerrado.

Ambos os erros são um tanto "disfarçados", pois podem ser acidentais.


Isso é brilhante
Cruncher

Brilhante. Isso me lembra uma outra singularidade do Python. A execução raiseno Python 2, mas no IDLE, o IDE padrão do python, causa um erro interno na impressão de bobagens sobre filas. 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
O Matt

10

Me lembra uma piada prática.

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

9

BrainF ***

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

Não consigo encontrar o compilador específico que usei antes, mas garanto que essa é a mensagem de erro exata.


5
Para aqueles de vocês sem compiladores BF que estão curiosos, Imprime, "F *** Erro de sintaxe: fechar] Token apareceu diante de uma abertura [simbólico!"
Peter Olson

1
É bom ver você no CG, Minitech:)
Bojangles

Lol, o histórico de revisões é divertido: P
Maçaneta da porta

1

Java

throw new Error();  

Não sabia se você pretendia realmente lançar uma exceção não tratada (como no exemplo) ou simular uma mensagem de erro. Se for esse o caso, isso deve funcionar:

C

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

(isso pressupõe que stdio.h#included)


Opa, basta ler o seu post em profundidade sobre a parte da ofuscação. eu adicionaria um ofuscador a ele, mas atualmente não tenho acesso a nenhum ides. [:(] quando eu chegar em um, eu iremos publicar uma versão ofuscada (quem sabe, talvez no mesmo outro lang;)
Nate Koppenhaver

0

Idioma do Game Maker

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

0

ACTIONSCRIPT 3

trace("TypeError: Error #1009: Cannot access a property or method of a null object reference.");
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.