commit 7bcac99

default  ·  2023-01-08 09:11:33 +0000 UTC
parent 1f949b4
Don't use goto in check_signature().

It seems to interfere with cleanup functions in llvm.
1 files changed,  +15, -9
M http.c
M http.c
+15, -9
 1@@ -103,7 +103,7 @@ d_char *http_signed_request(snac *snac, char *method, char *url,
 2 }
 3 
 4 
 5-int check_signature(snac *snac, char *req)
 6+static int _check_signature(snac *snac, char *req)
 7 /* check the signature */
 8 {
 9     char *sig_hdr = xs_dict_get(req, "signature");
10@@ -141,7 +141,7 @@ int check_signature(snac *snac, char *req)
11 
12     if (keyId == NULL || headers == NULL || signature == NULL) {
13         snac_debug(snac, 0, xs_fmt("check_signature bad signature header"));
14-        goto error;
15+        return 0;
16     }
17 
18     /* strip the # from the keyId */
19@@ -152,13 +152,13 @@ int check_signature(snac *snac, char *req)
20     xs *actor = NULL;
21     if (!valid_status(actor_get(snac, keyId, &actor))) {
22         snac_debug(snac, 0, xs_fmt("check_signature unknown actor %s", keyId));
23-        goto error;
24+        return 0;
25     }
26 
27     if ((p = xs_dict_get(actor, "publicKey")) == NULL ||
28         ((pubkey = xs_dict_get(p, "publicKeyPem")) == NULL)) {
29         snac_debug(snac, 0, xs_fmt("check_signature cannot get pubkey from %s", keyId));
30-        goto error;
31+        return 0;
32     }
33 
34     /* now build the string to be signed */
35@@ -193,7 +193,7 @@ int check_signature(snac *snac, char *req)
36                     snac_debug(snac, 0,
37                         xs_fmt("check_signature cannot find header %s", v));
38 
39-                    goto error;
40+                    return 0;
41                 }
42 
43                 ss = xs_fmt("%s: %s", v, hc);
44@@ -205,13 +205,19 @@ int check_signature(snac *snac, char *req)
45 
46     if (xs_evp_verify(pubkey, sig_str, strlen(sig_str), signature) != 1) {
47         snac_debug(snac, 0, xs_fmt("check_signature rsa verify error %s", keyId));
48-        goto error;
49+        return 0;
50     }
51 
52     return 1;
53+}
54 
55-error:
56-    {
57+
58+int check_signature(snac *snac, char *req)
59+/* checks the signature and archives the error */
60+{
61+    int ret;
62+
63+    if ((ret = _check_signature(snac, req)) == 0) {
64         xs *ntid = tid(0);
65         xs *fn   = xs_fmt("%s/error/check_signature_%s.json", srv_basedir, ntid);
66         FILE *f;
67@@ -224,5 +230,5 @@ error:
68         }
69     }
70 
71-    return 0;
72+    return ret;
73 }