Ieșire bencode canonică
Codifică octeți, întregi limitați, liste și dicționare cu chei binare în bencode canonic sortat de cel mult 65536 de octeți.
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)
- Proiect
- Testează containere goale și imbricare, respingând cicluri, booleene, numere în afara ±10^18, peste 64 de intrări pe container, adâncime peste 16 sau peste 2048 de valori vizitate.
- Verifică înainte de aplicare
- Compară comportamentul real cu rezultatul așteptat. Dacă o verificare eșuează, cercetează cauza înainte de alte modificări.
- Modele
- Configurează un endpoint compatibil OpenAI sau Anthropic cu URL-ul de bază și cheia API, dacă este necesară. Testează conexiunea. Serverul local trebuie să ruleze; instrumentele externe pot transmite date separat.
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)
Păstrează compatibilitatea și limitele modificărilor de serializare
Ieșirea binară își poate schimba sensul fără diferențe vizibile într-o comparație obișnuită de text. Bencora este un spațiu de lucru Windows pentru programare cu IA, destinat examinării codului de serializare cu acest risc în vedere. Deschide proiectul și cere modelului conectat să examineze valorile acceptate, contractul ieșirii și codul care o folosește înainte să sugereze o corecție.
O sarcină concretă poate examina ieșirea bencode canonică a unei funcții de scriere a metadatelor. Cere asistentului să examineze ordinea cheilor de tip octeți, containerele imbricate și respingerea tipurilor neacceptate. Oferă cazuri de test cu ieșire cunoscută și descrie limitele necesare aplicației. Concentrează propunerea asupra acelei funcții și apelanților săi, fără să presupui că modificarea serializării este inofensivă pentru că produce octeți aparent valizi.
Verifică limitele resurselor împreună cu conversiile dus-întors obișnuite. Rulează propriile teste pentru adâncimea maximă, ieșire prea mare și containere ciclice și compară octeții exacți pentru dicționare reprezentative. Examinează traseele de curățare după respingere, astfel încât o încercare eșuată să nu corupă lucrul ulterior. Compatibilitatea necesită dovezi din codul proiectului care folosește rezultatele, precum și exemple care se codifică reușit.
Bencora acceptă conexiuni la endpointuri compatibile cu OpenAI sau Anthropic. Un model de IA fără cenzură poate fi selectat acolo unde serviciul configurat îl oferă, instrumentele, restricțiile și contextul fiind determinate de acea configurație. Folosește conversația pentru a explica modificarea, iar cazurile tale de test pentru a stabili dacă se păstrează contractul ieșirii.
Examinarea în siguranță a unei funcții de scriere binară
De ce să compar octeții exacți, nu doar valorile decodate?
Valori decodate echivalente pot ascunde diferențe de ordine sau reprezentare importante pentru un format canonic. Păstrează cazuri de test cu octeți cunoscuți pentru aceste cerințe și examinează-le împreună cu verificările dus-întors deja folosite în proiect.
Ce context contează pentru ordinea dicționarului?
Arată tipurile reale ale cheilor și codul care se bazează pe ieșirea codificată. Cere asistentului să distingă ordinea octeților de ordinea textului specifică limbii. O conversie comodă în șir poate modifica un contract definit asupra octeților bruți.
Trebuie verificate limitele dimensiunii ieșirii doar după codificare?
Examinează politica de resurse necesară aplicației. O verificare finală a dimensiunii poate avea loc după multă procesare sau alocare. Întreabă unde impune propunerea limitele și testează traseele de respingere, inclusiv valori imbricate care depășesc ieșirea permisă.
De ce să includ un caz cu un container ciclic?
Acesta verifică modul în care funcția tratează o intrare care nu poate fi extinsă ca un arbore finit obișnuit. Verifică respingerea explicită și curățarea. Exemplele de codificare reușită ale modelului nu stabilesc că procesarea structurilor de containere malformate se încheie corect.
Bencora · Actualizat 2026-10-25