gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: fixes for #8069, #8070 and #8072


From: gnunet
Subject: [taler-exchange] branch master updated: fixes for #8069, #8070 and #8072
Date: Fri, 12 Jan 2024 11:58:44 +0100

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

oec pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new a6b35ee7 fixes for #8069, #8070 and #8072
     new 8d9000ec Merge branch 'master' of git.taler.net/exchange
a6b35ee7 is described below

commit a6b35ee7d345aa11e0388733fb95f3a4d2e52180
Author: Özgür Kesim <oec-taler@kesim.org>
AuthorDate: Fri Jan 12 11:56:55 2024 +0100

    fixes for #8069, #8070 and #8072
    
    - TALER_coin_ev_hash function now returns void
    - double free fixes
    - FAIL_IF logic fixes
---
 src/exchange/taler-exchange-httpd_age-withdraw.c   |  8 +--
 .../taler-exchange-httpd_age-withdraw_reveal.c     |  9 ++-
 src/exchange/taler-exchange-httpd_batch-withdraw.c | 15 ++---
 src/exchange/taler-exchange-httpd_recoup.c         | 14 +---
 src/exchangedb/perf_deposits_get_ready.c           | 22 +++----
 src/exchangedb/perf_select_refunds_by_coin.c       | 22 +++----
 src/include/taler_crypto_lib.h                     | 21 +++---
 src/lib/exchange_api_age_withdraw.c                | 74 ++++++++++------------
 src/lib/exchange_api_age_withdraw_reveal.c         | 24 ++++---
 src/lib/exchange_api_batch_withdraw2.c             | 13 +---
 src/testing/testing_api_cmd_age_withdraw.c         |  5 ++
 src/util/crypto.c                                  |  3 +-
 12 files changed, 104 insertions(+), 126 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_age-withdraw.c 
