Skip to content

Commit 6203333

Browse files
committed
refactor: use AN() and CHECK_OBJ_NOTNULL per Varnish idioms
- Add AN() after wasmtime_context_get_data() calls (programming invariant) - Add CHECK_OBJ_NOTNULL for VRT_CTX, REQ, HTTP after null guards - Follows vmod_std.c patterns from official Varnish source - All 12 tests pass
1 parent 9fc51e6 commit 6203333

2 files changed

Lines changed: 35 additions & 24 deletions

File tree

src/host_functions.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ host_get_request_header(void *env, wasmtime_caller_t *caller,
124124

125125
ctx = wasmtime_caller_context(caller);
126126
hctx = (struct vwasm_host_ctx *)wasmtime_context_get_data(ctx);
127+
AN(hctx);
127128
hctx->wasm_ctx = ctx;
128129

129130
results[0].kind = WASMTIME_I32;
@@ -132,10 +133,13 @@ host_get_request_header(void *env, wasmtime_caller_t *caller,
132133
vctx = hctx->vrt_ctx;
133134
if (vctx == NULL || vctx->req == NULL)
134135
return (NULL);
136+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
137+
CHECK_OBJ_NOTNULL(vctx->req, REQ_MAGIC);
135138

136139
hp = vctx->req->http;
137140
if (hp == NULL)
138141
return (NULL);
142+
CHECK_OBJ_NOTNULL(hp, HTTP_MAGIC);
139143

140144
hdr_name = read_wasm_string(hctx, args[0].of.i32, args[1].of.i32);
141145
if (hdr_name == NULL)
@@ -190,6 +194,7 @@ host_get_request_url(void *env, wasmtime_caller_t *caller,
190194

191195
ctx = wasmtime_caller_context(caller);
192196
hctx = (struct vwasm_host_ctx *)wasmtime_context_get_data(ctx);
197+
AN(hctx);
193198
hctx->wasm_ctx = ctx;
194199

195200
results[0].kind = WASMTIME_I32;
@@ -198,6 +203,9 @@ host_get_request_url(void *env, wasmtime_caller_t *caller,
198203
vctx = hctx->vrt_ctx;
199204
if (vctx == NULL || vctx->req == NULL || vctx->req->http == NULL)
200205
return (NULL);
206+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
207+
CHECK_OBJ_NOTNULL(vctx->req, REQ_MAGIC);
208+
CHECK_OBJ_NOTNULL(vctx->req->http, HTTP_MAGIC);
201209

202210
url = vctx->req->http->hd[HTTP_HDR_URL].b;
203211
if (url == NULL)
@@ -230,6 +238,7 @@ host_get_request_method(void *env, wasmtime_caller_t *caller,
230238

231239
ctx = wasmtime_caller_context(caller);
232240
hctx = (struct vwasm_host_ctx *)wasmtime_context_get_data(ctx);
241+
AN(hctx);
233242
hctx->wasm_ctx = ctx;
234243

235244
results[0].kind = WASMTIME_I32;
@@ -238,6 +247,9 @@ host_get_request_method(void *env, wasmtime_caller_t *caller,
238247
vctx = hctx->vrt_ctx;
239248
if (vctx == NULL || vctx->req == NULL || vctx->req->http == NULL)
240249
return (NULL);
250+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
251+
CHECK_OBJ_NOTNULL(vctx->req, REQ_MAGIC);
252+
CHECK_OBJ_NOTNULL(vctx->req->http, HTTP_MAGIC);
241253

242254
method = vctx->req->http->hd[HTTP_HDR_METHOD].b;
243255
if (method == NULL)
@@ -270,6 +282,7 @@ host_get_client_ip(void *env, wasmtime_caller_t *caller,
270282

271283
ctx = wasmtime_caller_context(caller);
272284
hctx = (struct vwasm_host_ctx *)wasmtime_context_get_data(ctx);
285+
AN(hctx);
273286
hctx->wasm_ctx = ctx;
274287

275288
results[0].kind = WASMTIME_I32;
@@ -278,6 +291,7 @@ host_get_client_ip(void *env, wasmtime_caller_t *caller,
278291
vctx = hctx->vrt_ctx;
279292
if (vctx == NULL)
280293
return (NULL);
294+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
281295

282296
ip_str = VRT_IP_string(vctx, VRT_r_client_ip(vctx));
283297
if (ip_str == NULL)
@@ -313,6 +327,7 @@ host_set_response_header(void *env, wasmtime_caller_t *caller,
313327

314328
ctx = wasmtime_caller_context(caller);
315329
hctx = (struct vwasm_host_ctx *)wasmtime_context_get_data(ctx);
330+
AN(hctx);
316331
hctx->wasm_ctx = ctx;
317332

318333
results[0].kind = WASMTIME_I32;
@@ -321,6 +336,8 @@ host_set_response_header(void *env, wasmtime_caller_t *caller,
321336
vctx = hctx->vrt_ctx;
322337
if (vctx == NULL || vctx->req == NULL)
323338
return (NULL);
339+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
340+
CHECK_OBJ_NOTNULL(vctx->req, REQ_MAGIC);
324341

325342
name = read_wasm_string(hctx, args[0].of.i32, args[1].of.i32);
326343
if (name == NULL)
@@ -373,11 +390,13 @@ host_log_msg(void *env, wasmtime_caller_t *caller,
373390

374391
ctx = wasmtime_caller_context(caller);
375392
hctx = (struct vwasm_host_ctx *)wasmtime_context_get_data(ctx);
393+
AN(hctx);
376394
hctx->wasm_ctx = ctx;
377395

378396
vctx = hctx->vrt_ctx;
379397
if (vctx == NULL || vctx->vsl == NULL)
380398
return (NULL);
399+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
381400

382401
level = args[0].of.i32;
383402
msg = read_wasm_string(hctx, args[1].of.i32, args[2].of.i32);

src/proxy_wasm.c

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,15 @@ pw_proxy_log(void *env, wasmtime_caller_t *caller,
192192

193193
(void)env;
194194
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
195-
if (ctx == NULL || ctx->vrt_ctx == NULL) {
195+
AN(ctx);
196+
if (ctx->vrt_ctx == NULL) {
196197
results[0].kind = WASMTIME_I32;
197198
results[0].of.i32 = PROXY_INTERNAL;
198199
return (NULL);
199200
}
200201

201202
vctx = ctx->vrt_ctx;
203+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
202204
level = args[0].of.i32;
203205

204206
if (pw_read_string(ctx, (uint32_t)args[1].of.i32,
@@ -265,13 +267,9 @@ pw_proxy_get_header_map_value(void *env, wasmtime_caller_t *caller,
265267

266268
(void)env;
267269
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
270+
AN(ctx);
268271
results[0].kind = WASMTIME_I32;
269272

270-
if (ctx == NULL) {
271-
results[0].of.i32 = PROXY_INTERNAL;
272-
return (NULL);
273-
}
274-
275273
hp = pw_get_header_map(ctx, args[0].of.i32);
276274
if (hp == NULL) {
277275
results[0].of.i32 = PROXY_BAD_ARGUMENT;
@@ -331,14 +329,16 @@ pw_proxy_add_header_map_value(void *env, wasmtime_caller_t *caller,
331329

332330
(void)env;
333331
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
332+
AN(ctx);
334333
results[0].kind = WASMTIME_I32;
335334

336-
if (ctx == NULL || ctx->vrt_ctx == NULL) {
335+
if (ctx->vrt_ctx == NULL) {
337336
results[0].of.i32 = PROXY_INTERNAL;
338337
return (NULL);
339338
}
340339

341340
vctx = ctx->vrt_ctx;
341+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
342342

343343
/* Only support request headers for now */
344344
if (args[0].of.i32 == PROXY_MAP_HTTP_REQUEST_HEADERS)
@@ -405,14 +405,16 @@ pw_proxy_remove_header_map_value(void *env, wasmtime_caller_t *caller,
405405

406406
(void)env;
407407
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
408+
AN(ctx);
408409
results[0].kind = WASMTIME_I32;
409410

410-
if (ctx == NULL || ctx->vrt_ctx == NULL) {
411+
if (ctx->vrt_ctx == NULL) {
411412
results[0].of.i32 = PROXY_INTERNAL;
412413
return (NULL);
413414
}
414415

415416
vctx = ctx->vrt_ctx;
417+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
416418

417419
if (args[0].of.i32 == PROXY_MAP_HTTP_REQUEST_HEADERS)
418420
hp = (struct http *)vctx->http_req;
@@ -472,14 +474,16 @@ pw_proxy_get_property(void *env, wasmtime_caller_t *caller,
472474

473475
(void)env;
474476
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
477+
AN(ctx);
475478
results[0].kind = WASMTIME_I32;
476479

477-
if (ctx == NULL || ctx->vrt_ctx == NULL) {
480+
if (ctx->vrt_ctx == NULL) {
478481
results[0].of.i32 = PROXY_INTERNAL;
479482
return (NULL);
480483
}
481484

482485
vctx = ctx->vrt_ctx;
486+
CHECK_OBJ_NOTNULL(vctx, VRT_CTX_MAGIC);
483487

484488
if (pw_read_string(ctx, (uint32_t)args[0].of.i32,
485489
(uint32_t)args[1].of.i32, path_buf, sizeof(path_buf)) != 0) {
@@ -545,13 +549,9 @@ pw_proxy_send_local_response(void *env, wasmtime_caller_t *caller,
545549

546550
(void)env;
547551
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
552+
AN(ctx);
548553
results[0].kind = WASMTIME_I32;
549554

550-
if (ctx == NULL) {
551-
results[0].of.i32 = PROXY_INTERNAL;
552-
return (NULL);
553-
}
554-
555555
ctx->local_response_set = 1;
556556
ctx->local_response_code = args[0].of.i32;
557557

@@ -576,13 +576,9 @@ pw_proxy_get_current_time(void *env, wasmtime_caller_t *caller,
576576

577577
(void)env;
578578
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
579+
AN(ctx);
579580
results[0].kind = WASMTIME_I32;
580581

581-
if (ctx == NULL) {
582-
results[0].of.i32 = PROXY_INTERNAL;
583-
return (NULL);
584-
}
585-
586582
clock_gettime(CLOCK_REALTIME, &ts);
587583
nanos = (uint64_t)ts.tv_sec * 1000000000ULL + (uint64_t)ts.tv_nsec;
588584

@@ -637,13 +633,9 @@ pw_proxy_get_buffer_bytes(void *env, wasmtime_caller_t *caller,
637633

638634
(void)env;
639635
ctx = wasmtime_context_get_data(wasmtime_caller_context(caller));
636+
AN(ctx);
640637
results[0].kind = WASMTIME_I32;
641638

642-
if (ctx == NULL) {
643-
results[0].of.i32 = PROXY_INTERNAL;
644-
return (NULL);
645-
}
646-
647639
/* Return empty buffer for all types */
648640
if (pw_write_u32(ctx, (uint32_t)args[3].of.i32, 0) != 0 ||
649641
pw_write_u32(ctx, (uint32_t)args[4].of.i32, 0) != 0) {

0 commit comments

Comments
 (0)