summaryrefslogtreecommitdiffstats
path: root/generic/tclOO.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclOO.c')
-rw-r--r--generic/tclOO.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/generic/tclOO.c b/generic/tclOO.c
index b314df7..edee7af 100644
--- a/generic/tclOO.c
+++ b/generic/tclOO.c
@@ -640,6 +640,10 @@ KillFoundation(
* call TclOOAddToSubclasses() to add it to the right class's list of
* subclasses.
*
+ * Returns:
+ * Pointer to the object structure created, or NULL if a specific
+ * namespace was asked for but couldn't be created.
+ *
* ----------------------------------------------------------------------
*/
@@ -682,11 +686,16 @@ AllocObject(
if (nsNameStr != NULL) {
oPtr->namespacePtr = Tcl_CreateNamespace(interp, nsNameStr, oPtr, NULL);
- if (oPtr->namespacePtr != NULL) {
- creationEpoch = ++fPtr->tsdPtr->nsCount;
- goto configNamespace;
+ if (oPtr->namespacePtr == NULL) {
+ /*
+ * Couldn't make the specific namespace. Report as an error.
+ * [Bug 154f0982f2]
+ */
+ ckfree(oPtr);
+ return NULL;
}
- Tcl_ResetResult(interp);
+ creationEpoch = ++fPtr->tsdPtr->nsCount;
+ goto configNamespace;
}
while (1) {
@@ -1888,6 +1897,9 @@ TclNewObjectInstanceCommon(
*/
oPtr = AllocObject(interp, simpleName, nsPtr, nsNameStr);
+ if (oPtr == NULL) {
+ return NULL;
+ }
oPtr->selfCls = classPtr;
AddRef(classPtr->thisPtr);
TclOOAddToInstances(oPtr, classPtr);