¿Cuáles son algunos ejemplos de desbordamientos de búfer presentes en grandes aplicaciones web?

Bueno, esta es la pregunta que he estado esperando. Aferrarse a sus traseros, amigos. Podría saltar un poco mientras escribo esto.

(Editar: en realidad no se trata de una “aplicación web”, sino simplemente de una “aplicación grande”. Pero se trata de un desbordamiento del búfer. Espero que disfruten leyendo sobre ella tanto como yo disfruto recordarla).

A finales de los 80, trabajé para una pequeña empresa de tecnología en Texas. Teníamos muchos grandes clientes en todo Estados Unidos. Uno de nuestros grandes clientes era Amoco Corp., y tenían una nueva y hermosa oficina tipo “control de misión” en Tulsa, OK. Parecía algo sacado de “War Games”, con enormes pantallas apiladas en dos pisos de altura en un semicírculo alrededor de un grupo de estaciones de trabajo, y nuestras pantallas estaban en el centro de todo.

Me enviaron allí con mi jefe (el dueño de la compañía) y uno de mis compañeros de equipo para instalar nuestro producto en esta oficina.

Ahora, retrocedamos un poco. El producto del que hablo fue escrito en C ++ y era bastante grande. Tal vez 600K líneas de código, o por ahí. Nunca había más de 5 personas en el equipo que trabajaron en él, y yo y mi compañero que nos enviaron fueron los líderes y prácticamente lo construimos desde cero durante varios años.

También debo señalar que nuestra fuerza de ventas también era muy pequeña, y tenían la costumbre de vender funciones que no existían como si existieran, por lo que con frecuencia se esperaba que los programadores completaran el desarrollo de funciones en una habitación de hotel la noche antes de una instalación importante donde se esperaba que esas características funcionaran.

No divulgaré el nombre de mi jefe (todavía está por aquí y creo que no apreciaría la notoriedad), pero sus iniciales fueron “RB”. De hecho, una estructura de datos utilizada en todo el producto se denominó “anillo de amortiguación”.

La notación húngara estaba de moda en aquel entonces (y todavía lo está, conmigo). Las variables enteras tenían nombres como “iCounter” o “iPort”. Las variables de cadena eran “strMessage”, “strDescription”, etc. Y, por supuesto, las instancias o punteros de Ring Buffer serían “rbThis” o “rbThat”. Un nombre popular usado frecuentemente para instancias temporales fue “rbBuf”. En otras palabras, un “anillo de búfer, búfer”. Sí, era redundante, pero parecía natural.

Bueno, todos éramos bastante jóvenes, recién salidos de la universidad, y trabajábamos tarde por un salario bajo, así que antes de que te dieras cuenta, alguien pensó que sería divertido nombrar una variable “rbInTheBuff”. Jaja. ¿Consíguelo? RB (nuestro jefe de tareas / jefe) “en la mejora” (desnudo). Tee-ji-ji. Eran las 2:00 am y habíamos tenido algunas.

Antes de que lo supiera, el código estaba lleno de nombres variables, como “rbTheBastard”, “rbIsADumbass”, “rbTheFuckingAsshole”, etc., etc., etc. . Era nuestra broma privada, porque pensamos que RB mismo no sabía nada sobre programación y que nunca miraría el código.

Ahora, antes de continuar, permítanme agregar que nunca construimos el código de “lanzamiento”. Como dije, a menudo estábamos depurando nuestro código literalmente horas o incluso minutos antes de la instalación, por lo que nunca tuvimos tiempo de pasar por un respetable proceso de control de calidad y generar una compilación de “lanzamiento”. Todas nuestras compilaciones fueron compilaciones de depuración, e información completa de depuración instalada junto con el producto. A veces, incluso dejamos el compilador instalado en secreto en la máquina del cliente, de modo que cuando llegara el momento (como inevitablemente lo haría) de regresar al sitio para soporte y mantenimiento, pudiéramos reconstruir fácilmente todo allí.

Ahora llegamos al remate. El desbordamiento del búfer.

