Pieza 7 de 64
LenguaPieza nº 0007 de 64

if ( parts.length > 4 );

En el buscador del Archivo de la Diputación de Granada hay una comprobación publicada que no comprueba nada. Está escrita, sangrada, con su bloque debajo. Le sobra un punto y coma, y en JavaScript un punto y coma es una decisión.

Dominio
archivo.dipgra.es
Guardado
31 AGO 2026
Comprobado en vivo
14 SEP 2026
Citas
10 en 4 ficheros guardados
Lectura
unos 3 min

La pestaña lo dice antes que nadie: «FLORA - producto de servicios documentales». Es el programa, presentándose, antes que el archivo o la Diputación. Detrás de la pestaña, una página de entrada con usuario y contraseña, un enlace para pasar sin cuenta y otro para «Verificar la configuración del navegador». Antes de pintar nada de eso, carga nueve ficheros de código. El primero se llama messages_fr.js, los mensajes en francés.

Captura de https://archivo.dipgra.es/Archivo-Dipgra/
foto 1La portada del Archivo de la Diputación de Granada tal como se abre: una página de entrada con usuario y contraseña. Lo que esta pieza mira no está en la pantalla: está en uno de los programas que la página carga antes de enseñarla.Captura del 16 de septiembre de 2026, 01:04 (hora peninsular)
1–2de 10archivo.dipgra.es/Archivo-Dipgra/líneas 5–11 de 82
Copia
archivo
Guardado
31 ago 2026
Peso
4,0 kB
sha256
8d6877e0d006…
2<html xmlns="http://www.w3.org/1999/xhtml" dir="">
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5<title>FLORA - producto de servicios documentales</title>1
6<meta http-equiv="pragma" content="no-cache" />
7<base href="https://archivo.dipgra.es/Archivo-Dipgra/"></base><link rel="icon" href="icons/favicon.ico" type="image/ico" />
8<link rel="shortcut icon" href="icons/favicon.ico" />
9<link rel="stylesheet" type="text/css" href="css/flora2.css" />
10<script src="script/messages_fr.js" type="text/javascript"></script>2
11<script src="script/system.js" type="text/javascript"></script>2
12<script src="script/form.js" type="text/javascript"></script>
13<script src="script/input.js" type="text/javascript"></script>
14<script src="script/ctrl.js" type="text/javascript"></script>
1El título de la pestaña: el programa se presenta antes que el archivo.
2Los dos primeros de los nueve programas: los mensajes en francés y el fichero “del sistema”.

El último de los nueve es distinto de todos. La página lo pide en VBScript, un lenguaje de Microsoft que solo ejecutaba Internet Explorer. Los navegadores de hoy leen la etiqueta, no reconocen el tipo y la saltan sin decir nada. El fichero se sigue sirviendo, a todo el que entra, para nadie. El segundo se llama system.js y pesa 60.808 bytes.

