gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-anastasis] branch master updated: fix misc leaks and other memory


From: gnunet
Subject: [taler-anastasis] branch master updated: fix misc leaks and other memory issues
Date: Sun, 14 Feb 2021 18:37:03 +0100

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository anastasis.

The following commit(s) were added to refs/heads/master by this push:
     new fd3071d  fix misc leaks and other memory issues
fd3071d is described below

commit fd3071d26e3f5cb831afc5ca3ab66240d0603631
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Feb 14 18:37:01 2021 +0100

    fix misc leaks and other memory issues
---
 src/backend/anastasis-httpd_policy_upload.c |  3 -
 src/include/anastasis_testing_lib.h         |  4 +-
 src/lib/anastasis_backup.c                  | 16 ++++--
 src/lib/anastasis_recovery.c                | 22 +++++---
 src/restclient/anastasis_api_policy_store.c | 22 +++++---
 src/testing/test_anastasis.c                | 85 ++++++++++++++++-------------
 src/testing/testing_cmd_challenge_answer.c  |  3 +-
 src/testing/testing_cmd_recover_secret.c    | 69 ++++++++++++-----------
 src/testing/testing_cmd_secret_share.c      | 81 ++++++++++++++-------------
 src/testing/testing_cmd_truth_upload.c      | 24 ++++----
 10 files changed, 183 insertions(+), 146 deletions(-)

diff --git a/src/backend/anastasis-httpd_policy_upload.c 
b/src/backend/anastasis-httpd_policy_upload.c
index 61decba..9503a44 100644
--- a/src/backend/anastasis-httpd_policy_upload.c
+++ b/src/backend/anastasis-httpd_policy_upload.c
@@ -915,7 +915,6 @@ AH_handler_policy_post (
     return ret;
   }
 
