Skip to content

Commit ede9433

Browse files
committed
Fix: module defines can be NULL
1 parent 97541a9 commit ede9433

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyContextFunctions.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.UnicodeFromWcharNode;
9292
import com.oracle.graal.python.builtins.objects.cext.common.CExtToNativeNode;
9393
import com.oracle.graal.python.builtins.objects.cext.common.ConversionNodeSupplier;
94+
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyContextFunction;
9495
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyNodes.HPyAsContextNode;
9596
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyNodes.HPyAsHandleNode;
9697
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyNodes.HPyAsPythonObjectNode;
@@ -340,13 +341,17 @@ Object execute(Object[] arguments,
340341

341342
// process HPy methods
342343
Object moduleDefines = callGetterNode.call(context, GRAAL_HPY_MODULE_GET_DEFINES, moduleDef);
343-
if (!ptrLib.hasArrayElements(moduleDefines)) {
344-
CompilerDirectives.transferToInterpreterAndInvalidate();
345-
throw raiseNode.raise(PythonBuiltinClassType.SystemError, "field 'defines' did not return an array");
346-
}
347-
348344
try {
349-
long nModuleDefines = ptrLib.getArraySize(moduleDefines);
345+
long nModuleDefines;
346+
if (ptrLib.isNull(moduleDefines)) {
347+
nModuleDefines = 0;
348+
} else if (!ptrLib.hasArrayElements(moduleDefines)) {
349+
CompilerDirectives.transferToInterpreterAndInvalidate();
350+
throw raiseNode.raise(PythonBuiltinClassType.SystemError, "field 'defines' did not return an array");
351+
} else {
352+
nModuleDefines = ptrLib.getArraySize(moduleDefines);
353+
}
354+
350355
for (long i = 0; i < nModuleDefines; i++) {
351356
Object moduleDefine = ptrLib.readArrayElement(moduleDefines, i);
352357
int kind = castToJavaIntNode.execute(callGetterNode.call(context, GRAAL_HPY_DEF_GET_KIND, moduleDefine));

0 commit comments

Comments
 (0)