Mi compañero de trabajo y yo habíamos estado despiertos toda la noche trabajando en las características de Amoco, y allí estábamos instalando el producto en el nuevo y verdaderamente impresionante centro de comando de Amoco. Mi jefe estaba de pie a pocos metros de distancia con un grupo de ejecutivos de Amoco con trajes y corbatas costosos esperando ver el rendimiento del producto en todo su esplendor, conduciendo estas enormes pantallas que eran el punto focal de la sala. La habitación estaba cómodamente climatizada, pero el sudor me cubría la frente.

Oh, antes de continuar, debo cubrir otro detalle que será de importancia crítica: los interruptores de alimentación de nuestras pantallas se ubicaron en la parte posterior de las unidades, y las pantallas se montaron de tal manera que para apagarlas o encenderlas, uno tenía que salir de la habitación a través de una puerta, entrar en un área detrás de las pantallas y subir una pequeña escalera para alcanzar los interruptores. Al principio, cuando hice esto como para hacer esto, un empleado de Amoco me llamó y me informó que realizar esa tarea era un trabajo sindical, y debo notificar al trabajador sindical apropiado y hacer que lo realice, en lugar de haciéndolo yo mismo.

De todos modos, como dije, instalamos el producto y lo mencionamos por primera vez. En ese momento, solo puedo imaginar que Dios y Satanás deben haber estado apostando sobre nuestros destinos como lo hicieron con Job. De repente, nuestro programa se estrelló espectacularmente. Un búfer invadido por el infierno, se podría decir. La computadora se bloqueó fuertemente para que Ctrl-Alt-Delete no tuviera ningún efecto. ¡En el mismo momento, una confluencia aleatoria de bits se unió en las entrañas de la computadora de tal manera que secciones de nuestro CÓDIGO DE FUENTE estaban pegadas en todas las pantallas en la pared! De repente, “rbInTheBuff”, “rbTheDumbass”, “rbTheFuckingDumbshit”, etc., etc. estaban en todas las pantallas gigantes en caracteres de 5 pulgadas de alto.

Me zambullí debajo del escritorio para apagar y encender físicamente la computadora, pero fue en vano. Las pantallas fueron manejadas por nuestro software, pero sin que nuestro software las maneje, simplemente se quedarían sentadas allí mostrando la última información que se les envió. Debido al problema anterior sobre los trabajos sindicales, no pudimos volver a configurar las pantallas sin llamar la atención sobre nosotros mismos (y sobre ellos).

Miré a RB y los ejecutivos de Amoco. Justo en ese momento no parecían estar mirando las pantallas. RB sin duda los impresionó con un poco de basura acerca de cuán avanzado, poderoso y lleno de características maravillosas era nuestro producto. “¡Prepárense para ser cautivados, muchachos!” Miré alrededor del cuarto. Los empleados de Amoco se apoyaban en los escritorios, bebían café, murmuraban en voz baja entre ellos sobre lo que habían estado haciendo durante el fin de semana, etc., pero nadie estaba mirando las pantallas.

Con el sudor cayendo por nuestros rostros, contuvimos la respiración mientras la computadora avanzaba lentamente en su proceso de reinicio. Recuerdo mis dedos sobre el teclado, temblando. Cuando estaba listo, relanzamos rápidamente nuestro producto para que volviera a adquirir las pantallas y las limpiara.

Ni RB ni ninguna otra persona en la sala miraron las pantallas durante el período de 2 o 3 minutos en que nuestro código fuente fue estampado en ellas. O si lo hicieron, sus mentes estaban en otras cosas y realmente no leían lo que había allí arriba.

Más tarde, y durante años después, nos reímos y reímos de esta experiencia, pero nunca le contamos a nadie, excepto a unos pocos de nuestros compañeros de trabajo. Estoy revelando el evento públicamente en su totalidad aquí en Quora por primera vez hoy.

Gracias.

Leí una pregunta en Stack Overflow sobre PayPal, sobre un hombre cuya cuenta de PayPal fue acreditada accidentalmente con $ 92,233,720,368,547,800. supuestamente para un desbordamiento.

¿De dónde viene el número 92233720368547800 de paypal?