@@ -33,6 +33,7 @@ import java.lang.annotation.Annotation
3333import java.lang.reflect.Array
3434import java.lang.reflect.Field
3535import java.lang.reflect.ParameterizedType
36+ import java.security.ProtectionDomain
3637
3738/**
3839 * A data binder that will bind nested Maps to an object.
@@ -220,7 +221,7 @@ class SimpleDataBinder implements DataBinder {
220221 def metaProperty = obj. metaClass. getMetaProperty propName
221222
222223 if (metaProperty) { // normal property
223- if (isOkToBind(metaProperty. name , whiteList, blackList)) {
224+ if (isOkToBind(metaProperty, whiteList, blackList)) {
224225 def val = source[key]
225226 try {
226227 def converter = getValueConverter(obj, metaProperty. name)
@@ -237,15 +238,15 @@ class SimpleDataBinder implements DataBinder {
237238 def descriptor = getIndexedPropertyReferenceDescriptor propName
238239 if (descriptor) { // indexed property
239240 metaProperty = obj. metaClass. getMetaProperty descriptor. propertyName
240- if (metaProperty && isOkToBind(metaProperty. name , whiteList, blackList)) {
241+ if (metaProperty && isOkToBind(metaProperty, whiteList, blackList)) {
241242 def val = source. getPropertyValue key
242243 processIndexedProperty obj, metaProperty, descriptor, val, source, listener, errors
243244 }
244245 } else if (propName. startsWith(' _' ) && propName. length() > 1 ) { // boolean special handling
245246 def restOfPropertyName = propName[1 .. -1 ]
246247 if (! source. containsProperty(restOfPropertyName)) {
247248 metaProperty = obj. metaClass. getMetaProperty restOfPropertyName
248- if (metaProperty && isOkToBind(restOfPropertyName , whiteList, blackList)) {
249+ if (metaProperty && isOkToBind(metaProperty , whiteList, blackList)) {
249250 if ((Boolean == metaProperty. type || Boolean . TYPE == metaProperty. type)) {
250251 bindProperty obj, source, metaProperty, false , listener, errors
251252 }
@@ -257,8 +258,12 @@ class SimpleDataBinder implements DataBinder {
257258 }
258259 }
259260
260- protected isOkToBind (String propName , List whiteList , List blackList ) {
261- ' metaClass' != propName && ! blackList?. contains(propName) && (! whiteList || whiteList. contains(propName) || whiteList. find { it -> it?. toString()?. startsWith(propName + ' .' )})
261+ protected boolean isOkToBind (String propName , List whiteList , List blackList ) {
262+ ' class' != propName && ' classLoader' != propName && ' protectionDomain' != propName && ' metaClass' != propName && ! blackList?. contains(propName) && (! whiteList || whiteList. contains(propName) || whiteList. find { it -> it?. toString()?. startsWith(propName + ' .' )})
263+ }
264+
265+ protected boolean isOkToBind (MetaProperty property , List whitelist , List blacklist ) {
266+ isOkToBind(property. name, whitelist, blacklist) && (property. type != null && ! (ClassLoader . class. isAssignableFrom(property. type) || ProtectionDomain . class. isAssignableFrom(property. type)))
262267 }
263268
264269 protected IndexedPropertyReferenceDescriptor getIndexedPropertyReferenceDescriptor (propName ) {
0 commit comments