b/src/exchange/taler-exchange-httpd_age-withdraw.c
index 939e0f76..9276fb19 100644
--- a/src/exchange/taler-exchange-httpd_age-withdraw.c
+++ b/src/exchange/taler-exchange-httpd_age-withdraw.c
@@ -225,7 +225,6 @@ parse_age_withdraw_json (
      * the commitment along the way. */
     {
       unsigned int kappa = 0;
-      enum GNUNET_GenericReturnValue ret;
 
       json_array_foreach (j_kappa_coin_evs, kappa, value) {
         struct GNUNET_JSON_Specification spec[] = {
@@ -253,10 +252,9 @@ parse_age_withdraw_json (
         {
           struct TALER_BlindedCoinHashP bch;
 
-          ret = TALER_coin_ev_hash (&awc->coin_evs[idx][kappa],
-                                    &awc->denom_hs[idx],
-                                    &bch);
-          GNUNET_assert (GNUNET_OK == ret);
+          TALER_coin_ev_hash (&awc->coin_evs[idx][kappa],
+                              &awc->denom_hs[idx],
+                              &bch);
           GNUNET_CRYPTO_hash_context_read (hash_context,
                                            &bch,
                                            sizeof(bch));
diff --git a/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c 
b/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
index 632368de..c9aca8e9 100644
--- a/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
+++ b/src/exchange/taler-exchange-httpd_age-withdraw_reveal.c
@@ -357,11 +357,10 @@ calculate_blinded_hash (
       return ret;
     }
 
-    ret = TALER_coin_ev_hash (&detail.blinded_planchet,
-                              &denom_key->h_denom_pub,
-                              bch);
+    TALER_coin_ev_hash (&detail.blinded_planchet,
+                        &denom_key->h_denom_pub,
+                        bch);
     TALER_blinded_planchet_free (&detail.blinded_planchet);
-    GNUNET_assert (GNUNET_OK == ret);
   }
 
   return ret;
@@ -594,7 +593,7 @@ TEH_handler_age_withdraw_reveal (
     result = reply_age_withdraw_reveal_success (rc->connection,
                                                 &actx.commitment);
 
-  } while(0);
+  } while (0);
 
   GNUNET_JSON_parse_free (spec);
   if (NULL != actx.commitment.denom_sigs)
diff --git a/src/exchange/taler-exchange-httpd_batch-withdraw.c 
b/src/exchange/taler-exchange-httpd_batch-withdraw.c
index e296f31f..2b80c2fc 100644
--- a/src/exchange/taler-exchange-httpd_batch-withdraw.c
+++ b/src/exchange/taler-exchange-httpd_batch-withdraw.c
@@ -838,17 +838,10 @@ parse_planchets (const struct TEH_RequestContext *rc,
                                          NULL);
     }
 
-    if (GNUNET_OK !=
-        TALER_coin_ev_hash (&pc->blinded_planchet,
-                            &pc->collectable.denom_pub_hash,
-                            &pc->collectable.h_coin_envelope))
-    {
-      GNUNET_break (0);
-      return TALER_MHD_reply_with_error (rc->connection,
-                                         MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                         
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
-                                         NULL);
-    }
+    TALER_coin_ev_hash (&pc->blinded_planchet,
+                        &pc->collectable.denom_pub_hash,
+                        &pc->collectable.h_coin_envelope);
+
     TEH_METRICS_num_verifications[TEH_MT_SIGNATURE_EDDSA]++;
     if (GNUNET_OK !=
         TALER_wallet_withdraw_verify (&pc->collectable.denom_pub_hash,
diff --git a/src/exchange/taler-exchange-httpd_recoup.c 
b/src/exchange/taler-exchange-httpd_recoup.c
index 6173ca6c..afbbd747 100644
--- a/src/exchange/taler-exchange-httpd_recoup.c
+++ b/src/exchange/taler-exchange-httpd_recoup.c
@@ -284,17 +284,9 @@ verify_and_execute_recoup (
         TALER_EC_EXCHANGE_RECOUP_BLINDING_FAILED,
         NULL);
     }
-    if (GNUNET_OK !=
-        TALER_coin_ev_hash (&blinded_planchet,
-                            &coin->denom_pub_hash,
-                            &pc.h_coin_ev))
-    {
-      GNUNET_break (0);
-      return TALER_MHD_reply_with_error (connection,
-                                         MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                         
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
-                                         NULL);
-    }
+    TALER_coin_ev_hash (&blinded_planchet,
+                        &coin->denom_pub_hash,
+                        &pc.h_coin_ev);
     TALER_blinded_planchet_free (&blinded_planchet);
   }
 
diff --git a/src/exchangedb/perf_deposits_get_ready.c 
b/src/exchangedb/perf_deposits_get_ready.c
index cba751e1..005ea684 100644
--- a/src/exchangedb/perf_deposits_get_ready.c
+++ b/src/exchangedb/perf_deposits_get_ready.c
@@ -33,24 +33,25 @@ static int result;
  * Report line of error if @a cond is true, and jump to label "drop".
  */
 #define FAILIF(cond)                            \
-  do {                                          \
-    if (! (cond)) {break;}                    \
-    GNUNET_break (0);                           \
-    goto drop;                                  \
-  } while (0)
+        do {                                          \
+          if (! (cond)) {break;}                    \
+          GNUNET_break (0);                           \
+          goto drop;                                  \
+        } while (0)
 
 
 /**
  * Initializes @a ptr with random data.
  */
 #define RND_BLK(ptr)                                                    \
-  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ptr, sizeof (*ptr))
+        GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ptr, \
+                                    sizeof (*ptr))
 
 /**
  * Initializes @a ptr with zeros.
  */
 #define ZR_BLK(ptr) \
-  memset (ptr, 0, sizeof (*ptr))
+        memset (ptr, 0, sizeof (*ptr))
 
 /**
  * Currency we use.  Must match test-exchange-db-*.conf.
@@ -300,10 +301,9 @@ run (void *cls)
                                                &new_dkp[cnt]->priv,
                                                true,
                                                bp));
-      GNUNET_assert (GNUNET_OK ==
-                     TALER_coin_ev_hash (bp,
-                                         &cbc.denom_pub_hash,
-                                         &cbc.h_coin_envelope));
+      TALER_coin_ev_hash (bp,
+                          &cbc.denom_pub_hash,
+                          &cbc.h_coin_envelope);
       GNUNET_assert (
         GNUNET_OK ==
         TALER_denom_sign_blinded (
diff --git a/src/exchangedb/perf_select_refunds_by_coin.c 
b/src/exchangedb/perf_select_refunds_by_coin.c
index 8f2946fb..84825d6d 100644
--- a/src/exchangedb/perf_select_refunds_by_coin.c
+++ b/src/exchangedb/perf_select_refunds_by_coin.c
@@ -33,23 +33,24 @@ static int result;
  * Report line of error if @a cond is true, and jump to label "drop".
  */
 #define FAILIF(cond)                            \
-  do {                                          \
-    if (! (cond)) {break;}                    \
-    GNUNET_break (0);                           \
-    goto drop;                                  \
-  } while (0)
+        do {                                          \
+          if (! (cond)) {break;}                    \
+          GNUNET_break (0);                           \
+          goto drop;                                  \
+        } while (0)
 
 /**
  * Initializes @a ptr with random data.
  */
 #define RND_BLK(ptr)                                                    \
-  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ptr, sizeof (*ptr))
+        GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ptr, \
+                                    sizeof (*ptr))
 
 /**
  * Initializes @a ptr with zeros.
  */
 #define ZR_BLK(ptr) \
