Skip to content

Commit 7c8bfd1

Browse files
fangerertimfel
authored andcommitted
Fix error handling in PyBytes_AsString(AndSize)
1 parent 59efeac commit 7c8bfd1

File tree

2 files changed

+17
-17
lines changed

2 files changed

+17
-17
lines changed

graalpython/com.oracle.graal.python.cext/src/bytesobject.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ char* PyBytes_AsString(PyObject *obj) {
7979

8080
int PyBytes_AsStringAndSize(PyObject *obj, char **s, Py_ssize_t *len) {
8181
*s = (char*)GraalPyTruffle_Bytes_AsString(obj);
82+
if (*s == NULL) {
83+
return -1;
84+
}
8285
if (len != NULL) {
8386
*len = GraalPyBytes_Size(obj);
8487
return 0;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextBytesBuiltins.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,17 @@
7373
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
7474
import com.oracle.graal.python.builtins.objects.cext.PythonAbstractNativeObject;
7575
import com.oracle.graal.python.builtins.objects.cext.capi.CApiGuards;
76-
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes;
76+
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PCallCapiFunction;
7777
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.ToSulongNode;
7878
import com.oracle.graal.python.builtins.objects.cext.capi.NativeMember;
7979
import com.oracle.graal.python.builtins.objects.cext.capi.PySequenceArrayWrapper;
8080
import com.oracle.graal.python.builtins.objects.cext.capi.PythonNativeWrapper;
8181
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor;
8282
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonNode;
83-
import com.oracle.graal.python.builtins.objects.cext.common.CArrayWrappers;
8483
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.GetByteArrayNode;
8584
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
8685
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.GetItemScalarNode;
8786
import com.oracle.graal.python.builtins.objects.ints.PInt;
88-
import com.oracle.graal.python.builtins.objects.str.PString;
8987
import com.oracle.graal.python.builtins.objects.str.StringBuiltins.EncodeNode;
9088
import com.oracle.graal.python.builtins.objects.str.StringBuiltins.ModNode;
9189
import com.oracle.graal.python.lib.PyBytesCheckNode;
@@ -97,8 +95,8 @@
9795
import com.oracle.graal.python.nodes.PRaiseNode;
9896
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
9997
import com.oracle.graal.python.nodes.object.InlinedGetClassNode;
98+
import com.oracle.graal.python.nodes.object.InlinedGetClassNode.GetPythonObjectClassNode;
10099
import com.oracle.graal.python.nodes.util.CastToByteNode;
101-
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
102100
import com.oracle.graal.python.runtime.exception.PythonErrorType;
103101
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
104102
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
@@ -132,7 +130,7 @@ Object doOther(PythonAbstractNativeObject obj,
132130
@Bind("this") Node inliningTarget,
133131
@Cached PyBytesCheckNode check,
134132
@Cached ToSulongNode toSulongNode,
135-
@Cached CExtNodes.PCallCapiFunction callMemberGetterNode) {
133+
@Cached PCallCapiFunction callMemberGetterNode) {
136134
if (check.execute(inliningTarget, obj)) {
137135
return callMemberGetterNode.call(NativeMember.OB_SIZE.getGetterFunctionName(), toSulongNode.execute(obj));
138136
}
@@ -407,21 +405,20 @@ static Object doBytes(PBytes bytes) {
407405
}
408406

409407
@Specialization
410-
static Object doUnicode(PString str,
411-
@Cached CastToTruffleStringNode castToStringNode) {
412-
return new CArrayWrappers.CStringWrapper(castToStringNode.execute(str));
413-
}
414-
415-
@Specialization
416-
static Object doNative(PythonAbstractNativeObject obj,
417-
@Cached CExtNodes.ToSulongNode toSulong,
418-
@Cached CExtNodes.PCallCapiFunction callMemberGetterNode) {
419-
return callMemberGetterNode.call(NativeMember.OB_SVAL.getGetterFunctionName(), toSulong.execute(obj));
408+
Object doNative(PythonAbstractNativeObject obj,
409+
@Cached GetPythonObjectClassNode getClassNode,
410+
@Cached IsSubtypeNode isSubtypeNode,
411+
@Cached ToSulongNode toSulong,
412+
@Cached PCallCapiFunction callMemberGetterNode) {
413+
if (isSubtypeNode.execute(getClassNode.execute(this, obj), PythonBuiltinClassType.PBytes)) {
414+
return callMemberGetterNode.call(NativeMember.OB_SVAL.getGetterFunctionName(), toSulong.execute(obj));
415+
}
416+
return doError(obj);
420417
}
421418

422419
@Fallback
423-
Object doUnicode(Object o) {
424-
throw raise(PythonErrorType.TypeError, ErrorMessages.EXPECTED_S_P_FOUND, "bytes", o);
420+
Object doError(Object obj) {
421+
throw raise(PythonErrorType.TypeError, ErrorMessages.EXPECTED_S_P_FOUND, "bytes", obj);
425422
}
426423
}
427424
}

0 commit comments

Comments
 (0)