aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/conversions.rs
diff options
context:
space:
mode:
authorGeorge Roman <george.roman.99@gmail.com>2019-07-11 02:47:43 +0300
committerGeorge Roman <george.roman.99@gmail.com>2019-07-23 10:00:19 +0300
commitef7b58f0cd02652d2d5c7d626d4a3f9790c080af (patch)
treea1b057e43cbc4977bef7b3f81ffc4ce652f2e696 /components/script/dom/bindings/conversions.rs
parent15be65486810e700516965bd1264a46c0ee40f8d (diff)
downloadservo-ef7b58f0cd02652d2d5c7d626d4a3f9790c080af.tar.gz
servo-ef7b58f0cd02652d2d5c7d626d4a3f9790c080af.zip
Check existence of property in get_property_jsval
Diffstat (limited to 'components/script/dom/bindings/conversions.rs')
-rw-r--r--components/script/dom/bindings/conversions.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/components/script/dom/bindings/conversions.rs b/components/script/dom/bindings/conversions.rs
index 17f72956ca1..c84adf64dbb 100644
--- a/components/script/dom/bindings/conversions.rs
+++ b/components/script/dom/bindings/conversions.rs
@@ -60,7 +60,7 @@ use js::jsapi::{
};
use js::jsapi::{JS_NewStringCopyN, JS_StringHasLatin1Chars};
use js::jsval::{ObjectValue, StringValue, UndefinedValue};
-use js::rust::wrappers::{JS_GetProperty, JS_IsArrayObject};
+use js::rust::wrappers::{JS_GetProperty, JS_HasProperty, JS_IsArrayObject};
use js::rust::{get_object_class, is_dom_class, is_dom_object, maybe_wrap_value, ToString};
use js::rust::{HandleId, HandleObject, HandleValue, MutableHandleValue};
use num_traits::Float;
@@ -596,11 +596,18 @@ pub unsafe fn get_property_jsval(
Ok(cname) => cname,
Err(_) => return Ok(()),
};
- JS_GetProperty(cx, object, cname.as_ptr(), rval);
- if JS_IsExceptionPending(cx) {
- return Err(Error::JSFailed);
+ let mut found = false;
+ if JS_HasProperty(cx, object, cname.as_ptr(), &mut found) && found {
+ JS_GetProperty(cx, object, cname.as_ptr(), rval);
+ if JS_IsExceptionPending(cx) {
+ return Err(Error::JSFailed);
+ }
+ Ok(())
+ } else if JS_IsExceptionPending(cx) {
+ Err(Error::JSFailed)
+ } else {
+ Ok(())
}
- Ok(())
}
/// Get a property from a JS object, and convert it to a Rust value.