-
   /* handle upload */
   if (0 != *recovery_data_size)
   {
@@ -941,8 +940,6 @@ AH_handler_policy_post (
   }
 
   /* finished with upload, check hash */
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Upload finished\n");
   if (NULL != puc->hash_ctx)
   {
     struct GNUNET_HashCode our_hash;
diff --git a/src/include/anastasis_testing_lib.h 
b/src/include/anastasis_testing_lib.h
index adf8323..0ab121c 100644
--- a/src/include/anastasis_testing_lib.h
+++ b/src/include/anastasis_testing_lib.h
@@ -594,7 +594,7 @@ struct TALER_TESTING_Command
 ANASTASIS_TESTING_cmd_truth_upload (
   const char *label,
   const char *anastasis_url,
-  json_t *id_data,
+  const json_t *id_data,
   const char *method,
   const char *instructions,
   const char *mime_type,
@@ -764,7 +764,7 @@ struct TALER_TESTING_Command
 ANASTASIS_TESTING_cmd_recover_secret (
   const char *label,
   const char *anastasis_url,
-  json_t *id_data,
+  const json_t *id_data,
   unsigned int version,
   unsigned int http_status,
   enum ANASTASIS_TESTING_RecoverSecretOption rso,
diff --git a/src/lib/anastasis_backup.c b/src/lib/anastasis_backup.c
index 750088e..9cde710 100644
--- a/src/lib/anastasis_backup.c
+++ b/src/lib/anastasis_backup.c
@@ -526,7 +526,13 @@ get_num_urls (const struct ANASTASIS_Policy *policies[],
 
       for (unsigned int l = 0; l <= i; l++)
       {
-        for (unsigned int k = 0; k < policies[l]->truths_length; k++)
+        unsigned int limit;
+
+        if (l == i)
+          limit = j;
+        else
+          limit = policies[l]->truths_length;
+        for (unsigned int k = 0; k < limit; k++)
         {
           if (0 ==
               strcmp (policies[i]->truths[j]->url,
@@ -603,9 +609,11 @@ ANASTASIS_secret_share (struct GNUNET_CURL_Context *ctx,
 
     GNUNET_assert (NULL != uuids);
     for (unsigned int b = 0; b < policy->truths_length; b++)
-      json_array_append (uuids,
-                         GNUNET_JSON_from_data_auto (
-                           &policy->truths[b]->uuid));
+      GNUNET_assert (0 ==
+                     json_array_append_new (
+                       uuids,
+                       GNUNET_JSON_from_data_auto (
+                         &policy->truths[b]->uuid)));
     if (0 !=
         json_array_append_new (
           dec_policies,
diff --git a/src/lib/anastasis_recovery.c b/src/lib/anastasis_recovery.c
index 94b9798..53925a0 100644
--- a/src/lib/anastasis_recovery.c
+++ b/src/lib/anastasis_recovery.c
@@ -586,8 +586,8 @@ policy_lookup_cb (void *cls,
     if (Z_OK !=
         uncompress ((Bytef *) pt,
                     &pt_size,
-                    (const Bytef *) plaintext,
-                    size_plaintext))
+                    (const Bytef *) plaintext + sizeof (uint32_t),
+                    size_plaintext - sizeof (uint32_t)))
     {
       GNUNET_break_op (0);
       r->csc (r->csc_cls,
@@ -887,8 +887,8 @@ ANASTASIS_recovery_serialize (const struct 
ANASTASIS_Recovery *r)
                       GNUNET_JSON_from_data_auto (&c->uuid));
       GNUNET_assert (NULL != cs);
       GNUNET_assert (0 ==
-                     json_array_append (dps_arr,
-                                        cs));
+                     json_array_append_new (dps_arr,
+                                            cs));
     }
     dps = json_pack ("{s:o, s:o, s:o}",
                      "emk",
@@ -899,8 +899,8 @@ ANASTASIS_recovery_serialize (const struct 
ANASTASIS_Recovery *r)
                      c_arr);
     GNUNET_assert (NULL != dps);
     GNUNET_assert (0 ==
-                   json_array_append (dps_arr,
-                                      dps));
+                   json_array_append_new (dps_arr,
+                                          dps));
   }
   cs_arr = json_array ();
   GNUNET_assert (NULL != cs_arr);
@@ -931,8 +931,8 @@ ANASTASIS_recovery_serialize (const struct 
ANASTASIS_Recovery *r)
                     TALER_JSON_from_amount (&c->ci.cost));
     GNUNET_assert (NULL != cs);
     GNUNET_assert (0 ==
-                   json_array_append (cs_arr,
-                                      cs));
+                   json_array_append_new (cs_arr,
+                                          cs));
   }
 
   return json_pack ("{s:o, s:o, s:o, s:I, s:O, s:s, s:o}",
@@ -1254,6 +1254,8 @@ ANASTASIS_recovery_abort (struct ANASTASIS_Recovery *r)
     r->plo = NULL;
   }
   GNUNET_free (r->solved_challenges);
+  for (unsigned int j = 0; j < r->ri.dps_len; j++)
+    GNUNET_free (r->dps[j].pub_details.challenges);
   GNUNET_free (r->ri.dps);
   for (unsigned int i = 0; i < r->ri.cs_len; i++)
   {
@@ -1262,10 +1264,12 @@ ANASTASIS_recovery_abort (struct ANASTASIS_Recovery *r)
     GNUNET_free (cs->url);
     GNUNET_free (cs->method);
     GNUNET_free (cs->instructions);
-    GNUNET_free (cs);
   }
   GNUNET_free (r->ri.cs);
+  GNUNET_free (r->cs);
+  GNUNET_free (r->dps);
   json_decref (r->id_data);
   GNUNET_free (r->provider_url);
+  GNUNET_free (r->enc_core_secret);
   GNUNET_free (r);
 }
diff --git a/src/restclient/anastasis_api_policy_store.c 
b/src/restclient/anastasis_api_policy_store.c
index 8f1a2a9..5a0a048 100644
--- a/src/restclient/anastasis_api_policy_store.c
+++ b/src/restclient/anastasis_api_policy_store.c
@@ -66,6 +66,11 @@ struct ANASTASIS_PolicyStoreOperation
    */
   char *pay_uri;
 
+  /**
+   * Copy of the uploaded data. Needed by curl.
+   */
+  void *postcopy;
+
   /**
    * Hash of the data we are uploading.
    */
@@ -84,6 +89,7 @@ ANASTASIS_policy_store_cancel (
   }
   GNUNET_free (pso->pay_uri);
   GNUNET_free (pso->url);
+  GNUNET_free (pso->postcopy);
   GNUNET_free (pso);
 }
 
@@ -104,27 +110,28 @@ handle_policy_store_finished (void *cls,
 {
   struct ANASTASIS_PolicyStoreOperation *pso = cls;
   struct ANASTASIS_UploadDetails ud;
-  struct ANASTASIS_UploadDetails *udp;
 
   pso->job = NULL;
-  udp = NULL;
   memset (&ud, 0, sizeof (ud));
   ud.http_status = response_code;
   ud.ec = TALER_EC_NONE;
 
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Policy store finished with HTTP status %u\n",
+              (unsigned int) response_code);
   switch (response_code)
   {
   case 0:
+    ud.us = ANASTASIS_US_SERVER_ERROR;
+    ud.ec = TALER_EC_GENERIC_INVALID_RESPONSE;
     break;
   case MHD_HTTP_NO_CONTENT:
     ud.us = ANASTASIS_US_SUCCESS;
     ud.details.curr_backup_hash = &pso->new_upload_hash;
-    udp = &ud;
     break;
   case MHD_HTTP_NOT_MODIFIED:
     ud.us = ANASTASIS_US_SUCCESS;
     ud.details.curr_backup_hash = &pso->new_upload_hash;
-    udp = &ud;
     break;
   case MHD_HTTP_BAD_REQUEST:
     GNUNET_break (0);
@@ -161,7 +168,6 @@ handle_policy_store_finished (void *cls,
     }
     ud.us = ANASTASIS_US_PAYMENT_REQUIRED;
     ud.details.payment.payment_request = pso->pay_uri;
-    udp = &ud;
     break;
   case MHD_HTTP_LENGTH_REQUIRED:
     GNUNET_break (0);
@@ -181,7 +187,7 @@ handle_policy_store_finished (void *cls,
     break;
   }
   pso->cb (pso->cb_cls,
-           udp);
+           &ud);
   pso->cb = NULL;
   ANASTASIS_policy_store_cancel (pso);
 }
@@ -347,6 +353,8 @@ ANASTASIS_policy_store (
   }
   /* Finished setting up headers */
   pso = GNUNET_new (struct ANASTASIS_PolicyStoreOperation);
+  pso->postcopy = GNUNET_memdup (recovery_data,
+                                 recovery_data_size);
   pso->new_upload_hash = usp.new_recovery_data_hash;
   {
     char *acc_pub_str;
@@ -379,7 +387,7 @@ ANASTASIS_policy_store (
   GNUNET_assert (CURLE_OK ==
                  curl_easy_setopt (eh,
                                    CURLOPT_POSTFIELDS,
-                                   recovery_data));
+                                   pso->postcopy));
   GNUNET_assert (CURLE_OK ==
                  curl_easy_setopt (eh,
                                    CURLOPT_POSTFIELDSIZE,
diff --git a/src/testing/test_anastasis.c b/src/testing/test_anastasis.c
index 12eed29..0b3b10c 100644
--- a/src/testing/test_anastasis.c
+++ b/src/testing/test_anastasis.c
@@ -101,6 +101,11 @@ static struct GNUNET_OS_Process *merchantd;
  */
 static struct GNUNET_OS_Process *anastasisd;
 
+/**
+ * Identity to use for testing.
+ */
+static json_t *id_data;
+
 
 /**
  * Execute the taler-exchange-wirewatch command with
@@ -178,27 +183,42 @@ run (void *cls,
     ANASTASIS_TESTING_cmd_salt ("salt-request-1",
                                 anastasis_url,
                                 MHD_HTTP_OK),
-    ANASTASIS_TESTING_cmd_truth_question ("truth-create-1",
-                                          anastasis_url,
-                                          NULL,
-                                          "SomeTruth1",
-                                          ANASTASIS_TESTING_TSO_NONE,
-                                          MHD_HTTP_NO_CONTENT),
-    ANASTASIS_TESTING_cmd_truth_question ("truth-create-2",
-                                          anastasis_url,
-                                          NULL,
-                                          "SomeTruth2",
-                                          ANASTASIS_TESTING_TSO_NONE,
-                                          MHD_HTTP_NO_CONTENT),
-    ANASTASIS_TESTING_cmd_truth_store ("truth-create-3",
-                                       anastasis_url,
-                                       NULL,
-                                       "file",
-                                       "text/plain",
-                                       strlen (file_secret),
-                                       file_secret,
-                                       ANASTASIS_TESTING_TSO_NONE,
-                                       MHD_HTTP_NO_CONTENT),
+    ANASTASIS_TESTING_cmd_truth_upload ("truth-create-1",
+                                        anastasis_url,
+                                        id_data,
+                                        "question",
+                                        "answer the question",
+                                        "text/plain",
+                                        "SomeTruth1",
+                                        strlen ("SomeTruth1"),
+                                        NULL,
+                                        MHD_HTTP_NO_CONTENT,
+                                        ANASTASIS_TESTING_TSO_NONE,
+                                        "salt-request-1"),
+    ANASTASIS_TESTING_cmd_truth_upload ("truth-create-2",
+                                        anastasis_url,
+                                        id_data,
+                                        "question",
+                                        "answer the question",
+                                        "text/plain",
+                                        "SomeTruth2",
+                                        strlen ("SomeTruth2"),
+                                        NULL,
+                                        MHD_HTTP_NO_CONTENT,
+                                        ANASTASIS_TESTING_TSO_NONE,
+                                        "salt-request-1"),
+    ANASTASIS_TESTING_cmd_truth_upload ("truth-create-3",
+                                        anastasis_url,
+                                        id_data,
+                                        "file",
+                                        "read the file",
+                                        "text/plain",
+                                        file_secret,
+                                        strlen (file_secret),
+                                        NULL,
+                                        MHD_HTTP_NO_CONTENT,
+                                        ANASTASIS_TESTING_TSO_NONE,
+                                        "salt-request-1"),
     ANASTASIS_TESTING_cmd_policy_create ("policy-create-1",
                                          "truth-create-1",
                                          "truth-create-2",
@@ -214,11 +234,10 @@ run (void *cls,
     ANASTASIS_TESTING_cmd_secret_share ("secret-share-1",
                                         anastasis_url,
                                         NULL,
-                                        ANASTASIS_TESTING_make_id_data_example 
(
-                                          "MaxMuster123456789"),
+                                        id_data,
                                         "core secret",
                                         strlen ("core secret"),
-                                        MHD_HTTP_PAYMENT_REQUIRED,
+                                        
ANASTASIS_SHARE_STATUS_PAYMENT_REQUIRED,
                                         ANASTASIS_TESTING_SSO_NONE,
                                         "policy-create-1",
                                         "policy-create-2",
@@ -242,11 +261,10 @@ run (void *cls,
     ANASTASIS_TESTING_cmd_secret_share ("secret-share-2",
                                         anastasis_url,
                                         "secret-share-1",
-                                        ANASTASIS_TESTING_make_id_data_example 
(
-                                          "MaxMuster123456789"),
+                                        id_data,
                                         "core secret",
                                         strlen ("core secret"),
-                                        MHD_HTTP_NO_CONTENT,
+                                        ANASTASIS_SHARE_STATUS_SUCCESS,
                                         ANASTASIS_TESTING_SSO_NONE,
                                         "policy-create-1",
                                         "policy-create-2",
@@ -254,8 +272,7 @@ run (void *cls,
                                         NULL),
     ANASTASIS_TESTING_cmd_recover_secret ("recover-secret-1",
                                           anastasis_url,
-                                          
ANASTASIS_TESTING_make_id_data_example (
-                                            "MaxMuster123456789"),
+                                          id_data,
                                           0,
                                           MHD_HTTP_PAYMENT_REQUIRED, // FIXME! 
WHY!?
                                           ANASTASIS_TESTING_RSO_NONE,
@@ -305,15 +322,8 @@ run (void *cls,
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_batch ("pay",
                              pay),
-
     TALER_TESTING_cmd_batch ("anastasis",
                              anastasis),
-
-
-    /**
-     * End the suite.  Fixme: better to have a label for this
-     * too, as it shows a "(null)" token on logs.
-     */
     TALER_TESTING_cmd_end ()
   };
 
@@ -354,6 +364,8 @@ main (int argc,
                      "%s/.secret",
                      dir);
   }
+  id_data = ANASTASIS_TESTING_make_id_data_example (
+    "MaxMuster123456789");
   payer_payto = ("payto://x-taler-bank/localhost/" USER_ACCOUNT_NAME);
   exchange_payto = ("payto://x-taler-bank/localhost/" EXCHANGE_ACCOUNT_NAME);
   merchant_payto = ("payto://x-taler-bank/localhost/" MERCHANT_ACCOUNT_NAME);
@@ -376,7 +388,6 @@ main (int argc,
     return 1;
   case GNUNET_NO:
     return 77;
-
   case GNUNET_OK:
     if (NULL == (merchantd =
                    TALER_TESTING_run_merchant (CONFIG_FILE,
diff --git a/src/testing/testing_cmd_challenge_answer.c 
b/src/testing/testing_cmd_challenge_answer.c
index 135bd35..f0a7d53 100644
--- a/src/testing/testing_cmd_challenge_answer.c
+++ b/src/testing/testing_cmd_challenge_answer.c
@@ -96,10 +96,12 @@ challenge_answer_cb (void *af_cls,
 {
   struct ChallengeState *cs = af_cls;
 
+  cs->c = NULL;
   if (csr->cs != cs->expected_cs)
   {
     GNUNET_break (0);
     TALER_TESTING_interpreter_fail (cs->is);
+    return;
   }
   switch (csr->cs)
   {
@@ -252,7 +254,6 @@ challenge_answer_run (void *cls,
     ps = NULL;
   }
 
-
   cs->c = (struct ANASTASIS_Challenge *) c;
   if (GNUNET_OK !=
       ANASTASIS_challenge_answer (cs->c,
diff --git a/src/testing/testing_cmd_recover_secret.c 
b/src/testing/testing_cmd_recover_secret.c
index 005eee5..5fb110f 100644
--- a/src/testing/testing_cmd_recover_secret.c
+++ b/src/testing/testing_cmd_recover_secret.c
@@ -211,6 +211,7 @@ static void
 delayed_abort (void *cls)
 {
   struct ANASTASIS_Recovery *recovery = cls;
+
   ANASTASIS_recovery_abort (recovery);
 }
 
@@ -219,7 +220,7 @@ delayed_abort (void *cls)
  * Free the state of a "recover secret" CMD, and possibly
  * cancel it if it did not complete.
  *
- * @param cls closure.
+ * @param cls closure
  * @param cmd command being freed.
  */
 static void
@@ -258,16 +259,21 @@ recover_secret_traits (void *cls,
                        unsigned int index)
 {
   struct RecoverSecretState *rss = cls;
-  struct TALER_TESTING_Trait traits[] = {
-    ANASTASIS_TESTING_make_trait_challenge (index,
-                                            rss->ri->cs[index]),
-    TALER_TESTING_trait_end ()
-  };
-
-  return TALER_TESTING_get_trait (traits,
-                                  ret,
-                                  trait,
-                                  index);
+
+  if (NULL == rss->ri)
+    return GNUNET_SYSERR;
+  {
+    struct TALER_TESTING_Trait traits[] = {
+      ANASTASIS_TESTING_make_trait_challenge (index,
+                                              rss->ri->cs[index]),
+      TALER_TESTING_trait_end ()
+    };
+
+    return TALER_TESTING_get_trait (traits,
+                                    ret,
+                                    trait,
+                                    index);
+  }
 }
 
 
@@ -284,36 +290,37 @@ recover_secret_traits (void *cls,
  * @return the command
  */
 struct TALER_TESTING_Command
-ANASTASIS_TESTING_cmd_recover_secret (const char *label,
-                                      const char *anastasis_url,
-                                      json_t *id_data,
-                                      unsigned int version,
-                                      unsigned int http_status,
-                                      enum
-                                      ANASTASIS_TESTING_RecoverSecretOption 
rso,
-                                      const char *download_ref,
-                                      const char *core_secret_ref)
+ANASTASIS_TESTING_cmd_recover_secret (
+  const char *label,
+  const char *anastasis_url,
+  const json_t *id_data,
+  unsigned int version,
+  unsigned int http_status,
+  enum ANASTASIS_TESTING_RecoverSecretOption rso,
+  const char *download_ref,
+  const char *core_secret_ref)
 {
   struct RecoverSecretState *rss;
 
   rss = GNUNET_new (struct RecoverSecretState);
   rss->http_status = http_status;
   rss->version = version;
-  rss->id_data = id_data;
+  rss->id_data = json_incref ((json_t *) id_data);
   rss->rsopt = rso;
   rss->anastasis_url = anastasis_url;
   rss->download_reference = download_ref;
   rss->core_secret_reference = core_secret_ref;
-
-  struct TALER_TESTING_Command cmd = {
-    .cls = rss,
-    .label = label,
-    .run = &recover_secret_run,
-    .cleanup = &recover_secret_cleanup,
-    .traits = &recover_secret_traits
-  };
-
-  return cmd;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = rss,
+      .label = label,
+      .run = &recover_secret_run,
+      .cleanup = &recover_secret_cleanup,
+      .traits = &recover_secret_traits
+    };
+
+    return cmd;
+  }
 }
 
 
diff --git a/src/testing/testing_cmd_secret_share.c 
b/src/testing/testing_cmd_secret_share.c
index a6bb54a..5c58695 100644
--- a/src/testing/testing_cmd_secret_share.c
+++ b/src/testing/testing_cmd_secret_share.c
@@ -56,33 +56,18 @@ struct SecretShareState
   /**
    * Data to derive user identifier from.
    */
-  const json_t *id_data;
+  json_t *id_data;
 
   /**
    * The core secret to backup/recover.
    */
   const void *core_secret;
 
-  /**
-   * Size of core_secret.
-   */
-  size_t core_secret_size;
-
-  /**
-   * Length of array of command labels (cmd_label_array).
-   */
-  unsigned int cmd_label_array_length;
-
   /**
    * URL of the anastasis backend.
    */
   const char *anastasis_url;
 
-  /**
-   * Expected status code.
-   */
-  enum ANASTASIS_ShareStatus want_status;
-
   /**
    * The /truth GET operation handle.
    */
@@ -93,11 +78,6 @@ struct SecretShareState
    */
   const char *prev_secret_share;
 
-  /**
-   * Options for how we are supposed to do the upload.
-   */
-  enum ANASTASIS_TESTING_SecretShareOption ssopt;
-
   /**
    * closure for the payment callback
    */
@@ -112,6 +92,26 @@ struct SecretShareState
    * Payment order ID we got back, if any. Otherwise NULL.
    */
   char *payment_order_id;
+
+  /**
+   * Size of core_secret.
+   */
+  size_t core_secret_size;
+
+  /**
+   * Length of array of command labels (cmd_label_array).
+   */
+  unsigned int cmd_label_array_length;
+
+  /**
+   * Expected status code.
+   */
+  enum ANASTASIS_ShareStatus want_status;
+
+  /**
+   * Options for how we are supposed to do the upload.
+   */
+  enum ANASTASIS_TESTING_SecretShareOption ssopt;
 };
 
 
@@ -185,15 +185,10 @@ secret_share_run (void *cls,
   struct SecretShareState *sss = cls;
   const struct ANASTASIS_Policy *policies[sss->cmd_label_array_length];
   unsigned int pds_len;
-  struct ANASTASIS_PaymentDetails pds[1];
+  struct ANASTASIS_PaymentDetails pds;
 
   GNUNET_assert (sss->cmd_label_array_length > 0);
   GNUNET_assert (NULL != sss->cmd_label_array);
-
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "At %s:%d cmd label array length is %i\n", __FILE__, __LINE__,
-              sss->cmd_label_array_length);
-
   sss->is = is;
   if (NULL != sss->cmd_label_array)
   {
@@ -258,7 +253,7 @@ secret_share_run (void *cls,
     }
   }
 
-  memset (pds,
+  memset (&pds,
           0,
           sizeof (pds));
   if (NULL != sss->payment_order_id)
@@ -266,7 +261,7 @@ secret_share_run (void *cls,
     if (GNUNET_OK !=
         GNUNET_STRINGS_string_to_data (sss->payment_order_id,
                                        strlen (sss->payment_order_id),
-                                       &pds[0].payment_secret,
+                                       &pds.payment_secret,
                                        sizeof (struct
                                                ANASTASIS_PaymentSecretP)))
     {
@@ -276,7 +271,7 @@ secret_share_run (void *cls,
       return;
     }
     GNUNET_free (sss->payment_order_id);
-    pds[0].provider_url = sss->anastasis_url;
+    pds.provider_url = sss->anastasis_url;
     pds_len = 1;
   }
   else
@@ -287,7 +282,7 @@ secret_share_run (void *cls,
                                      sss->id_data,
                                      policies,
                                      sss->cmd_label_array_length,
-                                     pds,
+                                     (0 == pds_len) ? NULL : &pds,
                                      pds_len,
                                      false,
                                      &secret_share_result_cb,
@@ -329,7 +324,7 @@ secret_share_cleanup (void *cls,
     ANASTASIS_secret_share_cancel (sss->sso);
     sss->sso = NULL;
   }
-  json_decref ((json_t *) sss->id_data);
+  json_decref (sss->id_data);
   GNUNET_free (sss);
 }
 
@@ -394,27 +389,31 @@ ANASTASIS_TESTING_cmd_secret_share (
   ...)
 {
   struct SecretShareState *sss;
-  va_list ap;
 
   sss = GNUNET_new (struct SecretShareState);
   sss->want_status = want_status;
   sss->ssopt = sso;
   sss->anastasis_url = anastasis_url;
   sss->label = label;
-  sss->id_data = id_data;
+  sss->id_data = json_incref ((json_t *) id_data);
   sss->core_secret = core_secret;
   sss->core_secret_size = core_secret_size;
   sss->prev_secret_share = prev_secret_share;
 
-  va_start (ap, sso);
-  const char *policy_create_cmd;
-  while (NULL != (policy_create_cmd = va_arg (ap, const char *)))
   {
-    GNUNET_array_append (sss->cmd_label_array,
-                         sss->cmd_label_array_length,
-                         policy_create_cmd);
+    const char *policy_create_cmd;
+    va_list ap;
+
+    va_start (ap,
+              sso);
+    while (NULL != (policy_create_cmd = va_arg (ap, const char *)))
+    {
+      GNUNET_array_append (sss->cmd_label_array,
+                           sss->cmd_label_array_length,
+                           policy_create_cmd);
+    }
+    va_end (ap);
   }
-  va_end (ap);
   {
     struct TALER_TESTING_Command cmd = {
       .cls = sss,
diff --git a/src/testing/testing_cmd_truth_upload.c 
b/src/testing/testing_cmd_truth_upload.c
index 91b8647..36d16d0 100644
--- a/src/testing/testing_cmd_truth_upload.c
+++ b/src/testing/testing_cmd_truth_upload.c
@@ -50,7 +50,7 @@ struct TruthUploadState
   /**
    * The ID data to generate user identifier
    */
-  const json_t *id_data;
+  json_t *id_data;
 
   /**
    * The escrow method
@@ -105,9 +105,9 @@ struct TruthUploadState
   void *tpc_cls;
 
   /**
-   * Reference to upload command of previous truth upload.
+   * Reference to salt download.
    */
-  const char *upload_reference;
+  const char *salt_reference;
 
   /**
    * Options for how we are supposed to do the upload.
@@ -171,11 +171,11 @@ truth_upload_run (void *cls,
   const struct ANASTASIS_PaymentSecretP *ps;
 
   tus->is = is;
-  if (NULL != tus->upload_reference)
+  if (NULL != tus->salt_reference)
   {
     ref = TALER_TESTING_interpreter_lookup_command
             (is,
-            tus->upload_reference);
+            tus->salt_reference);
     if (NULL == ref)
     {
       GNUNET_break (0);
@@ -268,7 +268,10 @@ truth_upload_cleanup (void *cls,
     tus->tuo = NULL;
   }
   if (NULL != tus->id_data)
-    json_decref ((json_t *) tus->id_data);
+  {
+    json_decref (tus->id_data);
+    tus->id_data = NULL;
+  }
   if (NULL != tus->truth)
   {
     ANASTASIS_truth_free (tus->truth);
@@ -317,7 +320,6 @@ ANASTASIS_TESTING_make_id_data_example (const char *id_data)
   id = json_pack ("{s:s}",
                   "id_data", id_data);
   GNUNET_assert (NULL != id);
-
   return id;
 }
 
@@ -326,7 +328,7 @@ struct TALER_TESTING_Command
 ANASTASIS_TESTING_cmd_truth_upload (
   const char *label,
   const char *anastasis_url,
-  json_t *id_data,
+  const json_t *id_data,
   const char *method,
   const char *instructions,
   const char *mime_type,
@@ -335,7 +337,7 @@ ANASTASIS_TESTING_cmd_truth_upload (
   const char *paid_order_ref,
   unsigned int http_status,
   enum ANASTASIS_TESTING_TruthStoreOption tso,
-  const char *upload_ref)
+  const char *salt_ref)
 {
   struct TruthUploadState *tus;
 
@@ -344,8 +346,8 @@ ANASTASIS_TESTING_cmd_truth_upload (
   tus->http_status = http_status;
   tus->tsopt = tso;
   tus->anastasis_url = anastasis_url;
-  tus->upload_reference = upload_ref;
-  tus->id_data = id_data;
+  tus->salt_reference = salt_ref;
+  tus->id_data = json_incref ((json_t *) id_data);
   tus->method = method;
   tus->instructions = instructions;
   tus->mime_type = mime_type;

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]