@@ -534,6 +534,15 @@ TypeTreeNodeObject *get_ref_type_node(PyObject *ref_object, PyObject *assetsfile
534534 return NULL ;
535535 }
536536
537+ if (PyUnicode_GET_LENGTH (cls) == 0 )
538+ {
539+ Py_DECREF (ref_types);
540+ Py_DECREF (cls);
541+ Py_DECREF (ns);
542+ Py_DECREF (asm_);
543+ return (TypeTreeNodeObject *)Py_None;
544+ }
545+
537546 Py_ssize_t ref_types_len = PyList_Size (ref_types);
538547 TypeTreeNodeObject *ref_type_node = NULL ;
539548 for (Py_ssize_t i = 0 ; i < ref_types_len; i++)
@@ -655,6 +664,10 @@ PyObject *read_typetree_value(ReaderT *reader, TypeTreeNodeObject *node, TypeTre
655664 Py_DECREF (value);
656665 return NULL ;
657666 }
667+ else if (ref_node == (TypeTreeNodeObject *)Py_None)
668+ {
669+ continue ;
670+ }
658671 child_value = read_typetree_value<swap>(reader, ref_node, config);
659672 Py_DECREF (ref_node);
660673 }
@@ -676,19 +689,22 @@ PyObject *read_typetree_value(ReaderT *reader, TypeTreeNodeObject *node, TypeTre
676689 // dict increases ref count, so we need to decref here
677690 Py_DECREF (child_value);
678691 }
679- PyObject *clz = PyObject_GetAttrString (config->classes , " Object" );
680- if (clz == NULL )
692+ if (!config->as_dict )
681693 {
682- PyErr_SetString (PyExc_ValueError, " Failed to get class" );
694+ PyObject *clz = PyObject_GetAttrString (config->classes , " Object" );
695+ if (clz == NULL )
696+ {
697+ PyErr_SetString (PyExc_ValueError, " Failed to get class" );
698+ Py_DECREF (value);
699+ return NULL ;
700+ }
701+ PyObject *args = PyTuple_New (0 );
702+ PyObject *instance = PyObject_Call (clz, args, value);
703+ Py_DECREF (clz);
704+ Py_DECREF (args);
683705 Py_DECREF (value);
684- return NULL ;
706+ value = instance ;
685707 }
686- PyObject *args = PyTuple_New (0 );
687- PyObject *instance = PyObject_Call (clz, args, value);
688- Py_DECREF (clz);
689- Py_DECREF (args);
690- Py_DECREF (value);
691- value = instance;
692708 break ;
693709 }
694710 default :
@@ -936,6 +952,12 @@ PyObject *read_typetree(PyObject *self, PyObject *args, PyObject *kwargs)
936952
937953 PyBuffer_Release (&view);
938954
955+ if (reader.ptr != reader.end )
956+ {
957+ Py_DecRef (value);
958+ return PyErr_Format (PyExc_ValueError, " Read %ld bytes, %ld remaining" , reader.ptr - reader.start , reader.end - reader.ptr );
959+ }
960+
939961 return value;
940962}
941963
0 commit comments