Locura: hacer lo mismo una y otra vez y esperar resultados diferentes.
Escriba un programa que solo arroje una excepción (error de tiempo de ejecución) cada vez que se ejecute. El desafío es tener la probabilidad de producir más de un bloqueo, sin invocar las excepciones directamente (sin throw
declaraciones) y no utilizar funciones de conteo de tics aleatorias o de CPU incorporadas.
- 10 puntos por cada posible error.
- 25 puntos de bonificación si el error / bloqueo ocurre en otro proceso o en el sistema.
Reglas
- Las respuestas deben indicar qué errores son posibles y cómo se generan.
- No se puede usar el generador de números aleatorios del sistema (incorporado) a menos que se siembra con el mismo número cada vez que se ejecuta el programa.
- No se puede usar el número de tics o ciclos de CPU, a menos que se cuenten relativamente al inicio del hilo principal del programa.
- Se permite el subprocesamiento múltiple (si no se recomienda).
Editar 1
La generación de GUID se incluye en el generador de números aleatorios incorporado. Se permite la generación personalizada de GUID "de cosecha propia".
El acceso al sistema de archivos está permitido para E / S de archivos, excepto cuando se hace para omitir las reglas (leer un archivo de bits aleatorios o marca de tiempo).
Editar 2
- Llamar
abort()
oassert()
viola el espíritu del desafío de hacer un software loco y, por lo tanto, no se otorgarán 10 puntos por este modo de falla.
¡Buena suerte!
code-challenge
ja72
fuente
fuente
Respuestas:
Java, 400
Java está bendecido (?) Con muchos
Exception
syError
s. Hay muchosException
correos electrónicos específicos para la operación de una sola clase. Como ejemplo de uno de los casos más extremos, hay más de 10Exception
s (todos son subclase deIllegalFormatException
) dedicadosFormatter
solo a la clase, y me he tomado el tiempo para hacer que el código arroje (casi) todos ellos.Mi respuesta actual presenta 40
Exception
s /Error
s diferentes , y se ejecutan aleatoriamente según el módulo deSystem.nanoTime()
con algún número entero.Se debe permitir el método anterior, ya que se incluye en el caso "3. No se puede usar el número de tics o ciclos de CPU, a menos que se cuenten relativamente al inicio del hilo principal del programa" .
Instrucción de compilación
Oracle JRE / JDK u OpenJDKSe recomienda encarecidamente para ejecutar el código. De lo contrario, es posible que no se produzca alguna excepción, ya que algunas de ellas se basan en los detalles internos de la implementación de referencia y no tengo un respaldo confiable.
El siguiente código se compila con éxito
javac 1.7.0_11
y produce todas las Excepciones enjava 1.7.0_51
.Para ejecutar este código, debe copiar y pegar el siguiente código en un editor compatible con Unicode (por ejemplo, Notepad ++), guárdelo en UTF-16 (Big-Endian o Little-Endian no importa mientras se escriba la lista de materiales) .
Cambie el directorio de trabajo (
cd
) a donde se guarda el código fuente ( esto es importante ).Compile el código con el siguiente comando:
Y ejecuta el código:
No hay nada destructivo en mi código, ya que también quiero probar ejecutarlo en mi computadora. El código más "peligroso" es eliminar el
ToBeRemoved.class
archivo en la carpeta actual. Aparte de eso, el resto no toca el sistema de archivos o la red.Lista de excepciones y errores
En orden como se declara en la declaración de cambio de caso. Hay 37
Exception
sy 3Error
s en total.Pattern
, con un caso aburrido como copia de seguridad)Pattern
, con un caso aburrido como copia de seguridad)Pattern
, con un caso aburrido como copia de seguridad)Pattern
, con caso aburrido como copia de seguridad)$
enPattern
puede igualar antes de terminador de línea final)Matcher
sin realizar una coincidencia)split(String regex)
)Exception
durante la inicialización de una clase)java.nio.*
-específicoException
)java.nio.*
específico deException
)java.nio.*
-específicoException
)java.util.Stack
específico deException
)Charset.isSupported(String name)
devuelve false o throwsException
)java.util.Scanner
específico deException
)java.util.Formatter
específicosException
)SecurityManager
se puede usar el valor predeterminado )Class
clase)Exception
no se puede lanzar en la implementación de Oracle, sin respaldo)fuente
nanoTime
y el trabajo realizado con esta respuesta.Java
es-1 % 40 == -1
o-1 % 40 = 39
?-1
. ¿Recibiste un número negativo? (Editado para asegurarse de que todo no sea negativo).C (Windows 7) - 80 + 25 = 105 puntos
El siguiente programa se basa en ASLR
La siguiente excepción ocurriría al azar
Vector Subscript Out of Range
)Infinite Recursion
Dividing by Zero
Allocating Huge Memory
By Accessing NULL
By overwriting stack
fuente
<iostream>
necesario?assert()
es equivalente a lanzar una excepción.abort
yassert
._crtMessageBoxW
y finge llamarraise(SIGABRT)
, que termina víaexit(3)
Perl
A continuación se muestra un fragmento de Perl que muere con cualquier cantidad de mensajes en tiempo de compilación de Perl. Utiliza un generador de números pseudoaleatorio hecho en casa para generar caracteres ASCII imprimibles y luego intenta ejecutarlos como perl. No sé el número exacto de advertencias de tiempo de compilación que Perl puede dar, pero ciertamente hay al menos 30 de esos errores, y pueden venir en varias combinaciones diferentes. Entonces, a menos que se considere inválido, diría que este código obtiene un orden de magnitud más puntos que las otras soluciones =)
Salida de muestra de un par de ejecuciones diferentes (intercaladas con nuevas líneas):
fuente
C # (85) (sin cancelar o afirmar)
Esta solución utiliza la identificación del proceso actual para determinar cómo bloquearse.
El proceso puede finalizar debido a:
10x6 + 25 = 85
Editar
Después de que el OP ha rechazado Assert and Abort, los eliminé de mi solución, por lo tanto, se redujo a 85 con todos los métodos válidos permitidos.
fuente
Abort()
yAssert()
. Vea si aún puede lanzar estas excepciones sin invocarlas directamente.Process.GetCurrentProcess().Id / 4 % actions.Count
?No estoy seguro si esto califica ...
C
Ambos
i
y elementos dep
no están inicializados, por lo que esto puede causar:i
<0i
alguna manera llega a 0c
, después de incrementos repetidos, se vuelve mayor quei
Además, esto puede o no matar una aplicación existente (dependiendo del valor de
p[c]
) con un SIGSEGV.Tenga en cuenta que no he probado esto ... así que por favor comente si esto no funciona
fuente
Espumoso .
Descargo de responsabilidad: similar a la maravillosa solución de Abhijit, pero:
La fuente principal de locura es que el código administrado obtiene un detalle de implementación nativa a través de un montón de trucos feos;
este no requiere ASLR, solo asignación de memoria dinámica.
Lo que esto hace:
el programa llama a su propio intérprete (
spn
comando) y envía la descripción de una matriz vacía a un archivo. La matriz se asigna dinámicamente y la descripción incluye su dirección de memoria.Luego, el programa abre el archivo, analiza la descripción y obtiene la dirección como un entero. Luego realiza algún tipo de hash en el valor resultante y ejecuta una de las siguientes acciones erróneas:
..
, y la adición de cadenas es una excepción en tiempo de ejecución)nil
acuerdo con la especificación del lenguaje (esto tiene que ver con un detalle de implementación; no podría distinguirse de un global inexistente). Cuando se encuentra dicho símbolo, se genera un error de tiempo de ejecución.fuente
Python Code - Bashing Computer with a Bat (en sentido figurado)
Soy demasiado vago para terminar esto, pero alguien, ¡por favor toma mi idea y corre con ella! El objetivo aquí es eliminar un componente importante de su computadora y explotar las excepciones para esa parte hasta que finalmente solo termine de / etc o / usr / bin o algo importante como eso y vea cómo todo se bloquea y se quema. Estoy seguro de que puedes obtener muchos "25 puntos" cuando todo falla. :)
Lo apunté a las máquinas Linux. Por supuesto, esto debe ejecutarse como raíz para un daño máximo y si lo ejecuta repetidamente, ¡dejará su sistema totalmente bloqueado!
Excepciones:
bat.py:
fuente
TI-BASIC, 130
Para su calculadora TI-84
Errores fatales (en orden):
fuente
Código PHP: 38 (+2) caracteres, 5 errores, no se puede capturar
Lista de posibles errores:
Error fatal: el tiempo de ejecución máximo de 'n' segundos excedido en la línea 1
for(;;)
representa un bucle infinitoError fatal: tamaño de memoria permitido de 2097152 bytes agotados (trató de asignar 884737 bytes) en la línea 1
PHP tiene un
php.ini
archivo, y hay una línea que dicememory_limit=
y aquí viene el uso máximo de RAM en bytes.La parte donde está diciendo
$e.=$e++
significa que$e
será el resultado de la concatenación de sí mismo aumentada en 1 en cada iteración.Error grave: el nombre de la clase debe ser un objeto válido o una cadena en la línea 1
Las clases en PHP pueden llamarse ya sea por el nombre de la clase o almacenando el nombre de la clase como una cadena en una variable o asignando una nueva instancia de la clase y llamándola .
Ejemplo:
$b='PDO';$a=new $b();$a::connect();$b::connect()
-> este es un código PHP válido.Este error ocurre porque
$e
estánull
en la primera iteración delfor(;;)
bucle.Fatal error: Nombre de la función debe ser una cadena en la línea 1
Igual que las clases, pero las funciones que tenga que ser una cadena (y
$e
esnull
) o el nombre de la función directamente (ejemplo:a()
)Error grave: no se pueden crear referencias a elementos de una expresión de matriz temporal en la línea 1
PHP tiene el
foreach
bucle que recorre todos los elementos de una matriz. Laas
palabra clave se utiliza para indicar el nombre de la nueva variable utilizada para almacenar una copia del valor del índice de matriz actual.Cuando se usa
foreach($array as &$v)
, PHP crea una referencia cuando tiene&
antes del nombre de la variable.Es un puntaje débil (5 errores y no se puede alcanzar) = 50 puntos
PHP no permite detectar errores fatales.
En Linux, agregando
shutdown -P +0
entre comillas invertidas ejecutará ese comando (en este caso, hará que el sistema se apague abruptamente).Esto hace que todos los procesos se detengan.
No estoy seguro si esto es válido para el bono o no.
fuente
En Actionscript
Las funciones se invocan en un bucle sin fin que hace que el intérprete se bloquee.
fuente
insane
programa.