3de 10archivo.dipgra.es/Archivo-Dipgra/línea 19 de 82
Copia
archivo
Guardado
31 ago 2026
Peso
4,0 kB
sha256
8d6877e0d006…
16<script src="script/xml.js" type="text/javascript"></script>
17<script src="script/inputwidget.js" type="text/javascript"></script>
18<script type="text/javascript">var sysIsUTF8 = true;</script>
19<script src="script/utils_vb.js" type="text/vbscript" language="VBScript"></script>
20<script>
21   function setFocus() {
22       var codeElem = document.getElementById("code");
3El noveno: VBScript. Un navegador que no sea Internet Explorer no ejecuta este tipo de script.

system.js se abre con una advertencia en francés: este fichero contiene las funciones no modificables por el administrador del sitio y reservadas al sistema. Esto no lo escribió el archivo, ni la Diputación. Es el motor del producto, el que viene de fábrica. Los comentarios llevan fechas de 2005 a 2011 y hablan de contrarrestar versiones de Internet Explorer que ya no existen.

4de 10archivo.dipgra.es/Archivo-Dipgra/script/system.jslíneas 2–3 de 2.234
Copia
archivo
Guardado
31 ago 2026
Peso
60,8 kB
sha256
93bf46ea4fa1…
1/**
2 * Ce fichier contient les fonctions non modifiables par l'administrateur du
3 * site et réservées au système. Les appels à ces fonctions sont générés par
4 * les extensions de balises.
5 */
4La cabecera de system.js: “funciones no modificables por el administrador del sitio y reservadas al sistema”. Código del producto, no de la casa.

Dentro hay una función pequeña, SizeAndPos, que sirve para abrir ventanas emergentes donde se abrieron la última vez. Recibe una cadena con números separados por comas, posición y tamaño, y si vienen cuatro más los guarda también. Para saber si vienen, comprueba cuántos trozos tiene la cadena: si son más de cuatro, lee los otros cuatro. Está escrito exactamente así. Con una salvedad de un carácter.

La línea de la comprobación termina en punto y coma. En JavaScript, el punto y coma cierra la instrucción: la condición se evalúa, el resultado se tira, y el if se queda sin nada que gobernar. Las llaves que vienen debajo, con sus cuatro líneas dentro, ya no dependen de nada. Son un bloque suelto, y un bloque suelto se ejecuta siempre. El código está sangrado, con el margen metido hacia dentro, como si el bloque fuera del if. No lo es. Lo parece.

5de 10archivo.dipgra.es/Archivo-Dipgra/script/system.jslínea 1246 de 2.234
Copia
archivo
Guardado
31 ago 2026
Peso
60,8 kB
sha256
93bf46ea4fa1…
1243this.y = parseInt(parts[1]);
1244this.w = parseInt(parts[2]);
1245this.h = parseInt(parts[3]);
1246if ( parts.length > 4 );
1247{
1248   this.dx = parseInt(parts[4]);
1249   this.dy = parseInt(parts[5]);
5La comprobación y su punto y coma. El bloque de debajo se ejecuta siempre, tenga la cadena cuatro trozos u ocho.

¿Y cuándo llega la cadena con cuatro trozos y no con ocho? Cada vez que se abre una ventana emergente sin que haya un contexto guardado. La propia función que abre ventanas pone por defecto «0,0,450,450», cuatro números. La ayuda para enlazar registros desde un formulario abre la suya con «0,0,1050,650», cuatro también. Con cuatro trozos, el quinto no existe, y convertir en número algo que no existe da NaN, el número que no es un número.

6de 10archivo.dipgra.es/Archivo-Dipgra/script/system.jslíneas 1378–1380 de 2.234
Copia
archivo
Guardado
31 ago 2026
Peso
60,8 kB
sha256
93bf46ea4fa1…
1375var sp = sysGetWindowContext(win_name);
1376if ( sp == null )
1377{
1378   if ( ! sizeAndPos || sizeAndPos == '')
1379      sizeAndPos = "0,0,450,450";
1380   sp = new SizeAndPos(sizeAndPos);
1381   sp.center();
1382}
1383else
6El valor por defecto al abrir una ventana sin contexto guardado: cuatro números.
7de 10archivo.dipgra.es/Archivo-Dipgra/script/input.jslínea 1123 de 2.609
Copia
archivo
Guardado
31 ago 2026
Peso
75,0 kB
sha256
2492ff6e738b…
1120   actionId=actionId.split('.')[0];
1121   var winName = "win_inputlink"+myEscape(actionId);
1122   // Ouvre la fenêtre
1123   sysOpenWindow(winName, cgi,false,"0,0,1050,650");
1124}
1125
1126//Ouvre une nouvelle fenêtre pour exécuter l'action en paramètre
7La ventana del asistente de enlaces, en input.js: cuatro números.

No lo hemos deducido: lo hemos ejecutado. Copiamos la función tal como está en el fichero, sin tocar una coma, y la llamamos con «0,0,450,450». Devuelve x, y, ancho y alto correctos, y detrás cuatro campos que valen NaN. Al guardar ese contexto para la próxima vez, la cadena que se escribe es “0,0,450,450,NaN,NaN,NaN,NaN”. La comprobación estaba escrita para que eso no pasara.

Ahora la parte honesta. ¿Qué rompe? En este fichero, casi nada visible: esos cuatro campos solo los vuelve a leer la función que los guarda, y de ahí no salen. El vigilante duerme, pero la puerta que vigilaba da a un cuarto vacío. Lo que enseñamos es una comprobación que lleva escrita, sangrada y publicada desde que existe el fichero, y que no ha comprobado nada ni una sola vez.

8de 10archivo.dipgra.es/Archivo-Dipgra/script/system.jslíneas 1278–1279 de 2.234
Copia
archivo
Guardado
31 ago 2026
Peso
60,8 kB
sha256
93bf46ea4fa1…
1275// Renvoie un chaîne représentant l'objet
1276SizeAndPos.prototype.serialize = function()
1277{
1278   var spData = this.x + "," + this.y + "," +this.w + "," + this.h
1279      + "," + this.dx + "," + this.dy + "," +this.dw + "," + this.dh;
1280   return spData;
1281}
8El único sitio del fichero que vuelve a leer los cuatro campos: para escribirlos en la cadena de contexto.

El servidor dice que system.js se modificó por última vez el 30 de julio de 2024. Lo guardamos el 31 de agosto de 2026 y lo volvimos a pedir el 14 de septiembre: los mismos 60.808 bytes. La portada también salió idéntica, llave incluida. El enlace para verificar el navegador lleva una llave abierta delante y otra cerrada detrás. Casi nadie lo ha visto, y no por la llave: la hoja de estilos pinta ese enlace de blanco sobre fondo blanco, y solo toma color al pasarle el ratón por encima. En la captura de abajo, el recuadro marca dónde está. Dentro no se ve nada. Está.

Captura de https://archivo.dipgra.es/Archivo-Dipgra/
foto 2archivo.dipgra.es/Archivo-Dipgra/, la portada. El recuadro marca el enlace «{ Verificar la configuración del navegador}»: está ahí, con su llave a cada lado, pintado de blanco sobre blanco. Solo se ve al pasar el ratón.Captura del 16 de septiembre de 2026, 01:00 (hora peninsular) · el recuadro es nuestro
9de 10archivo.dipgra.es/Archivo-Dipgra/líneas 78–79 de 82
Copia
archivo
Guardado
31 ago 2026
Peso
4,0 kB
sha256
8d6877e0d006…
75    </div>
76
77 <h5 id="IndexVerification">
78    <a href="jsp/system/download.jsp" >{
79       Verificar la configuración del navegador}</a></h5>
80
81</body>
82</html>
9El enlace con la llave abierta delante y cerrada detrás, tal como se sirve.
10de 10archivo.dipgra.es/Archivo-Dipgra/css/flora2.csslíneas 428–430 de 4.228
Copia
archivo
Guardado
31 ago 2026
Peso
76,4 kB
sha256
3bd5a5e400b2…
425    color: #707070;
426}
427
428#IndexVerification a {
429    color: white;
430}
431
432#IndexVerification a:hover {
433    color: #6B6B6B;
10La hoja de estilos: el enlace, blanco. Sobre el fondo blanco de la portada.

