Saída bencode canônica
Codifique bytes, inteiros limitados, listas e dicionários com chaves de bytes em bencode canônico ordenado com até 65536 bytes de saída.
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)
- Projeto
- Teste recipientes vazios e aninhamento, rejeitando ciclos, booleanos, inteiros fora de ±10^18, mais de 64 entradas por recipiente, profundidade acima de 16 ou mais de 2048 valores visitados.
- Revise antes de aplicar
- Compare o comportamento real com o resultado esperado. Se uma verificação falhar, investigue a causa antes de fazer outras alterações.
- Modelos
- Configure um endpoint compatível com OpenAI ou Anthropic com a URL base e uma chave API, quando necessária. Teste a conexão. O servidor local precisa estar em execução; ferramentas remotas podem transmitir dados separadamente.
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)
Mantenha alterações de serialização compatíveis e limitadas
Uma saída binária pode mudar de significado sem parecer diferente em uma comparação de texto comum. Bencora é um ambiente de programação com IA para Windows para revisar código de serialização levando esse risco em conta. Abra o projeto e peça ao modelo conectado para examinar os valores aceitos, o contrato de saída e o código consumidor antes de sugerir uma correção.
Uma tarefa concreta pode revisar a saída bencode canônica de um gravador de metadados. Peça ao assistente para examinar a ordenação de chaves em bytes, contêineres aninhados e a rejeição de tipos não aceitos. Forneça casos de saída conhecida e descreva os limites necessários à aplicação. Mantenha a proposta focada nesse gravador e em seus chamadores, sem presumir que uma alteração no serializador seja inofensiva por produzir bytes aparentemente válidos.
Confira os limites de recursos junto das conversões comuns de ida e volta. Execute seus testes de profundidade máxima, saída grande demais e contêineres cíclicos, e compare os bytes exatos de dicionários representativos. Examine os caminhos de limpeza após a rejeição para que uma tentativa malsucedida não corrompa o trabalho posterior. Compatibilidade precisa de evidências dos consumidores do projeto, além de exemplos codificados com sucesso.
Bencora aceita conexões a endpoints compatíveis com OpenAI ou Anthropic. Um modelo de IA sem censura pode ser selecionado quando oferecido pelo serviço configurado, com ferramentas, restrições e contexto determinados por essa configuração. Use a conversa para explicar a alteração, enquanto seus casos de teste estabelecem se o contrato de saída permanece intacto.
Revisão segura de um gravador binário
Por que comparar bytes exatos em vez de apenas valores decodificados?
Valores decodificados equivalentes podem ocultar diferenças de ordenação ou representação relevantes para um formato canônico. Mantenha casos conhecidos de bytes para esses requisitos e examine-os junto das verificações de ida e volta que o projeto já utiliza.
Qual contexto importa para a ordenação de dicionários?
Mostre os tipos reais das chaves e os consumidores que dependem da saída codificada. Peça ao assistente para distinguir ordenação de bytes de ordenação textual específica da linguagem. Uma conversão conveniente para string pode alterar um contrato definido sobre bytes brutos.
Os limites de tamanho da saída devem ser verificados apenas após a codificação?
Revise a política de recursos necessária à aplicação. Uma verificação final de tamanho pode ocorrer depois de trabalho ou alocação consideráveis. Pergunte onde a proposta impõe limites e teste os caminhos de rejeição, incluindo valores aninhados que excedam a saída permitida.
Por que incluir um caso de contêiner cíclico?
Ele verifica como o gravador trata uma entrada que não pode ser expandida como uma árvore finita comum. Verifique a rejeição explícita e a limpeza. Exemplos de codificação bem-sucedida do modelo não comprovam que estruturas malformadas de contêineres terminem corretamente.
Bencora · Atualizado 2026-10-25