summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-03-01 13:31:46 +0100
committerChristian Grothoff <christian@grothoff.org>2020-03-01 13:31:46 +0100
commit1eb292fe1fa6e00df8758fc1c2e5ac93f341dc4e (patch)
treef50a78d26e7fd9a0241382ef4fcec4fe9baadbba /src
parent2906aeb45939efa0fb5b4ab85878eb2e86418933 (diff)
downloadexchange-1eb292fe1fa6e00df8758fc1c2e5ac93f341dc4e.tar.gz
exchange-1eb292fe1fa6e00df8758fc1c2e5ac93f341dc4e.tar.bz2
exchange-1eb292fe1fa6e00df8758fc1c2e5ac93f341dc4e.zip
check well-formedness of URI when signing, check return value of function for error
Diffstat (limited to 'src')
-rw-r--r--src/exchange-tools/taler-exchange-wire.c7
-rw-r--r--src/include/taler_json_lib.h9
-rw-r--r--src/json/json_wire.c14
3 files changed, 25 insertions, 5 deletions
diff --git a/src/exchange-tools/taler-exchange-wire.c b/src/exchange-tools/taler-exchange-wire.c
index 0d6cdddb..10d849b4 100644
--- a/src/exchange-tools/taler-exchange-wire.c
+++ b/src/exchange-tools/taler-exchange-wire.c
@@ -74,6 +74,13 @@ sign_account_data (void *cls,
wire = TALER_JSON_exchange_wire_signature_make (ai->payto_uri,
&master_priv);
+ if (NULL == wire)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not sign wire account `%s'. Is the URI well-formed?\n");
+ global_ret = 1;
+ return;
+ }
GNUNET_assert (NULL != wire);
json_out = json_dumps (wire,
JSON_INDENT (2));
diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h
index d5f6b0ba..c4e107c0 100644
--- a/src/include/taler_json_lib.h
+++ b/src/include/taler_json_lib.h
@@ -149,7 +149,8 @@ TALER_JSON_get_error_code2 (const void *data,
/**
* Compute the hash of the given wire details. The resulting
- * hash is what is put into the contract.
+ * hash is what is put into the contract. Also performs rudimentary
+ * checks on the account data *if* supported.
*
* @param wire_s wire details to hash
* @param[out] hc set to the hash
@@ -161,7 +162,8 @@ TALER_JSON_merchant_wire_signature_hash (const json_t *wire_s,
/**
- * Check the signature in @a wire_s.
+ * Check the signature in @a wire_s. Also performs rudimentary
+ * checks on the account data *if* supported.
*
* @param wire_s signed wire information of an exchange
* @param master_pub master public key of the exchange
@@ -177,7 +179,8 @@ TALER_JSON_exchange_wire_signature_check (const json_t *wire_s,
* Create a signed wire statement for the given account.
*
* @param payto_uri account specification
- * @param master_priv private key to sign with, NULL to not sign
+ * @param master_priv private key to sign with
+ * @return NULL if @a payto_uri is malformed
*/
json_t *
TALER_JSON_exchange_wire_signature_make (const char *payto_uri,
diff --git a/src/json/json_wire.c b/src/json/json_wire.c
index 4fc4cfea..b0bb6750 100644
--- a/src/json/json_wire.c
+++ b/src/json/json_wire.c
@@ -392,7 +392,8 @@ TALER_JSON_merchant_wire_signature_hash (const json_t *wire_s,
/**
- * Check the signature in @a wire_s.
+ * Check the signature in @a wire_s. Also performs rudimentary
+ * checks on the account data *if* supported.
*
* @param wire_s signed wire information of an exchange
* @param master_pub master public key of the exchange
@@ -420,6 +421,7 @@ TALER_JSON_exchange_wire_signature_check (const json_t *wire_s,
return GNUNET_SYSERR;
}
+ /* Note: this check does nothing if this is not an IBAN */
if (GNUNET_SYSERR == validate_payto_iban (payto_uri))
{
GNUNET_break_op (0);
@@ -436,7 +438,8 @@ TALER_JSON_exchange_wire_signature_check (const json_t *wire_s,
* Create a signed wire statement for the given account.
*
* @param payto_uri account specification
- * @param master_priv private key to sign with, NULL to not sign
+ * @param master_priv private key to sign with
+ * @return NULL if @a payto_uri is malformed
*/
json_t *
TALER_JSON_exchange_wire_signature_make (const char *payto_uri,
@@ -445,6 +448,13 @@ TALER_JSON_exchange_wire_signature_make (const char *payto_uri,
{
struct TALER_MasterSignatureP master_sig;
+ /* Note: this check does nothing if this is not an IBAN */
+ if (GNUNET_SYSERR == validate_payto_iban (payto_uri))
+ {
+ GNUNET_break_op (0);
+ return NULL;
+ }
+
TALER_exchange_wire_signature_make (payto_uri,
master_priv,
&master_sig);