Skip to content

Commit 5e8c98f

Browse files
committed
use the passed size argument in PyBytes_FromStringAndSize also for native objects
1 parent d6ecf4e commit 5e8c98f

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/TruffleCextBuiltins.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,15 +1160,23 @@ public static GetByteArrayNode create() {
11601160
return GetByteArrayNodeGen.create();
11611161
}
11621162

1163+
private static byte[] subRangeIfNeeded(byte[] ary, long n) {
1164+
if (ary.length > n && n >= 0 && n < Integer.MAX_VALUE) {
1165+
return Arrays.copyOf(ary, (int)n);
1166+
} else {
1167+
return ary;
1168+
}
1169+
}
1170+
11631171
@Specialization
1164-
byte[] doCArrayWrapper(CByteArrayWrapper o, @SuppressWarnings("unused") long n) {
1165-
return o.getByteArray();
1172+
byte[] doCArrayWrapper(CByteArrayWrapper o, long n) {
1173+
return subRangeIfNeeded(o.getByteArray(), n);
11661174
}
11671175

11681176
@Specialization
1169-
byte[] doSequenceArrayWrapper(PySequenceArrayWrapper obj, @SuppressWarnings("unused") long n,
1177+
byte[] doSequenceArrayWrapper(PySequenceArrayWrapper obj, long n,
11701178
@Cached("create()") BytesNodes.ToBytesNode toBytesNode) {
1171-
return toBytesNode.execute(obj.getDelegate());
1179+
return subRangeIfNeeded(toBytesNode.execute(obj.getDelegate()), n);
11721180
}
11731181

11741182
@Specialization(guards = "n < 0")
@@ -2158,11 +2166,11 @@ Object doGeneric(@SuppressWarnings("unused") Object module, PIBytesLike object,
21582166
}
21592167

21602168
@Specialization
2161-
Object doGeneric(Object module, PythonNativeObject object, @SuppressWarnings("unused") long size,
2169+
Object doGeneric(Object module, PythonNativeObject object, long size,
21622170
@Exclusive @Cached CExtNodes.GetNativeNullNode getNativeNullNode,
21632171
@Exclusive @Cached GetByteArrayNode getByteArrayNode) {
21642172
try {
2165-
return factory().createBytes(getByteArrayNode.execute(object.getPtr(), -1));
2173+
return factory().createBytes(getByteArrayNode.execute(object.getPtr(), size));
21662174
} catch (InteropException e) {
21672175
return raiseNative(getNativeNullNode.execute(module), PythonErrorType.TypeError, "%m", e);
21682176
}

0 commit comments

Comments
 (0)