@@ -317,21 +317,28 @@ public static void FreeSerializationData(string key)
317
317
/// <param name="stream">A MemoryStream that contains the data to be placed in the capsule</param>
318
318
public static void StashSerializationData ( string key , MemoryStream stream )
319
319
{
320
- var data = stream . GetBuffer ( ) ;
321
- IntPtr mem = Marshal . AllocHGlobal ( IntPtr . Size + data . Length ) ;
322
- // store the length of the buffer first
323
- Marshal . WriteIntPtr ( mem , ( IntPtr ) data . Length ) ;
324
- Marshal . Copy ( data , 0 , mem + IntPtr . Size , data . Length ) ;
325
-
326
- try
320
+ if ( stream . TryGetBuffer ( out var data ) )
327
321
{
328
- using NewReference capsule = PyCapsule_New ( mem , IntPtr . Zero , IntPtr . Zero ) ;
329
- int res = PySys_SetObject ( key , capsule . BorrowOrThrow ( ) ) ;
330
- PythonException . ThrowIfIsNotZero ( res ) ;
322
+ IntPtr mem = Marshal . AllocHGlobal ( IntPtr . Size + data . Count ) ;
323
+
324
+ // store the length of the buffer first
325
+ Marshal . WriteIntPtr ( mem , ( IntPtr ) data . Count ) ;
326
+ Marshal . Copy ( data . Array , data . Offset , mem + IntPtr . Size , data . Count ) ;
327
+
328
+ try
329
+ {
330
+ using NewReference capsule = PyCapsule_New ( mem , IntPtr . Zero , IntPtr . Zero ) ;
331
+ int res = PySys_SetObject ( key , capsule . BorrowOrThrow ( ) ) ;
332
+ PythonException . ThrowIfIsNotZero ( res ) ;
333
+ }
334
+ catch
335
+ {
336
+ Marshal . FreeHGlobal ( mem ) ;
337
+ }
331
338
}
332
- catch
339
+ else
333
340
{
334
- Marshal . FreeHGlobal ( mem ) ;
341
+ throw new NotImplementedException ( $ " { nameof ( stream ) } must be exposable" ) ;
335
342
}
336
343
337
344
}
0 commit comments