aboutsummaryrefslogtreecommitdiff
path: root/src/identity-provider
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-08-26 12:52:33 +0000
committerChristian Grothoff <christian@grothoff.org>2016-08-26 12:52:33 +0000
commit9e9c2fdf87ff362cee3851a0a3e584a0c5696df3 (patch)
treeb898bce94eb55c2940f2fc3ef53580f981a9e614 /src/identity-provider
parent00360860690de6b43b64ca9c3d52cbe3fe354bbe (diff)
downloadgnunet-9e9c2fdf87ff362cee3851a0a3e584a0c5696df3.tar.gz
gnunet-9e9c2fdf87ff362cee3851a0a3e584a0c5696df3.zip
-fix use after free
Diffstat (limited to 'src/identity-provider')
-rw-r--r--src/identity-provider/gnunet-identity-token.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/identity-provider/gnunet-identity-token.c b/src/identity-provider/gnunet-identity-token.c
index 1f480aae0..e33f47b8b 100644
--- a/src/identity-provider/gnunet-identity-token.c
+++ b/src/identity-provider/gnunet-identity-token.c
@@ -105,42 +105,48 @@ run (void *cls,
105 token = NULL; 105 token = NULL;
106 106
107 if (print_token) 107 if (print_token)
108 printf ("Token:\nHeader:\t\t%s\nPayload:\t%s\n", header, payload); 108 printf ("Token:\nHeader:\t\t%s\nPayload:\t%s\n",
109 header,
110 payload);
109 GNUNET_free (header); 111 GNUNET_free (header);
110 GNUNET_free (payload);
111 112
112 payload_json = json_loads (payload, 0, &error); 113 payload_json = json_loads (payload, 0, &error);
113 if ((NULL == payload_json) || !json_is_object (payload_json)) 114 GNUNET_free (payload);
115
116 if ((NULL == payload_json) || (! json_is_object (payload_json)) )
114 { 117 {
115 GNUNET_free (val); 118 GNUNET_free (val);
116 return; 119 return;
117 } 120 }
118 keystring_json = json_object_get (payload_json, "iss"); 121 keystring_json = json_object_get (payload_json, "iss");
119 if (!json_is_string (keystring_json)) 122 if (! json_is_string (keystring_json))
120 { 123 {
121 GNUNET_free (val); 124 GNUNET_free (val);
122 return; 125 return;
123 } 126 }
124 keystring = json_string_value (keystring_json); 127 keystring = json_string_value (keystring_json);
125 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_public_key_from_string (keystring, 128 if (GNUNET_OK !=
126 strlen (keystring), 129 GNUNET_CRYPTO_ecdsa_public_key_from_string (keystring,
127 &key)) 130 strlen (keystring),
131 &key))
128 { 132 {
129 GNUNET_free (val); 133 GNUNET_free (val);
130 return; 134 return;
131 } 135 }
132 GNUNET_STRINGS_string_to_data (signature_b32, 136 GNUNET_STRINGS_string_to_data (signature_b32,
133 strlen (signature_b32), 137 strlen (signature_b32),
134 &sig, 138 &sig,
135 sizeof (struct GNUNET_CRYPTO_EcdsaSignature)); 139 sizeof (struct GNUNET_CRYPTO_EcdsaSignature));
136 140
137 if (print_token) 141 if (print_token)
138 printf ("Signature:\t%s\n", keystring); 142 printf ("Signature:\t%s\n",
139 143 keystring);
140 if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_verify(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN, 144
141 purpose, 145 if (GNUNET_OK !=
142 &sig, 146 GNUNET_CRYPTO_ecdsa_verify(GNUNET_SIGNATURE_PURPOSE_GNUID_TOKEN,
143 &key)) 147 purpose,
148 &sig,
149 &key))
144 printf("Signature not OK!\n"); 150 printf("Signature not OK!\n");
145 else 151 else
146 printf("Signature OK!\n"); 152 printf("Signature OK!\n");