Skip to content

Commit c4c68b1

Browse files
authored
add PROTECT/UNPROTECT pairs for rchk (#235)
1 parent afc29e4 commit c4c68b1

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/handle-sfc.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,20 +302,23 @@ void wk_update_vector_meta_from_sfc(SEXP x, wk_vector_meta_t* vector_meta) {
302302
}
303303

304304
// if z or m coords are present, ranges are provided
305-
SEXP z_range = Rf_getAttrib(x, Rf_install("z_range"));
305+
SEXP z_range;
306+
PROTECT(z_range = Rf_getAttrib(x, Rf_install("z_range")));
306307
if (z_range != R_NilValue) {
307308
vector_meta->flags |= WK_FLAG_HAS_Z;
308309
}
309310

310-
SEXP m_range = Rf_getAttrib(x, Rf_install("m_range"));
311+
SEXP m_range;
312+
PROTECT(m_range = Rf_getAttrib(x, Rf_install("m_range")));
311313
if (m_range != R_NilValue) {
312314
vector_meta->flags |= WK_FLAG_HAS_M;
313315
}
314316

315317
// sfc objects come with a cached bbox
316318
// This appears to always be xmin, ymin, xmax, ymax
317319
// when attached to an sfc object
318-
SEXP bbox = Rf_getAttrib(x, Rf_install("bbox"));
320+
SEXP bbox;
321+
PROTECT(bbox = Rf_getAttrib(x, Rf_install("bbox")));
319322
if ((Rf_xlength(x) > 0) && (bbox != R_NilValue)) {
320323
vector_meta->bounds_min[0] = REAL(bbox)[0];
321324
vector_meta->bounds_min[1] = REAL(bbox)[1];
@@ -338,15 +341,20 @@ void wk_update_vector_meta_from_sfc(SEXP x, wk_vector_meta_t* vector_meta) {
338341
vector_meta->bounds_min[2] = REAL(m_range)[1];
339342
vector_meta->bounds_max[2] = REAL(m_range)[2];
340343
}
344+
UNPROTECT(3);
341345
}
342346

343347
double wk_sfc_precision(SEXP x) {
344-
SEXP prec = Rf_getAttrib(x, Rf_install("precision"));
348+
SEXP prec;
349+
PROTECT(prec = Rf_getAttrib(x, Rf_install("precision")));
345350
if ((TYPEOF(prec) == INTSXP) && (Rf_length(prec) == 1)) {
351+
UNPROTECT(1);
346352
return INTEGER(prec)[0];
347353
} else if ((TYPEOF(prec) == REALSXP) && (Rf_length(prec) == 1)) {
354+
UNPROTECT(1);
348355
return REAL(prec)[0];
349356
} else {
357+
UNPROTECT(1);
350358
return WK_PRECISION_NONE;
351359
}
352360
}

0 commit comments

Comments
 (0)