]> The Tcpdump Group git mirrors - libpcap/blobdiff - gencode.c
Catch errors reported by gen_retblk().
[libpcap] / gencode.c
index 2299daea10483e20b236ec8399dd709dea299b0c..5af22d5e098a79f652da7f43cf8904f9325a030b 100644 (file)
--- a/gencode.c
+++ b/gencode.c
@@ -800,8 +800,16 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
                goto quit;
        }
 
-       if (cstate.ic.root == NULL)
+       if (cstate.ic.root == NULL) {
+               /*
+                * Catch errors reported by gen_retblk().
+                */
+               if (setjmp(cstate.top_ctx)) {
+                       rc = -1;
+                       goto quit;
+               }
                cstate.ic.root = gen_retblk(&cstate, cstate.snaplen);
+       }
 
        if (optimize && !cstate.no_optimize) {
                if (bpf_optimize(&cstate.ic, p->errbuf) == -1) {