GetCache() bug
-
Hello PluginCafe
I tried to insert a cache of selected object into the doc via Console but I got this error/crash.
doc.InsertObject(op.GetCache())
is it possible to bypass this behavior?
-
Hello,
this is no bug of the Python API. The code is just unsafe.
A given
BaseObject
(generator) owns the content of its cache. This cache may be aBaseObject
(and subsequent child objects) or nothing -None
.So if you operate with a cache you should always check if that cache is actually set.
GetCache()
can always returnNone
.cache = op.GetCache() if cache is None: return
But the real problem is that the given
BaseObject
owns the content of the cache. In your code, you take the cache and inset it into theBaseDocument
. Both the generator and theBaseObject
now think they do have sole ownership of the cache content. This can't work and is a perfect recipe for any kind of undefined behaviour - including a crash.So you cannot insert the cache into the
BaseDocument
. You must create a copy of the cache (GetClone()
) and insert that copy into theBaseDocument
.best wishes,
Sebastian -
Thanks, Sebastian for detailed explanation
But this still can be considered as a bug since it CRASHES c4d instead of raising an error message. -
Hi @merkvilson, this feedback has been communicated to our development team.
Cheers,
Maxime.