Decodificação restrita de corpos chunked
Decodifique um corpo chunked restrito de até 65536 bytes com saída máxima de 4096 bytes.
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2- 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.
- Projeto
- Teste CRLF internos e o bloco zero, rejeitando truncamento, extensões, trailers e bytes posteriores.
- 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.
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2Mantenha explícito o formato aceito pelo decodificador
Um decodificador precisa de uma resposta precisa sobre onde termina a entrada válida e começa a rejeição. ChunkRavel é um ambiente de programação com IA para Windows para desenvolver esse limite com o código do projeto à vista. Descreva o formato de entrada aceito, os limites de tamanho e o resultado esperado; depois peça ao assistente para examinar como a implementação existente avança pelos bytes e informa falhas.
O exemplo restrito de corpo em blocos é uma tarefa que você pode examinar. Ele aceita uma forma deliberadamente limitada; portanto, revise extensões e campos finais não aceitos junto de entradas truncadas e bytes extras. Peça alterações que preservem os limites declarados, a menos que o requisito os amplie explicitamente. Acompanhe também a saída decodificada até o chamador, pois um resultado correto em bytes ainda pode ser tratado incorretamente pelo componente que o recebe.
Para opções de IA abliterada, selecione um modelo disponível por um endpoint compatível com OpenAI ou Anthropic aceito e forneça credenciais quando exigidas. O modelo e o servidor determinam contexto, ferramentas e restrições aplicáveis. Examine as diferenças e execute casos válidos e inválidos pelos testes do projeto antes de aceitar a alteração do decodificador. Um servidor de modelo local executado separadamente não torna local toda ferramenta ou serviço conectado.
Revisão de um contrato restrito de decodificação
- O decodificador deve aceitar toda forma de entrada em blocos?
Apenas se esse for o requisito da aplicação e a implementação for projetada e testada para isso. O exemplo aceita uma forma restrita. Mantenha explícitas as extensões, os campos finais e outros casos não aceitos, sem tratar uma demonstração limitada como suporte completo ao protocolo.
- Como testar um corpo truncado?
Forneça casos cortados em limites significativos, incluindo dentro de um token de tamanho, do corpo e do delimitador. Declare o comportamento de rejeição esperado. Execute-os pela entrada real do decodificador para que o tratamento externo da entrada faça parte do resultado examinado.
- Por que conferir bytes restantes após o bloco final?
A aplicação precisa de uma política definida para entradas não consumidas. Examine se bytes extras devem ser rejeitados ou tratados por outra camada e teste esse contrato. Ignorá-los acidentalmente pode ocultar uma divergência entre o decodificador e seu chamador.
- O domínio relacionado a SQL implica recursos de decodificação de bancos de dados?
Nenhum recurso desse tipo é alegado. O exemplo de projeto fornecido trata de decodificação de bytes, e ChunkRavel é um ambiente de programação com IA para Windows. Escolha os arquivos e o runtime reais da tarefa em vez de inferir capacidades do produto pelo domínio.
ChunkRavel · Atualizado 2026-10-25