Errores de GZIP en .NET causados por problemas de alimentación y puesta a tierra
Una aplicación en C# que leía archivos GZIP lanzaba una InvalidDataException con el mensaje "The archive entry was compressed using an unsupported compression method." El error era muy intermitente: a veces la extracción funcionaba, otras veces la aplicación se cerraba inesperadamente. Los archivos nunca cambiaban, las sumas de verificación coincidían perfectamente y, sin embargo, los intentos repetidos de lectura fallaban ocasionalmente, incluso en Bash, que arrojaba un error de "can’t seek file descriptor".
El seguimiento de pila apuntaba directamente a DeflateStream.ReadCore en System.IO.Compression.dll (.NET Core 3.1.16). Dentro de ReadCore, la condición if (count <= this._buffer.Length) se evaluaba como false: count superaba misteriosamente el tamaño del búfer, lo que desencadenaba la InvalidDataException.
internal int ReadCore(Span<byte> buffer) {
this.EnsureDecompressionMode();
this.EnsureNotDisposed();
this.EnsureBufferInitialized();
int start = 0;
while (true) {
do {
int num = this._inflater.Inflate(buffer.Slice(start));
start += num;
if (start == buffer.Length || this._inflater.Finished() && (!this._inflater.IsGzipStream() || !this._inflater.NeedsInput()))
goto label_7;
}
while (!this._inflater.NeedsInput());
int count = this._stream.Read(this._buffer, 0, this._buffer.Length);
if (count > 0) {
if (count <= this._buffer.Length) // aquí la condición resultó ser false
this._inflater.SetInput(this._buffer, 0, count);
else
break;
} else
goto label_7;
}
throw new InvalidDataException(SR.GenericInvalidData);
label_7:
return start;
}
Más abajo en la pila de llamadas, ZLibNative.Inflate devolvía DataError o StreamError, lo que el entorno de ejecución interpretaba como datos corruptos o un flujo inconsistente.
Síntomas de fallo de hardware
Los problemas pronto se extendieron más allá de la extracción de archivos GZIP. Visual Studio comenzó a cerrarse con errores crípticos que requerían reparaciones, los iconos desaparecían y la representación de texto se distorsionaba. CrystalDiskInfo no reportaba sectores defectuosos, pero sfc /scannow encontraba y "reparaba" repetidamente archivos del sistema dañados.
El patrón crítico surgió claramente: los fallos solo ocurrían cuando el equipo estaba conectado a la corriente alterna. Con la batería, el sistema funcionaba a la perfección. Otros síntomas adicionales incluían:
- Artefactos visuales verdes y rojos en dos monitores distintos.
- Una leve sensación de hormigueo eléctrico al tocar el panel táctil y el chasis de un MacBook Pro 2012 (ejecutando Boot Camp).
- Las luces del apartamento brillaban tenuemente incluso después de apagarlas.
- Lanzamiento lento de aplicaciones y apagados aleatorios e inexplicables.
El Registro de eventos de Windows registraba errores de APIC explícitamente vinculados a la gestión de energía.
Diagnóstico de la causa raíz eléctrica
Un comprobador de enchufes sencillo confirmó la ausencia total de puesta a tierra en las tomas de corriente. La inestabilidad se correlacionaba fuertemente con la alta humedad, el calor ambiental y el funcionamiento del aire acondicionado. Las caídas de tensión (por debajo de 120 V) activaban constantemente el SAI (UPS) con AVR, registrando más de 20 eventos de energía en solo unos días.
Conectar el equipo directamente a un enchufe protegido por interruptor diferencial (GFCI) (en el baño) estabilizó temporalmente el sistema, incluso bajo una carga pesada con Prime95. Volver a conectarlo a la regleta de corriente estándar provocó el regreso inmediato de los cierres inesperados.
Causas probables:
- Falta de cable de tierra: La corriente eléctrica no tenía por dónde disiparse, lo que provocaba una acumulación de electricidad estática en el chasis de los dispositivos.
- Caídas de tensión por la unidad de aire acondicionado: Los ciclos pesados del compresor reducían la tensión de la línea.
- Alta humedad: Agravaba las fugas eléctricas en circuitos sin conexión a tierra.
Solución y conclusiones clave
Instalar un enchufe correctamente conectado a tierra (vinculado al sistema de puesta a tierra del calentador de agua) eliminó por completo todos los síntomas. El comprobador confirmó una conexión a tierra sólida. La extracción de archivos GZIP se estabilizó por completo, desaparecieron los artefactos en el monitor y cesaron las descargas eléctricas.
Qué tener en cuenta:
- Los errores intermitentes de
InvalidDataExceptionenDeflateStreamno siempre indican archivos corruptos; pueden señalar fallos de lectura a nivel de hardware. - Una condición
count > buffer.LengthenReadCorees un síntoma clásico de corrupción del flujo de entrada a nivel de hardware. - La falta de puesta a tierra provoca que se acumule potencial eléctrico en los chasis metálicos, lo que interfiere directamente con las unidades de almacenamiento y las salidas de vídeo.
- Las caídas de tensión combinadas con alta humedad pueden causar corrupción silenciosa de datos sin activar advertencias de sectores defectuosos.
- Siempre descarta primero los problemas de alimentación y puesta a tierra antes de sumergirte en una depuración profunda a nivel de código.
La depuración de operaciones de E/S exige mirar más allá del IDE y considerar toda la cadena física, hasta la toma de corriente de la pared.
— Editorial Team
Aún no hay comentarios.