@@ -473,14 +473,14 @@ SEXP nano_decode(unsigned char *buf, const size_t sz, const uint8_t mod, SEXP ho
473
473
data = Rf_allocVector (RAWSXP , sz );
474
474
break ;
475
475
case 9 :
476
- data = nano_raw_char (buf , sz );
477
- return data ;
476
+ return nano_raw_char (buf , sz );
478
477
default :
479
- data = nano_unserialize (buf , sz , hook );
480
- return data ;
478
+ return nano_unserialize (buf , sz , hook );
481
479
}
482
480
483
- memcpy (NANO_DATAPTR (data ), buf , sz );
481
+ if (sz )
482
+ memcpy (NANO_DATAPTR (data ), buf , sz );
483
+
484
484
return data ;
485
485
486
486
}
@@ -633,9 +633,12 @@ SEXP rnng_marker_set(SEXP x) {
633
633
634
634
SEXP rnng_marker_read (SEXP x ) {
635
635
636
- unsigned char * buf = (unsigned char * ) NANO_DATAPTR (x );
637
-
638
- return Rf_ScalarLogical (TYPEOF (x ) == RAWSXP && XLENGTH (x ) > 12 && buf [0 ] == 0x7 && buf [3 ] == 0x1 );
636
+ int res = 0 ;
637
+ if (TYPEOF (x ) == RAWSXP && XLENGTH (x ) > 12 ) {
638
+ unsigned char * buf = (unsigned char * ) DATAPTR_RO (x );
639
+ res = buf [0 ] == 0x7 && buf [3 ] == 0x1 ;
640
+ }
641
+ return Rf_ScalarLogical (res );
639
642
640
643
}
641
644
@@ -648,10 +651,11 @@ SEXP rnng_header_set(SEXP x) {
648
651
649
652
SEXP rnng_header_read (SEXP x ) {
650
653
651
- unsigned char * buf = (unsigned char * ) NANO_DATAPTR (x );
652
654
int res = 0 ;
653
- if (TYPEOF (x ) == RAWSXP && XLENGTH (x ) > 12 && buf [0 ] == 0x7 ) {
654
- memcpy (& res , buf + 4 , sizeof (int ));
655
+ if (TYPEOF (x ) == RAWSXP && XLENGTH (x ) > 12 ) {
656
+ unsigned char * buf = (unsigned char * ) DATAPTR_RO (x );
657
+ if (buf [0 ] == 0x7 )
658
+ memcpy (& res , buf + 4 , sizeof (int ));
655
659
}
656
660
return Rf_ScalarInteger (res );
657
661
0 commit comments