@@ -447,8 +447,15 @@ static void NpyArrPassThru_iterEnd(JSOBJ obj, JSONTypeContext *tc) {
447
447
npyarr -> curdim -- ;
448
448
npyarr -> dataptr -= npyarr -> stride * npyarr -> index [npyarr -> stridedim ];
449
449
npyarr -> stridedim -= npyarr -> inc ;
450
- npyarr -> dim = PyArray_DIM (npyarr -> array , npyarr -> stridedim );
451
- npyarr -> stride = PyArray_STRIDE (npyarr -> array , npyarr -> stridedim );
450
+
451
+ if (!PyArray_Check (npyarr -> array )) {
452
+ PyErr_SetString (PyExc_TypeError ,
453
+ "NpyArrayPassThru_iterEnd received a non-array object" );
454
+ return ;
455
+ }
456
+ const PyArrayObject * arrayobj = (const PyArrayObject * )npyarr -> array ;
457
+ npyarr -> dim = PyArray_DIM (arrayobj , npyarr -> stridedim );
458
+ npyarr -> stride = PyArray_STRIDE (arrayobj , npyarr -> stridedim );
452
459
npyarr -> dataptr += npyarr -> stride ;
453
460
454
461
NpyArr_freeItemValue (obj , tc );
@@ -467,12 +474,19 @@ static int NpyArr_iterNextItem(JSOBJ obj, JSONTypeContext *tc) {
467
474
468
475
NpyArr_freeItemValue (obj , tc );
469
476
470
- if (PyArray_ISDATETIME (npyarr -> array )) {
477
+ if (!PyArray_Check (npyarr -> array )) {
478
+ PyErr_SetString (PyExc_TypeError ,
479
+ "NpyArr_iterNextItem received a non-array object" );
480
+ return 0 ;
481
+ }
482
+ PyArrayObject * arrayobj = (PyArrayObject * )npyarr -> array ;
483
+
484
+ if (PyArray_ISDATETIME (arrayobj )) {
471
485
GET_TC (tc )-> itemValue = obj ;
472
486
Py_INCREF (obj );
473
- ((PyObjectEncoder * )tc -> encoder )-> npyType = PyArray_TYPE (npyarr -> array );
487
+ ((PyObjectEncoder * )tc -> encoder )-> npyType = PyArray_TYPE (arrayobj );
474
488
// Also write the resolution (unit) of the ndarray
475
- PyArray_Descr * dtype = PyArray_DESCR (npyarr -> array );
489
+ PyArray_Descr * dtype = PyArray_DESCR (arrayobj );
476
490
((PyObjectEncoder * )tc -> encoder )-> valueUnit =
477
491
get_datetime_metadata_from_dtype (dtype ).base ;
478
492
((PyObjectEncoder * )tc -> encoder )-> npyValue = npyarr -> dataptr ;
@@ -505,8 +519,15 @@ static int NpyArr_iterNext(JSOBJ _obj, JSONTypeContext *tc) {
505
519
506
520
npyarr -> curdim ++ ;
507
521
npyarr -> stridedim += npyarr -> inc ;
508
- npyarr -> dim = PyArray_DIM (npyarr -> array , npyarr -> stridedim );
509
- npyarr -> stride = PyArray_STRIDE (npyarr -> array , npyarr -> stridedim );
522
+ if (!PyArray_Check (npyarr -> array )) {
523
+ PyErr_SetString (PyExc_TypeError ,
524
+ "NpyArr_iterNext received a non-array object" );
525
+ return 0 ;
526
+ }
527
+ const PyArrayObject * arrayobj = (const PyArrayObject * )npyarr -> array ;
528
+
529
+ npyarr -> dim = PyArray_DIM (arrayobj , npyarr -> stridedim );
530
+ npyarr -> stride = PyArray_STRIDE (arrayobj , npyarr -> stridedim );
510
531
npyarr -> index [npyarr -> stridedim ] = 0 ;
511
532
512
533
((PyObjectEncoder * )tc -> encoder )-> npyCtxtPassthru = npyarr ;
@@ -1610,7 +1631,14 @@ static void Object_beginTypeContext(JSOBJ _obj, JSONTypeContext *tc) {
1610
1631
if (!values ) {
1611
1632
goto INVALID ;
1612
1633
}
1613
- pc -> columnLabelsLen = PyArray_DIM (pc -> newObj , 0 );
1634
+
1635
+ if (!PyArray_Check (pc -> newObj )) {
1636
+ PyErr_SetString (PyExc_TypeError ,
1637
+ "Object_beginTypeContext received a non-array object" );
1638
+ goto INVALID ;
1639
+ }
1640
+ const PyArrayObject * arrayobj = (const PyArrayObject * )pc -> newObj ;
1641
+ pc -> columnLabelsLen = PyArray_DIM (arrayobj , 0 );
1614
1642
pc -> columnLabels = NpyArr_encodeLabels ((PyArrayObject * )values , enc ,
1615
1643
pc -> columnLabelsLen );
1616
1644
if (!pc -> columnLabels ) {
0 commit comments