Salida bencode canónica
Codifica bytes, enteros acotados, listas y diccionarios con claves de bytes como bencode canónico con claves ordenadas y hasta 65536 bytes de salida.
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
- Proyecto
- Prueba contenedores vacíos y anidación, rechazando ciclos, booleanos, enteros fuera de ±10^18, más de 64 entradas por contenedor, profundidad superior a 16 o más de 2048 valores visitados.
- Revisa antes de aplicar
- Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios.
- Modelos
- Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado.
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
Mantén compatibles y acotados los cambios de serialización
La salida binaria puede cambiar de significado sin parecer distinta en una comparación de texto normal. Bencora es un entorno de programación con IA para Windows que permite revisar código de serialización teniendo presente ese riesgo. Abre tu proyecto y pide al modelo conectado que examine los valores admitidos, el contrato de salida y el código consumidor antes de sugerir un parche.
Una tarea concreta podría revisar la salida bencode canónica de un escritor de metadatos. Pide al asistente que examine el orden de claves de bytes, los contenedores anidados y el rechazo de tipos no admitidos. Proporciona salidas conocidas de prueba y describe los límites necesarios. Mantén la propuesta centrada en ese escritor y sus consumidores, sin suponer que cambiar un serializador es inocuo porque produzca bytes aparentemente válidos.
Comprueba los límites de recursos junto con las conversiones habituales de ida y vuelta. Ejecuta tus propias pruebas de profundidad máxima, salida demasiado grande y contenedores cíclicos, y compara bytes exactos de diccionarios representativos. Examina las rutas de limpieza tras el rechazo para que un intento fallido no corrompa trabajos posteriores. La compatibilidad necesita pruebas de los consumidores del proyecto además de ejemplos que se codifiquen correctamente.
Bencora admite conexiones a endpoints compatibles con OpenAI o de Anthropic. Puedes seleccionar un modelo de IA sin censura donde lo ofrezca el servicio configurado, con herramientas, restricciones y contexto determinados por esa configuración. Utiliza la conversación para explicar el cambio, mientras tus casos de prueba establecen si el contrato de salida permanece intacto.
Revisión segura de un escritor binario
¿Por qué comparar bytes exactos y no solo valores decodificados?
Los valores decodificados equivalentes pueden ocultar diferencias de orden o representación relevantes para un formato canónico. Conserva casos de bytes conocidos para esos requisitos y examínalos junto con las comprobaciones de ida y vuelta que ya utilice el proyecto.
¿Qué contexto importa para ordenar diccionarios?
Muestra los tipos reales de claves y los consumidores que dependen de la salida codificada. Pide al asistente que distinga el orden de bytes del orden textual propio de un lenguaje. Una conversión cómoda a cadena puede alterar un contrato definido sobre bytes sin procesar.
¿Deben comprobarse los límites de tamaño solo después de codificar?
Revisa la política de recursos que necesita tu aplicación. Una comprobación final puede ocurrir tras un trabajo o una asignación de memoria considerables. Pregunta dónde aplica los límites la propuesta y prueba las rutas de rechazo, incluidos valores anidados que excedan la salida permitida.
¿Por qué incluir un contenedor cíclico?
Comprueba cómo trata el escritor una entrada que no puede expandirse como un árbol finito ordinario. Verifica el rechazo explícito y la limpieza. Los ejemplos de codificación correcta de un modelo no demuestran que las estructuras de contenedores malformadas terminen correctamente.
Bencora · Actualizado 2026-10-25