Skip to content

Commit 7bd9f8b

Browse files
committed
restrict scope of eval parse result
1 parent 767364a commit 7bd9f8b

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

src/server.c

+6-8
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,10 @@ void rest_start(void *arg) {
237237

238238
}
239239

240-
SEXP nano_eval_res;
240+
static SEXP nano_parse_eval_res;
241241

242242
void parse_eval_safe(void *data) {
243-
nano_eval_res = R_ParseEvalString((const char *) data, R_GlobalEnv);
243+
nano_parse_eval_res = R_ParseEvalString((const char *) data, R_GlobalEnv);
244244
}
245245

246246
void inproc_server(const char* url) {
@@ -252,27 +252,25 @@ void inproc_server(const char* url) {
252252
if ((xc = nng_rep0_open(&s)) || (xc = nng_listen(s, url, NULL, 0)))
253253
fatal("unable to set up inproc", xc);
254254

255-
nano_eval_res = R_BlankScalarString;
256-
257255
for (;;) {
258256
if ((xc = nng_recvmsg(s, &msg, 0)))
259257
fatal("inproc recvmsg", xc);
260258

261259
const char *body = nng_msg_body(msg);
262260
nano_buf buf;
263261

262+
nano_parse_eval_res = R_BlankScalarString;
264263
R_ToplevelExec(parse_eval_safe, (void *) body);
265264

266-
if (TYPEOF(nano_eval_res) == STRSXP) {
267-
const char *string = NANO_STRING(nano_eval_res);
265+
if (TYPEOF(nano_parse_eval_res) == STRSXP) {
266+
const char *string = NANO_STRING(nano_parse_eval_res);
268267
buf.buf = (unsigned char *) string;
269268
buf.cur = strlen(string);
270269
} else {
271-
nano_serialize(&buf, nano_eval_res, R_NilValue);
270+
nano_serialize(&buf, nano_parse_eval_res, R_NilValue);
272271
}
273272
nng_msg_clear(msg);
274273
nng_msg_append(msg, buf.buf, buf.cur);
275-
nano_eval_res = R_BlankScalarString;
276274
if ((xc = nng_sendmsg(s, msg, 0)))
277275
fatal("inproc sendmsg", xc);
278276

0 commit comments

Comments
 (0)