@@ -1160,15 +1160,23 @@ public static GetByteArrayNode create() {
1160
1160
return GetByteArrayNodeGen .create ();
1161
1161
}
1162
1162
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
+
1163
1171
@ 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 );
1166
1174
}
1167
1175
1168
1176
@ Specialization
1169
- byte [] doSequenceArrayWrapper (PySequenceArrayWrapper obj , @ SuppressWarnings ( "unused" ) long n ,
1177
+ byte [] doSequenceArrayWrapper (PySequenceArrayWrapper obj , long n ,
1170
1178
@ Cached ("create()" ) BytesNodes .ToBytesNode toBytesNode ) {
1171
- return toBytesNode .execute (obj .getDelegate ());
1179
+ return subRangeIfNeeded ( toBytesNode .execute (obj .getDelegate ()), n );
1172
1180
}
1173
1181
1174
1182
@ Specialization (guards = "n < 0" )
@@ -2158,11 +2166,11 @@ Object doGeneric(@SuppressWarnings("unused") Object module, PIBytesLike object,
2158
2166
}
2159
2167
2160
2168
@ Specialization
2161
- Object doGeneric (Object module , PythonNativeObject object , @ SuppressWarnings ( "unused" ) long size ,
2169
+ Object doGeneric (Object module , PythonNativeObject object , long size ,
2162
2170
@ Exclusive @ Cached CExtNodes .GetNativeNullNode getNativeNullNode ,
2163
2171
@ Exclusive @ Cached GetByteArrayNode getByteArrayNode ) {
2164
2172
try {
2165
- return factory ().createBytes (getByteArrayNode .execute (object .getPtr (), - 1 ));
2173
+ return factory ().createBytes (getByteArrayNode .execute (object .getPtr (), size ));
2166
2174
} catch (InteropException e ) {
2167
2175
return raiseNative (getNativeNullNode .execute (module ), PythonErrorType .TypeError , "%m" , e );
2168
2176
}
0 commit comments