@@ -7,6 +7,7 @@ use crate::avm2::error::make_error_2007;
7
7
use crate :: avm2:: globals:: flash:: display:: display_object:: initialize_for_allocator;
8
8
use crate :: avm2:: globals:: slots:: flash_display_loader as loader_slots;
9
9
use crate :: avm2:: globals:: slots:: flash_net_url_request as url_request_slots;
10
+ use crate :: avm2:: globals:: slots:: flash_net_url_request_header as url_request_header_slots;
10
11
use crate :: avm2:: object:: LoaderInfoObject ;
11
12
use crate :: avm2:: object:: LoaderStream ;
12
13
use crate :: avm2:: object:: TObject ;
@@ -144,28 +145,29 @@ pub fn request_from_url_request<'gc>(
144
145
145
146
let mut string_headers = IndexMap :: default ( ) ;
146
147
if let Some ( headers) = headers {
147
- let headers = headers. as_array_object ( ) . unwrap ( ) ;
148
-
149
148
let headers = headers. as_array_storage ( ) . unwrap ( ) ;
150
149
151
150
for i in 0 ..headers. length ( ) {
152
- let Some ( header) = headers. get ( i) else {
151
+ let Some ( header) = headers. get ( i) . and_then ( |h| h . as_object ( ) ) else {
153
152
continue ;
154
153
} ;
155
154
156
- let name = header
157
- . get_public_property ( "name" , activation) ?
158
- . coerce_to_string ( activation) ?
159
- . to_string ( ) ;
160
- let value = header
161
- . get_public_property ( "value" , activation) ?
162
- . coerce_to_string ( activation) ?
163
- . to_string ( ) ;
164
-
165
- // Note - testing with Flash Player shows that later entries in the array
166
- // overwrite earlier ones with the same name. Flash Player never sends an HTTP
167
- // request with duplicate headers
168
- string_headers. insert ( name, value) ;
155
+ // Non-URLRequestHeader objects are skipped
156
+ if header. is_of_type ( activation. avm2 ( ) . class_defs ( ) . urlrequestheader ) {
157
+ let name = header
158
+ . get_slot ( url_request_header_slots:: NAME )
159
+ . coerce_to_string ( activation) ?
160
+ . to_string ( ) ;
161
+ let value = header
162
+ . get_slot ( url_request_header_slots:: VALUE )
163
+ . coerce_to_string ( activation) ?
164
+ . to_string ( ) ;
165
+
166
+ // Note - testing with Flash Player shows that later entries in the array
167
+ // overwrite earlier ones with the same name. Flash Player never sends an HTTP
168
+ // request with duplicate headers
169
+ string_headers. insert ( name, value) ;
170
+ }
169
171
}
170
172
}
171
173
0 commit comments