From 850127e55a046dbc7e94443086d68f6dd5cb6780 Mon Sep 17 00:00:00 2001 From: mike Date: Wed, 10 Apr 2024 21:32:53 +1000 Subject: [PATCH] PROTECT() more to fix rchk issues --- DESCRIPTION | 2 +- NEWS.md | 6 +++++- src/R-yyjson-serialize.c | 9 ++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 1a3ba50..3f5b55d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: yyjsonr Type: Package Title: Fast 'JSON', 'NDJSON' and 'GeoJSON' Parser and Generator -Version: 0.1.19 +Version: 0.1.20 Authors@R: c( person("Mike", "Cheng", role = c("aut", "cre", 'cph'), email = "mikefc@coolbutuseless.com"), diff --git a/NEWS.md b/NEWS.md index 26e3b43..1eb6154 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,8 +1,12 @@ +# yyjsonr 0.1.20 2024-04-10 + +* Fix outstanding `rchk` errors + # yyjsonr 0.1.19 2024-04-10 -* Release to CRAN +* Prepare for CRAN # yyjsonr 0.1.18.9007 2024-04-09 diff --git a/src/R-yyjson-serialize.c b/src/R-yyjson-serialize.c index 56795cd..5fe0d6d 100644 --- a/src/R-yyjson-serialize.c +++ b/src/R-yyjson-serialize.c @@ -686,12 +686,13 @@ yyjson_mut_val *env_to_json_object(SEXP env_, yyjson_mut_doc *doc, serialize_opt for (int i = 0; i < length(nms_); i++) { const char *varname = CHAR(STRING_ELT(nms_, i)); - SEXP elem_ = Rf_findVarInFrame(env_, installChar(mkChar(varname))); + SEXP elem_ = PROTECT(Rf_findVarInFrame(env_, installChar(mkChar(varname)))); if (elem_ != R_UnboundValue) { yyjson_mut_val *key = yyjson_mut_strcpy(doc, varname); yyjson_mut_val *val = serialize_core(elem_, doc, opt); yyjson_mut_obj_add(obj, key, val); } + UNPROTECT(1); } UNPROTECT(nprotect); @@ -746,7 +747,7 @@ yyjson_mut_val *named_list_to_json_object(SEXP list_, yyjson_mut_doc *doc, seria yyjson_mut_val *obj = yyjson_mut_obj(doc); - SEXP nms_ = getAttrib(list_, R_NamesSymbol); + SEXP nms_ = PROTECT(getAttrib(list_, R_NamesSymbol)); for (int i = 0; i < length(list_); i++) { SEXP elem_ = VECTOR_ELT(list_, i); @@ -764,6 +765,7 @@ yyjson_mut_val *named_list_to_json_object(SEXP list_, yyjson_mut_doc *doc, seria yyjson_mut_obj_add(obj, key, val); } + UNPROTECT(1); return obj; } @@ -865,7 +867,7 @@ unsigned int *detect_data_frame_types(SEXP df_, serialize_options *opt) { yyjson_mut_val *data_frame_row_to_json_object(SEXP df_, unsigned int *col_type, unsigned int row, int skip_col, yyjson_mut_doc *doc, serialize_options *opt) { // get data.frame names - SEXP nms_ = getAttrib(df_, R_NamesSymbol); + SEXP nms_ = PROTECT(getAttrib(df_, R_NamesSymbol)); unsigned int ncols = (unsigned int)length(df_); yyjson_mut_val *obj = yyjson_mut_obj(doc); @@ -926,6 +928,7 @@ yyjson_mut_val *data_frame_row_to_json_object(SEXP df_, unsigned int *col_type, } } + UNPROTECT(1); return obj; }