gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -fix purse merge when done again


From: gnunet
Subject: [taler-exchange] branch master updated: -fix purse merge when done against non-existing reserve
Date: Wed, 24 Aug 2022 09:39:12 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 4edb5050 -fix purse merge when done against non-existing reserve
4edb5050 is described below

commit 4edb5050d9904ece8520a44bd241328588584f46
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Aug 24 09:38:53 2022 +0200

    -fix purse merge when done against non-existing reserve
---
 src/exchange/taler-exchange-httpd_reserves_purse.c |  5 ++-
 src/exchangedb/procedures.sql                      | 51 +++++++++++++---------
 2 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_reserves_purse.c 
b/src/exchange/taler-exchange-httpd_reserves_purse.c
index 930acf54..b1002a75 100644
--- a/src/exchange/taler-exchange-httpd_reserves_purse.c
+++ b/src/exchange/taler-exchange-httpd_reserves_purse.c
@@ -380,7 +380,10 @@ purse_transaction (void *cls,
       GNUNET_free (partner_url);
       return GNUNET_DB_STATUS_HARD_ERROR;
     }
-    if (no_reserve)
+    if ( (no_reserve) &&
+         ( (TALER_WAMF_MODE_CREATE_FROM_PURSE_QUOTA
+            == rpc->flags) ||
+           (! TALER_amount_is_zero (&rpc->gf->fees.purse)) ) )
     {
       *mhd_ret
         = TALER_MHD_REPLY_JSON_PACK (
diff --git a/src/exchangedb/procedures.sql b/src/exchangedb/procedures.sql
index 0c21ae41..38f346c0 100644
--- a/src/exchangedb/procedures.sql
+++ b/src/exchangedb/procedures.sql
@@ -1850,17 +1850,16 @@ PERFORM
   FROM exchange.reserves
  WHERE reserve_pub=in_reserve_pub;
 
-IF NOT FOUND
-THEN
-  out_no_reserve=TRUE;
-  out_no_funds=TRUE;
-  RETURN;
-END IF;
-out_no_reserve=FALSE;
+out_no_reserve = NOT FOUND;
 
 IF (in_reserve_quota)
 THEN
   -- Increment active purses per reserve (and check this is allowed)
+  IF (out_no_reserve)
+  THEN
+    out_no_funds=TRUE;
+    RETURN;
+  END IF;
   UPDATE reserves
      SET purses_active=purses_active+1
    WHERE reserve_pub=in_reserve_pub
@@ -1872,28 +1871,38 @@ THEN
   END IF;
 ELSE
   --  UPDATE reserves balance (and check if balance is enough to pay the fee)
-  UPDATE reserves
-  SET
-    current_balance_frac=current_balance_frac-in_purse_fee_frac
-       + CASE
+  IF (out_no_reserve)
+  THEN
+    IF ( (0 != in_purse_fee_val) OR
+         (0 != in_purse_fee_frac) )
+    THEN
+      out_no_funds=TRUE;
+      RETURN;
+    END IF;
+  ELSE
+    UPDATE reserves
+      SET
+        current_balance_frac=current_balance_frac-in_purse_fee_frac
+         + CASE
          WHEN current_balance_frac < in_purse_fee_frac
          THEN 100000000
          ELSE 0
          END,
-    current_balance_val=current_balance_val-in_purse_fee_val
-       - CASE
+       current_balance_val=current_balance_val-in_purse_fee_val
+         - CASE
          WHEN current_balance_frac < in_purse_fee_frac
          THEN 1
          ELSE 0
          END
-  WHERE reserve_pub=in_reserve_pub
-    AND ( (current_balance_val > in_purse_fee_val) OR
-          ( (current_balance_frac >= in_purse_fee_frac) AND
-            (current_balance_val >= in_purse_fee_val) ) );
-  IF NOT FOUND
-  THEN
-    out_no_funds=TRUE;
-    RETURN;
+      WHERE reserve_pub=in_reserve_pub
+        AND ( (current_balance_val > in_purse_fee_val) OR
+              ( (current_balance_frac >= in_purse_fee_frac) AND
+                (current_balance_val >= in_purse_fee_val) ) );
+    IF NOT FOUND
+    THEN
+      out_no_funds=TRUE;
+      RETURN;
+    END IF;
   END IF;
 END IF;
 

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