-  memset (ptr, 0, sizeof (*ptr))
+        memset (ptr, 0, sizeof (*ptr))
 
 /**
  * Currency we use.  Must match test-exchange-db-*.conf.
@@ -325,10 +326,9 @@ run (void *cls)
                                                &new_dkp[cnt]->priv,
                                                true,
                                                bp));
-      GNUNET_assert (GNUNET_OK ==
-                     TALER_coin_ev_hash (bp,
-                                         &cbc.denom_pub_hash,
-                                         &cbc.h_coin_envelope));
+      TALER_coin_ev_hash (bp,
+                          &cbc.denom_pub_hash,
+                          &cbc.h_coin_envelope);
       GNUNET_assert (
         GNUNET_OK ==
         TALER_denom_sign_blinded (
diff --git a/src/include/taler_crypto_lib.h b/src/include/taler_crypto_lib.h
index 4cc05c5c..9e074a0c 100644
--- a/src/include/taler_crypto_lib.h
+++ b/src/include/taler_crypto_lib.h
@@ -1719,9 +1719,8 @@ TALER_test_coin_valid (const struct TALER_CoinPublicInfo 
*coin_public_info,
  * @param blinded_planchet blinded planchet
  * @param denom_hash hash of the denomination public key
  * @param[out] bch where to write the hash
- * @return #GNUNET_OK when successful, #GNUNET_SYSERR if an internal error 
occurred
  */
-enum GNUNET_GenericReturnValue
+void
 TALER_coin_ev_hash (const struct TALER_BlindedPlanchet *blinded_planchet,
                     const struct TALER_DenominationHashP *denom_hash,
                     struct TALER_BlindedCoinHashP *bch);