En JavaScript un punto y coma es una decisión. Esta se tomó sola.

Lo que decimos
  • system.js, que la portada de archivo.dipgra.es carga en segundo lugar, contiene en la función SizeAndPos una condición cerrada con punto y coma antes de su bloque, de modo que el bloque se ejecuta siempre.
  • Las ventanas se abren por defecto con cadenas de cuatro números.
  • La función, ejecutada tal cual con esa cadena, deja cuatro campos en NaN.
  • Esos campos solo los vuelve a leer la función que los serializa.
  • La página carga un script en VBScript y un fichero de mensajes en francés.
  • Su título es el nombre del producto.
  • El enlace de verificación del navegador se sirve con una llave a cada lado y en color blanco.
Lo que no decimos
  • Que ningún usuario del archivo note nada: hemos medido que los campos afectados no se usan para nada visible.
  • Cuánto lleva el punto y coma en el fichero: el servidor da la última modificación (julio de 2024) y las fechas de los comentarios van de 2005 a 2011, pero ninguna dice cuándo se escribió esa línea.
  • Qué versión del producto es.
  • Quién debía haberlo visto: la cabecera dice que el fichero es del sistema y no lo toca el administrador del sitio.
Procedencia

De dónde sale cada cita

Cada trozo de código de esta ficha está en un fichero guardado tal como lo entregó el servidor, con su huella (sha256) y su hora. Las citas entre «» se comprueban por programa contra ese fichero antes de publicar.

Desgobierno Digital · https://desgobiernodigital.com/piezas/granada-punto-y-coma/ · copia impresa de la edición generada el 19 de octubre de 2026 · Un proyecto de BQuant · correcciones: @Gsnchez