File tree 1 file changed +12
-14
lines changed
src/libstd/sys/redox/net/dns
1 file changed +12
-14
lines changed Original file line number Diff line number Diff line change @@ -102,6 +102,7 @@ impl Dns {
102
102
}
103
103
104
104
pub fn parse ( data : & [ u8 ] ) -> Result < Self , String > {
105
+ let name_ind = 0b11000000 ;
105
106
let mut i = 0 ;
106
107
107
108
macro_rules! pop_u8 {
@@ -147,9 +148,15 @@ impl Dns {
147
148
( ) => {
148
149
{
149
150
let mut name = String :: new( ) ;
151
+ let old_i = i;
150
152
151
153
loop {
152
154
let name_len = pop_u8!( ) ;
155
+ if name_len & name_ind == name_ind {
156
+ i -= 1 ;
157
+ i = ( pop_n16!( ) - ( ( name_ind as u16 ) << 8 ) ) as usize ;
158
+ continue ;
159
+ }
153
160
if name_len == 0 {
154
161
break ;
155
162
}
@@ -161,6 +168,10 @@ impl Dns {
161
168
}
162
169
}
163
170
171
+ if i <= old_i {
172
+ i = old_i + 2 ;
173
+ }
174
+
164
175
name
165
176
}
166
177
} ;
@@ -184,21 +195,8 @@ impl Dns {
184
195
185
196
let mut answers = Vec :: new ( ) ;
186
197
for _answer_i in 0 ..answers_len {
187
- let name_ind = 0b11000000 ;
188
- let name_test = pop_u8 ! ( ) ;
189
- i -= 1 ;
190
-
191
198
answers. push ( DnsAnswer {
192
- name : if name_test & name_ind == name_ind {
193
- let name_off = pop_n16 ! ( ) - ( ( name_ind as u16 ) << 8 ) ;
194
- let old_i = i;
195
- i = name_off as usize ;
196
- let name = pop_name ! ( ) ;
197
- i = old_i;
198
- name
199
- } else {
200
- pop_name ! ( )
201
- } ,
199
+ name : pop_name ! ( ) ,
202
200
a_type : pop_n16 ! ( ) ,
203
201
a_class : pop_n16 ! ( ) ,
204
202
ttl_a : pop_n16 ! ( ) ,
You can’t perform that action at this time.
0 commit comments