Project
Test de wortel, afgebroken invoer en de uitgepakte grens van 255 bytes, en weiger ongeldige markeringen, cycli en pointers die niet terugwijzen.
Decodeer een DNS-naam uit maximaal 65535 pakketbytes en geef ruwe labels plus de volgende positie terug.
def dns_name(data, offset):
if type(data) is not bytes or len(data) > 65535 or type(offset) is not int or not 0 <= offset < len(data):
raise ValueError("dns.input")
labels, seen, pos, end, size = [], set(), offset, None, 1
while True:
if pos in seen or pos >= len(data):
raise ValueError("dns.pointer")
seen.add(pos)
count = data[pos]
if count & 192 == 192:
if pos+1 >= len(data):
raise ValueError("dns.truncated")
target = ((count & 63) << 8) | data[pos+1]
if target >= pos:
raise ValueError("dns.forward")
if end is None:
end = pos+2
pos = target
continue
if count & 192 or pos+1+count > len(data):
raise ValueError("dns.label")
pos += 1
if count == 0:
return labels, pos if end is None else end
size += count+1
if size > 255:
raise ValueError("dns.length")
labels.append(data[pos:pos+count])
pos += count
Test de wortel, afgebroken invoer en de uitgepakte grens van 255 bytes, en weiger ongeldige markeringen, cycli en pointers die niet terugwijzen.
Vergelijk het werkelijke gedrag met het verwachte resultaat. Onderzoek een mislukte controle voordat je verdergaat met wijzigingen.
Stel een OpenAI-compatibel of Anthropic-endpoint in met de basis-URL en zo nodig een API-sleutel. Test de verbinding. Een lokale modelserver moet actief zijn; externe hulpmiddelen kunnen apart gegevens versturen.
def dns_name(data, offset):
if type(data) is not bytes or len(data) > 65535 or type(offset) is not int or not 0 <= offset < len(data):
raise ValueError("dns.input")
labels, seen, pos, end, size = [], set(), offset, None, 1
while True:
if pos in seen or pos >= len(data):
raise ValueError("dns.pointer")
seen.add(pos)
count = data[pos]
if count & 192 == 192:
if pos+1 >= len(data):
raise ValueError("dns.truncated")
target = ((count & 63) << 8) | data[pos+1]
if target >= pos:
raise ValueError("dns.forward")
if end is None:
end = pos+2
pos = target
continue
if count & 192 or pos+1+count > len(data):
raise ValueError("dns.label")
pos += 1
if count == 0:
return labels, pos if end is None else end
size += count+1
if size > 255:
raise ValueError("dns.length")
labels.append(data[pos:pos+count])
pos += count
LabelFen brengt protocolonderhoud naar een AI-programmeeromgeving voor Windows. Open de projectmap en beschrijf welk pakketgedrag je wilt wijzigen, inclusief wat de volgende stap na het parsen verwacht. Een gesprek op basis van die bestanden kan een lokale correctie verbinden met de grotere lezer in plaats van een hulpfunctie alleen op haar teruggegeven waarde te beoordelen.
Gecomprimeerde DNS-namen vormen een voorbeeldtaak. Vraag het model pointerverwerking, weigering van ongeldige invoer en de aan de aanroeper teruggegeven offset te bekijken. Voeg een pakket toe waarin na een gecomprimeerde naam een ander veld volgt. Zo krijgt de voorgestelde patch een concrete eis: de naam herstellen en de omringende parser op de juiste plaats achterlaten.
Maak tijdens de beoordeling onderscheid tussen waar een pointer wordt gevolgd en waar de aanroeper verder moet gaan. Een aannemelijke gedecodeerde naam bewijst niet dat het volgende veld goed wordt gelezen. Voer relevante tests met afgekorte en geldige testgevallen uit, bekijk de uiteindelijke offset en vergelijk het resultaat van de omringende parser voordat je de wijziging overneemt.
Je kunt een geablitereerd AI-model kiezen dat een ondersteund OpenAI-compatibel of Anthropic-endpoint aanbiedt, met inloggegevens waar nodig. Antwoordbeperkingen, tools en contextlimieten blijven afhankelijk van model en server. LabelFen ondersteunt het projectgesprek; jouw beoordeling en protocoltestgevallen leveren het bewijs voor de softwarebeslissing.
De aanroeper kan die offset gebruiken om het volgende veld te lezen. Een correcte naam met een verkeerde hervatpositie kan de rest van de pakketinterpretatie verstoren. Voeg een volgend veld aan het testgeval toe en controleer beide uitkomsten expliciet.
Accepteer alleen vormen die je gedocumenteerde contract ondersteunt. Vergelijk de implementatie met die deelverzameling voordat je haar uitbreidt. Vraag het model nieuw geaccepteerde invoer te benoemen, zodat opschonen niet stilzwijgend de acceptatieregels van het protocol verandert.
Het moet op een betekenisvolle grens eindigen, bijvoorbeeld in een onvolledige pointer of een onvolledig label, en de verwachte weigering vastleggen. Controleer of de parser faalt voordat niet-beschikbare bytes worden gelezen en hoe de omringende lezer de fout afhandelt.
Afhankelijk van endpoint- en toolconfiguratie wel. Gebruik bij voorkeur bytevoorbeelden waaruit gevoelige gegevens zijn verwijderd en controleer bestemmingen voordat je pakketopnames deelt. Een afzonderlijk draaiende lokale modelserver maakt niet elke verbonden inspectietool of externe dienst lokaal.
LabelFen · Bijgewerkt 2026-10-25