diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-03-10 17:57:40 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-03-10 17:57:40 +0100 |
commit | ffff350361b66d318d8890328c7efc3757252f82 (patch) | |
tree | 9012e59f2d271c05a4b6977bb8eff6f77edf17ab /src/gns/plugin_gnsrecord_gns.c | |
parent | ee232f9c14bd879235e6586484083ff91addd052 (diff) | |
download | gnunet-ffff350361b66d318d8890328c7efc3757252f82.tar.gz gnunet-ffff350361b66d318d8890328c7efc3757252f82.zip |
properly detect and handle parse error
Diffstat (limited to 'src/gns/plugin_gnsrecord_gns.c')
-rw-r--r-- | src/gns/plugin_gnsrecord_gns.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/gns/plugin_gnsrecord_gns.c b/src/gns/plugin_gnsrecord_gns.c index 5faca4578..5d611e19e 100644 --- a/src/gns/plugin_gnsrecord_gns.c +++ b/src/gns/plugin_gnsrecord_gns.c | |||
@@ -279,9 +279,10 @@ gns_string_to_value (void *cls, | |||
279 | } | 279 | } |
280 | *data_size = sizeof (struct GNUNET_TUN_GnsVpnRecord) + strlen (s_serv) + 1; | 280 | *data_size = sizeof (struct GNUNET_TUN_GnsVpnRecord) + strlen (s_serv) + 1; |
281 | *data = vpn = GNUNET_malloc (*data_size); | 281 | *data = vpn = GNUNET_malloc (*data_size); |
282 | if (GNUNET_OK != GNUNET_CRYPTO_eddsa_public_key_from_string ((char*) s_peer, | 282 | if (GNUNET_OK != |
283 | strlen (s_peer), | 283 | GNUNET_CRYPTO_eddsa_public_key_from_string ((char*) s_peer, |
284 | &vpn->peer.public_key)) | 284 | strlen (s_peer), |
285 | &vpn->peer.public_key)) | ||
285 | { | 286 | { |
286 | GNUNET_free (vpn); | 287 | GNUNET_free (vpn); |
287 | *data_size = 0; | 288 | *data_size = 0; |
@@ -362,9 +363,14 @@ gns_string_to_value (void *cls, | |||
362 | } | 363 | } |
363 | *data_size = sizeof (struct GNUNET_GNSRECORD_ReverseRecord) + strlen (known_by) + 1; | 364 | *data_size = sizeof (struct GNUNET_GNSRECORD_ReverseRecord) + strlen (known_by) + 1; |
364 | *data = rev = GNUNET_malloc (*data_size); | 365 | *data = rev = GNUNET_malloc (*data_size); |
365 | GNUNET_CRYPTO_ecdsa_public_key_from_string (pkey_str, | 366 | if (GNUNET_OK != |
366 | strlen (pkey_str), | 367 | GNUNET_CRYPTO_ecdsa_public_key_from_string (pkey_str, |
367 | &rev->pkey); | 368 | strlen (pkey_str), |
369 | &rev->pkey)) | ||
370 | { | ||
371 | GNUNET_free (rev); | ||
372 | return GNUNET_SYSERR; | ||
373 | } | ||
368 | rev->expiration = expiration; | 374 | rev->expiration = expiration; |
369 | GNUNET_memcpy (&rev[1], | 375 | GNUNET_memcpy (&rev[1], |
370 | known_by, | 376 | known_by, |