@@ -2805,15 +2804,15 @@ TALER_CRYPTO_helper_esign_sign_ (
  * @return the error code (or #TALER_EC_NONE on success)
  */
 #define TALER_CRYPTO_helper_esign_sign(esh,ps,epub,esig) (         \
-    /* check size is set correctly */                              \
-    GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*ps)),    \
-    /* check 'ps' begins with the purpose */                       \
-    GNUNET_static_assert (((void*) (ps)) ==                        \
-                          ((void*) &(ps)->purpose)),               \
-    TALER_CRYPTO_helper_esign_sign_ (esh,                          \
-                                     &(ps)->purpose,               \
-                                     epub,                         \
-                                     esig) )
+          /* check size is set correctly */                              \
+          GNUNET_assert (ntohl ((ps)->purpose.size) == sizeof (*ps)),    \
+          /* check 'ps' begins with the purpose */                       \
+          GNUNET_static_assert (((void*) (ps)) ==                        \
+                                ((void*) &(ps)->purpose)),               \
+          TALER_CRYPTO_helper_esign_sign_ (esh,                          \
+                                           &(ps)->purpose,               \
+                                           epub,                         \
+                                           esig) )
 
 
 /**
diff --git a/src/lib/exchange_api_age_withdraw.c 
b/src/lib/exchange_api_age_withdraw.c
index e319332d..8f8d2b2b 100644
--- a/src/lib/exchange_api_age_withdraw.c
+++ b/src/lib/exchange_api_age_withdraw.c
@@ -500,15 +500,15 @@ perform_protocol (
   struct TALER_EXCHANGE_AgeWithdrawBlindedHandle *awbh)
 {
 #define FAIL_IF(cond) \
-  do { \
-    if ((cond)) \
-    { \
-      GNUNET_break (! (cond)); \
-      goto ERROR; \
-    } \
-  } while(0)
-
-  struct GNUNET_HashContext *coins_hctx;
+        do { \
+          if ((cond)) \
+          { \
+            GNUNET_break (! (cond)); \
+            goto ERROR; \
+          } \
+        } while (0)
+
+  struct GNUNET_HashContext *coins_hctx = NULL;
   json_t *j_denoms = NULL;
   json_t *j_array_candidates = NULL;
   json_t *j_request_body = NULL;
@@ -567,7 +567,7 @@ perform_protocol (
         GNUNET_JSON_pack_data_auto (NULL,
                                     denom_h));
       FAIL_IF (NULL == jdenom);
-      FAIL_IF (0 < json_array_append_new (j_denoms,
+      FAIL_IF (0 > json_array_append_new (j_denoms,
                                           jdenom));
 
       /* Build the candidate array */
@@ -586,7 +586,7 @@ perform_protocol (
               &planchet->blinded_planchet));
 
           FAIL_IF (NULL == jc);
-          FAIL_IF (0 < json_array_append_new (j_can,
+          FAIL_IF (0 > json_array_append_new (j_can,
                                               jc));
 
           TALER_coin_ev_hash (&planchet->blinded_planchet,
@@ -598,7 +598,7 @@ perform_protocol (
                                            sizeof(bch));
         }
 
-        FAIL_IF (0 < json_array_append_new (j_array_candidates,
+        FAIL_IF (0 > json_array_append_new (j_array_candidates,
                                             j_can));
       }
     }
@@ -607,6 +607,7 @@ perform_protocol (
   /* Build the hash of the commitment */
   GNUNET_CRYPTO_hash_context_finish (coins_hctx,
                                      &awbh->h_commitment.hash);
+  coins_hctx = NULL;
 
   /* Sign the request */
   TALER_wallet_age_withdraw_sign (&awbh->h_commitment,
@@ -653,6 +654,8 @@ ERROR:
     json_decref (j_request_body);
   if (NULL != curlh)
     curl_easy_cleanup (curlh);
+  if (NULL != coins_hctx)
+    GNUNET_CRYPTO_hash_context_abort (coins_hctx);
   TALER_EXCHANGE_age_withdraw_blinded_cancel (awbh);
   return;
 #undef FAIL_IF
@@ -685,12 +688,8 @@ copy_results (
         .num_coins = awh->num_coins,
         .coin_details = details,
         .blinded_coin_hs = blinded_coin_hs
-      }
-
-
-    }
-
-
+      },
+    },
   };
 
   for (size_t n = 0; n< awh->num_coins; n++)
