Untrusted code execution

Random832 random832 at fastmail.com
Wed Apr 6 14:38:58 EDT 2016


On Wed, Apr 6, 2016, at 12:04, Chris Angelico wrote:
> On Thu, Apr 7, 2016 at 1:41 AM, Ian Kelly <ian.g.kelly at gmail.com> wrote:
> > type might also be a concern since it can be used to assemble
> > arbitrary classes.
>> Sadly, this means denying the ability to interrogate an object for its
> type. And no, this won't do:
>> def safe_type(obj): return type(obj)
>> because all you need is safe_type(safe_type(1)) and you've just
> regained access to the original 'type' type.

tpdict = {}
class typeproxy:
 def __new__(cls, t):
 if t in tpdict: return tpdict[t] # so is-comparison works
 tpdict[t] = self = object.__new__(cls)
 self._type = t
 return self
 def __instancecheck__(self, obj):
 return isinstance(obj, self._type)
 def __subclasscheck__(self, cls2):
 if isinstance(cls2, typeproxy): cls2 = cls2._type
 return issubclass(self._type, cls2)
 def __call__(self, obj):
 if isinstance(obj, type):
 return typeproxy(type(obj))
 else:
 return type(obj)
safe_type = typeproxy(type)


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /