77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/spf/ext/resolv.rb', line 77
def get_labels(limit=nil)
limit = @index if !limit || @index < limit
d = []
while true
case @data[@index] && @data[@index].ord when nil raise DecodeError.new("truncated or malformed packet") when 0
@index += 1
return d
when 192..255
idx = self.get_unpack('n')[0] & 0x3fff
if limit <= idx
raise DecodeError.new("non-backward name pointer")
end
save_index = @index
@index = idx
d += self.get_labels(limit)
@index = save_index
return d
else
d << self.get_label
end
end
return d
end
|