@@ -838,21 +837,14 @@ csr_withdraw_done (
                                     planchet))
         {
           GNUNET_break (0);
-          TALER_EXCHANGE_age_withdraw_cancel (awh);
           break;
         }
 
-        if (GNUNET_OK !=
-            TALER_coin_ev_hash (&planchet->blinded_planchet,
-                                &planchet->denom_pub_hash,
-                                &can->blinded_coin_h))
-        {
-          GNUNET_break (0);
-          TALER_EXCHANGE_age_withdraw_cancel (awh);
-          break;
-        }
+        TALER_coin_ev_hash (&planchet->blinded_planchet,
+                            &planchet->denom_pub_hash,
+                            &can->blinded_coin_h);
         success = true;
-      } while(0);
+      } while (0);
 
       awh->csr.pending--;
 
@@ -890,13 +882,13 @@ prepare_coins (
     static num_coins])
 {
 #define FAIL_IF(cond) \
-  do { \
-    if ((cond)) \
-    { \
-      GNUNET_break (! (cond)); \
-      goto ERROR; \
-    } \
-  } while(0)
+        do { \
+          if ((cond)) \
+          { \
+            GNUNET_break (! (cond)); \
+            goto ERROR; \
+          } \
+        } while (0)
 
   GNUNET_assert (0 < num_coins);
   awh->age_mask = coin_inputs[0].denom_pub->key.age_mask;
@@ -952,10 +944,9 @@ prepare_coins (
                                          &can->details.h_age_commitment,
                                          &can->details.h_coin_pub,
                                          planchet));
