diff options
author | Christian Grothoff <christian@grothoff.org> | 2014-06-07 14:08:58 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2014-06-07 14:08:58 +0000 |
commit | 6e31c04e908b98f6c9cb347eb36ccc47bde590a7 (patch) | |
tree | 55eb960e24a041f29d95564bf36b38309719bd81 /src/gns/plugin_gnsrecord_gns.c | |
parent | 744699bfdfd0eb37431ab8354bc3d866251fbec7 (diff) | |
download | gnunet-6e31c04e908b98f6c9cb347eb36ccc47bde590a7.tar.gz gnunet-6e31c04e908b98f6c9cb347eb36ccc47bde590a7.zip |
fix boxed value parser
Diffstat (limited to 'src/gns/plugin_gnsrecord_gns.c')
-rw-r--r-- | src/gns/plugin_gnsrecord_gns.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/gns/plugin_gnsrecord_gns.c b/src/gns/plugin_gnsrecord_gns.c index 5675599dd..e1e18ea48 100644 --- a/src/gns/plugin_gnsrecord_gns.c +++ b/src/gns/plugin_gnsrecord_gns.c | |||
@@ -263,29 +263,32 @@ gns_string_to_value (void *cls, | |||
263 | case GNUNET_GNSRECORD_TYPE_BOX: | 263 | case GNUNET_GNSRECORD_TYPE_BOX: |
264 | { | 264 | { |
265 | struct GNUNET_GNSRECORD_BoxRecord *box; | 265 | struct GNUNET_GNSRECORD_BoxRecord *box; |
266 | size_t slen = strlen (s) + 1; | 266 | size_t rest; |
267 | char rest[slen]; | ||
268 | unsigned int protocol; | 267 | unsigned int protocol; |
269 | unsigned int service; | 268 | unsigned int service; |
270 | unsigned int record_type; | 269 | unsigned int record_type; |
271 | void *bval; | 270 | void *bval; |
272 | size_t bval_size; | 271 | size_t bval_size; |
273 | 272 | ||
274 | if (4 != SSCANF (s, | 273 | if (3 != SSCANF (s, |
275 | "%u %u %u %s", | 274 | "%u %u %u ", |
276 | &protocol, | 275 | &protocol, |
277 | &service, | 276 | &service, |
278 | &record_type, | 277 | &record_type)) |
279 | rest)) | ||
280 | { | 278 | { |
281 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | 279 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, |
282 | _("Unable to parse BOX record string `%s'\n"), | 280 | _("Unable to parse BOX record string `%s'\n"), |
283 | s); | 281 | s); |
284 | return GNUNET_SYSERR; | 282 | return GNUNET_SYSERR; |
285 | } | 283 | } |
284 | rest = snprintf (NULL, 0, | ||
285 | "%u %u %u ", | ||
286 | protocol, | ||
287 | service, | ||
288 | record_type); | ||
286 | if (GNUNET_OK != | 289 | if (GNUNET_OK != |
287 | GNUNET_GNSRECORD_string_to_value (record_type, | 290 | GNUNET_GNSRECORD_string_to_value (record_type, |
288 | rest, | 291 | &s[rest], |
289 | &bval, | 292 | &bval, |
290 | &bval_size)) | 293 | &bval_size)) |
291 | return GNUNET_SYSERR; | 294 | return GNUNET_SYSERR; |