Insanidade: fazer a mesma coisa repetidamente e esperar resultados diferentes.
Escreva um programa que apenas lança uma exceção (erro de tempo de execução) toda vez que é executado. O desafio é ter a probabilidade de produzir mais de uma falha, sem chamar as exceções diretamente (sem throw
instruções) e não usar funções internas ou aleatórias de contagem de ticks da CPU.
- 10 pontos para cada erro possível.
- 25 pontos de bônus se o erro / falha ocorrer em outro processo ou no sistema.
Regras
- As respostas devem indicar quais erros são possíveis e como eles são gerados.
- Não é possível usar o gerador de números aleatórios do sistema (interno), a menos que seja propagado com o mesmo número sempre que o programa for executado.
- Não é possível usar o número de tiques ou ciclos da CPU, a menos que sejam contados relativamente ao início do encadeamento principal do programa.
- Multithreading é permitido (se não for fornecido).
Editar 1
A geração de GUID se enquadra no gerador de números aleatórios interno. A geração de GUID "doméstico" personalizada é permitida.
É permitido acessar o sistema de arquivos para E / S de arquivos, exceto quando feito para ignorar as regras (leia um arquivo de bits aleatórios ou carimbo de data e hora).
Editar 2
- Chamar
abort()
ouassert()
violar o espírito do desafio de criar software insano e, portanto, não serão concedidos 10 pontos por esse modo de falha.
Boa sorte!
code-challenge
ja72
fonte
fonte
Respostas:
Java, 400
Java é abençoado (?) Com muitas
Exception
s eError
s. Existem muitosException
s que são específicos para a operação de uma única classe. Como exemplo de um dos casos mais extremos, existem mais de 10Exception
s (todos são subclasses deIllegalFormatException
) dedicados apenas àFormatter
classe, e levei um tempo para fazer o código lançar (quase) todos eles.Minha resposta atual apresenta 40
Exception
s / s diferentesError
, e eles são executados aleatoriamente, dependendo do módulo deSystem.nanoTime()
algum número inteiro.O método acima deve ser permitido, uma vez que se enquadra no caso "3. Não é possível usar o número de ciclos de tiques ou de CPU, a menos que sejam contados relativamente ao início do segmento do programa principal" .
Instrução de compilação
O JRE / JDK ou OpenJDK da Oracle é altamente recomendado para executar o código. Caso contrário, algumas exceções podem não ser lançadas, pois algumas delas se baseiam nos detalhes internos da implementação de referência e eu não tenho um retorno confiável.
O código abaixo é compilado com êxito
javac 1.7.0_11
e produz todas as exceções ativadasjava 1.7.0_51
.Para executar esse código, copie e cole o código abaixo em um editor compatível com Unicode (por exemplo, Notepad ++), salve-o em UTF-16 (Big-Endian ou Little-Endian não importa, desde que a BOM seja gravada) .
Mude o diretório de trabalho (
cd
) para onde o código fonte é salvo ( isso é importante ).Compile o código com o seguinte comando:
E execute o código:
Não há nada destrutivo no meu código, pois também quero testá-lo no meu computador. O código mais "perigoso" é excluir o
ToBeRemoved.class
arquivo na pasta atual. Fora isso, o resto não toca no sistema de arquivos ou na rede.Lista de exceções e erros
Em ordem, conforme declarado na instrução switch-case. Existem 37 se
Exception
3Error
s no total.Pattern
, com caso chato como backup)Pattern
, com caso chato como backup)Pattern
, com caso chato como backup)Pattern
, com caso chato como backup)$
inPattern
pode corresponder antes do final da linha final)Matcher
sem executar uma correspondência)split(String regex)
)Exception
durante a inicialização de uma classe)java.nio.*
espec�icoException
)java.nio.*
espec�icoException
)java.nio.*
espec�icoException
)java.util.Stack
espec�icoException
)Charset.isSupported(String name)
retorna false ou throwsException
)java.util.Scanner
-específicoException
)java.util.Formatter
específicosException
)SecurityManager
é utilizável)Class
classe)Exception
não pode ser lançado na implementação da Oracle, sem backup)fonte
nanoTime
e pelo trabalho realizado com esta resposta.Java
é-1 % 40 == -1
ou-1 % 40 = 39
?-1
. Você recebeu um número negativo? (Editado para garantir que tudo não seja negativo).C (Windows 7) - 80 + 25 = 105 pontos
O seguinte programa depende do ASLR
A exceção a seguir ocorreria aleatoriamente
Vector Subscript Out of Range
)Infinite Recursion
Dividing by Zero
Allocating Huge Memory
By Accessing NULL
By overwriting stack
fonte
<iostream>
necessário?assert()
é equivalente a lançar uma exceção.abort
eassert
._crtMessageBoxW
e finge chamarraise(SIGABRT)
, que acaba via #exit(3)
Perl
Abaixo está um trecho de perl que morre com qualquer número de mensagens em tempo de compilação do perl. Ele usa um gerador de números pseudo-aleatórios de fabricação própria para gerar caracteres ASCII imprimíveis e, em seguida, tenta executá-los como perl. Não sei o número exato de avisos de tempo de compilação que o perl pode fornecer, mas certamente existem pelo menos 30 desses erros e eles podem ocorrer em várias combinações diferentes. Portanto, a menos que seja considerado inválido, eu diria que esse código recebe uma ordem de magnitude mais pontos que as outras soluções =)
Exemplo de saída de algumas execuções diferentes (intercaladas com novas linhas):
fonte
C # (85) (sem interrupção ou declaração)
Esta solução usa a identificação do processo atual para determinar como travar.
O processo pode terminar devido a:
10x6 + 25 = 85
Editar
Depois que o OP desabilitou o Assert and Abort, eu os removi da minha solução; portanto, é reduzido a 85 com todos os métodos válidos permitidos.
fonte
Abort()
eAssert()
. Veja se você ainda pode lançar essas exceções sem realmente invocá-las diretamente.Process.GetCurrentProcess().Id / 4 % actions.Count
?Não tenho certeza se isso se qualifica ...
C
Ambos os
i
elementos dep
não são inicializados, portanto, isso pode causar:i
<0i
alguma forma, chegar a 0c
, após incrementos repetidos, for maior quei
Além disso, isso pode ou não matar um aplicativo existente (dependendo do valor de
p[c]
) com um SIGSEGV.Observe que eu não testei isso ... por favor, comente se isso não funcionar
fonte
Espumante .
Isenção de responsabilidade: semelhante à maravilhosa solução de Abhijit, mas:
a principal fonte de insanidade é que o código gerenciado obtém um detalhe de implementação nativo através de vários hacks feios;
este não requer ASLR, apenas alocação de memória dinâmica.
O que isso faz:
o programa chama seu próprio intérprete (
spn
comando) e envia a descrição de uma matriz vazia para um arquivo. A matriz é alocada dinamicamente e a descrição inclui seu endereço de memória.O programa então abre o arquivo, analisa a descrição e obtém o endereço como um número inteiro. Em seguida, ele executa algum tipo de hash no valor resultante e executa uma das seguintes ações incorretas:
..
e a adição de strings é uma exceção de tempo de execução)nil
acordo com a especificação da linguagem (isso tem a ver com um detalhe de implementação - não pode ser distinguido de um global inexistente). Quando esse símbolo é encontrado, é gerado um erro de tempo de execução.fonte
Código Python - Batendo Computador com um Bastão (falando figurativamente)
Estou com preguiça de terminar isso, mas alguém, por favor, tome minha ideia e corra com ela! O objetivo aqui é excluir um componente importante do seu computador e explorar exceções para essa parte até que você finalmente remova todos os arquivos / etc ou / usr / bin ou algo importante assim e assista a tudo travar e queimar. Tenho certeza que você pode marcar muitos "25 pontos" quando tudo falhar. :)
Eu o direcionei para máquinas Linux. Obviamente, isso deve ser executado como root para obter o máximo de dano e, se você o executar repetidamente, o sistema ficará totalmente bloqueado!
Exceções:
bat.py:
fonte
TI-BASIC, 130
Para a sua calculadora TI-84
Erros fatais (em ordem):
fonte
Código PHP: 38 (+2) caracteres, 5 erros, impossível de localizar
Lista de possíveis erros:
Erro fatal: o tempo máximo de execução de 'n' segundos excedido na linha 1
for(;;)
representa um loop infinitoErro fatal: tamanho de memória permitido de 2097152 bytes esgotado (tentou alocar 884737 bytes) na linha 1 O
PHP tem um
php.ini
arquivo, e há uma linha dizendomemory_limit=
e aqui vem o uso máximo de RAM em bytes.A parte onde está dizendo
$e.=$e++
significa que$e
será o resultado da concatenação de si mesma aumentada em 1 em cada iteração.Erro fatal: o nome da classe deve ser um objeto válido ou uma string na linha 1
As classes no PHP podem ser chamadas pelo nome da classe ou armazenando o nome da classe como uma string em um var ou atribuindo uma nova instância da classe e chamando-a .
Exemplo:
$b='PDO';$a=new $b();$a::connect();$b::connect()
-> este é um código PHP válido.Este erro ocorre porque
$e
estánull
na primeira iteração dofor(;;)
loop.Erro fatal: o nome da função deve ser uma sequência na linha 1 O
mesmo que as classes, mas as funções precisam ser uma sequência (e
$e
énull
) ou o nome da função diretamente (exemploa()
:)Erro fatal: não é possível criar referências a elementos de uma expressão de matriz temporária na linha 1. O
PHP possui um
foreach
loop que percorre todos os elementos de uma matriz. Aas
palavra-chave é usada para indicar o nome da nova variável usada para armazenar uma cópia do valor do índice atual da matriz.Ao usar
foreach($array as &$v)
, o PHP cria uma referência quando possui&
antes do nome da variável.É uma pontuação fraca (5 erros e é inacessível) = 50 pontos
O PHP não permite capturar erros fatais.
No linux, a adição
shutdown -P +0
entre backticks executará esse comando (nesse caso, fará com que o sistema seja encerrado abruptamente).Isso faz com que todos os processos parem.
Não tenho certeza se isso é válido para o bônus ou não.
fonte
Em Actionscript
As funções são chamadas em um loop interminável, causando a falha do intérprete.
fonte
insane
programa.