Skip to content

Commit def4d0a

Browse files
committed
fixed potential crash in MethodBinding.__signature__
1 parent 61478ef commit def4d0a

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/runtime/methodbinding.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ PyObject Singature {
7676

7777
var parameters = new PyList();
7878
var parameterClass = primaryParameters.Length > 0 ? Runtime.InspectModule.GetAttr("Parameter") : null;
79-
var positionalOrKeyword = primaryParameters.Length > 0 ? parameterClass.GetAttr("POSITIONAL_OR_KEYWORD") : null;
79+
var positionalOrKeyword = parameterClass?.GetAttr("POSITIONAL_OR_KEYWORD");
8080
for (int i = 0; i < primaryParameters.Length; i++) {
8181
var parameter = primaryParameters[i];
8282
var alternatives = infos.Select(info => {
@@ -141,7 +141,11 @@ public static IntPtr tp_getattro(IntPtr ob, IntPtr key)
141141
return om.pyHandle;
142142
case "__signature__":
143143
var sig = self.Singature;
144-
return sig.Handle;
144+
if (sig is null)
145+
{
146+
return Runtime.PyObject_GenericGetAttr(ob, key);
147+
}
148+
return sig.Reference.DangerousIncRefOrNull();
145149
case "__name__":
146150
var pyName = self.m.GetName();
147151
return pyName == IntPtr.Zero

0 commit comments

Comments
 (0)