@@ -486,8 +486,8 @@ static int cxoVar_setValueBytes(cxoVar *var, uint32_t pos, dpiData *data,
486486 dpiData * tempVarData , * sourceData ;
487487 dpiOracleTypeNum oracleTypeNum ;
488488 dpiNativeTypeNum nativeTypeNum ;
489+ uint32_t i , numElements ;
489490 dpiVar * tempVarHandle ;
490- uint32_t i ;
491491 int status ;
492492
493493 if (buffer -> size > var -> bufferSize ) {
@@ -497,15 +497,28 @@ static int cxoVar_setValueBytes(cxoVar *var, uint32_t pos, dpiData *data,
497497 nativeTypeNum , var -> allocatedElements , buffer -> size , 0 ,
498498 var -> isArray , NULL , & tempVarHandle , & tempVarData ) < 0 )
499499 return cxoError_raiseAndReturnInt ();
500+ if (var -> isArray ) {
501+ if (dpiVar_getNumElementsInArray (var -> handle , & numElements ) < 0 ) {
502+ cxoError_raiseAndReturnInt ();
503+ dpiVar_release (tempVarHandle );
504+ return -1 ;
505+ }
506+ if (dpiVar_setNumElementsInArray (tempVarHandle , numElements ) < 0 ) {
507+ cxoError_raiseAndReturnInt ();
508+ dpiVar_release (tempVarHandle );
509+ return -1 ;
510+ }
511+ }
500512 for (i = 0 ; i < var -> allocatedElements ; i ++ ) {
501513 sourceData = & var -> data [i ];
502514 if (i == pos || sourceData -> isNull )
503515 continue ;
504516 if (dpiVar_setFromBytes (tempVarHandle , i ,
505517 sourceData -> value .asBytes .ptr ,
506518 sourceData -> value .asBytes .length ) < 0 ) {
519+ cxoError_raiseAndReturnInt ();
507520 dpiVar_release (tempVarHandle );
508- return cxoError_raiseAndReturnInt () ;
521+ return -1 ;
509522 }
510523 }
511524 dpiVar_release (var -> handle );
0 commit comments