-        FAIL_IF (GNUNET_OK !=
-                 TALER_coin_ev_hash (&planchet->blinded_planchet,
-                                     &planchet->denom_pub_hash,
-                                     &can->blinded_coin_h));
+        TALER_coin_ev_hash (&planchet->blinded_planchet,
+                            &planchet->denom_pub_hash,
+                            &can->blinded_coin_h);
         break;
       case GNUNET_CRYPTO_BSA_CS:
         {
@@ -1025,7 +1016,10 @@ TALER_EXCHANGE_age_withdraw (
   if (GNUNET_OK != prepare_coins (awh,
                                   num_coins,
                                   coin_inputs))
+  {
+    GNUNET_free (awh);
     return NULL;
+  }
 
   /* If there were no CS denominations, we can now perform the actual
    * age-withdraw protocol.  Otherwise, there are calls to /csr-withdraw
diff --git a/src/lib/exchange_api_age_withdraw_reveal.c 
b/src/lib/exchange_api_age_withdraw_reveal.c
index a448d109..cade528d 100644
--- a/src/lib/exchange_api_age_withdraw_reveal.c
+++ b/src/lib/exchange_api_age_withdraw_reveal.c
@@ -57,7 +57,7 @@ struct TALER_EXCHANGE_AgeWithdrawRevealHandle
   const struct TALER_EXCHANGE_AgeWithdrawCoinInput *coins_input;
 
   /* The url for the reveal request */
-  const char *request_url;
+  char *request_url;
 
   /**
    * CURL handle for the request job.
@@ -146,6 +146,9 @@ age_withdraw_reveal_ok (
                     &response);
     /* Make sure the callback isn't called again */
     awrh->callback = NULL;
+    /* Free resources */
+    for (size_t i = 0; i < awrh->num_coins; i++)
+      TALER_blinded_denom_sig_free (&denom_sigs[i]);
   }
 
   return GNUNET_OK;
@@ -340,13 +343,13 @@ perform_protocol (
   json_t *j_sec = NULL;
 
 #define FAIL_IF(cond) \
-  do { \
-    if ((cond)) \
-    { \
-      GNUNET_break (! (cond)); \
-      goto ERROR; \
-    } \
-  } while(0)
+        do { \
+          if ((cond)) \
+          { \
+            GNUNET_break (! (cond)); \
+            goto ERROR; \
+          } \
+        } while (0)
 
   j_array_of_secrets = json_array ();
   FAIL_IF (NULL == j_array_of_secrets);
@@ -463,7 +466,10 @@ TALER_EXCHANGE_age_withdraw_reveal_cancel (
     awrh->job = NULL;
   }
   TALER_curl_easy_post_finished (&awrh->post_ctx);
-  /* FIXME[oec]: anything else left to cleanup!? */
+
+  if (NULL != awrh->request_url)
+    GNUNET_free (awrh->request_url);
+
   GNUNET_free (awrh);
 }
 
diff --git a/src/lib/exchange_api_batch_withdraw2.c 
b/src/lib/exchange_api_batch_withdraw2.c
index b6f77319..453d8a0a 100644
--- a/src/lib/exchange_api_batch_withdraw2.c
+++ b/src/lib/exchange_api_batch_withdraw2.c
@@ -373,16 +373,9 @@ TALER_EXCHANGE_batch_withdraw2 (
       json_decref (jc);
       return NULL;
     }
-    if (GNUNET_OK !=
-        TALER_coin_ev_hash (&pd->blinded_planchet,
-                            &pd->denom_pub_hash,
-                            &bch))
-    {
-      GNUNET_break (0);
-      TALER_EXCHANGE_batch_withdraw2_cancel (wh);
-      json_decref (jc);
-      return NULL;
-    }
+    TALER_coin_ev_hash (&pd->blinded_planchet,
+                        &pd->denom_pub_hash,
+                        &bch);
     TALER_wallet_withdraw_sign (&pd->denom_pub_hash,
                                 &coin_total,
                                 &bch,
diff --git a/src/testing/testing_api_cmd_age_withdraw.c 
b/src/testing/testing_api_cmd_age_withdraw.c
index 30f409f4..6ad22809 100644
--- a/src/testing/testing_api_cmd_age_withdraw.c
+++ b/src/testing/testing_api_cmd_age_withdraw.c
@@ -585,6 +585,7 @@ age_withdraw_reveal_cb (
       awrs->denom_sigs = GNUNET_new_array (awrs->num_coins,
                                            struct TALER_DenominationSignature);
       for (size_t n = 0; n < awrs->num_coins; n++)
+      {
         GNUNET_assert (GNUNET_OK ==
                        TALER_denom_sig_unblind (
                          &awrs->denom_sigs[n],
@@ -593,8 +594,12 @@ age_withdraw_reveal_cb (
                          &aws->coin_outputs[n].details.h_coin_pub,
                          &aws->coin_outputs[n].details.alg_values,
                          &aws->coin_inputs[n].denom_pub->key));
+        TALER_denom_sig_free (&awrs->denom_sigs[n]);
+      }
+
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                   "age-withdraw reveal success!\n");
+      GNUNET_free (awrs->denom_sigs);
     }
     break;
   case MHD_HTTP_NOT_FOUND:
diff --git a/src/util/crypto.c b/src/util/crypto.c
index d8c6d791..4735af3b 100644
--- a/src/util/crypto.c
+++ b/src/util/crypto.c
@@ -473,7 +473,7 @@ TALER_coin_pub_hash (const struct TALER_CoinSpendPublicKeyP 
*coin_pub,
 }
 
 
-enum GNUNET_GenericReturnValue
+void
 TALER_coin_ev_hash (const struct TALER_BlindedPlanchet *blinded_planchet,
                     const struct TALER_DenominationHashP *denom_hash,
                     struct TALER_BlindedCoinHashP *bch)
@@ -488,7 +488,6 @@ TALER_coin_ev_hash (const struct TALER_BlindedPlanchet 
*blinded_planchet,
                                 hash_context);
   GNUNET_CRYPTO_hash_context_finish (hash_context,
                                      &bch->hash);
-  return GNUNET_OK;
 }
 
 

-- 
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]