@@ -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