diff --git a/src/main/java/org/qortal/transaction/RegisterNameTransaction.java b/src/main/java/org/qortal/transaction/RegisterNameTransaction.java
index 555fcc60..66c1fc8b 100644
--- a/src/main/java/org/qortal/transaction/RegisterNameTransaction.java
+++ b/src/main/java/org/qortal/transaction/RegisterNameTransaction.java
@@ -6,6 +6,7 @@ import java.util.List;
import org.qortal.account.Account;
import org.qortal.asset.Asset;
import org.qortal.block.BlockChain;
+import org.qortal.crypto.Crypto;
import org.qortal.data.transaction.RegisterNameTransactionData;
import org.qortal.data.transaction.TransactionData;
import org.qortal.naming.Name;
@@ -62,6 +63,10 @@ public class RegisterNameTransaction extends Transaction {
if (!name.equals(Unicode.normalize(name)))
return ValidationResult.NAME_NOT_NORMALIZED;
+ // Check name doesn't look like an address
+ if (Crypto.isValidAddress(name))
+ return ValidationResult.INVALID_ADDRESS;
+
// Check registrant has enough funds
if (registrant.getConfirmedBalance(Asset.QORT) < this.registerNameTransactionData.getFee())
return ValidationResult.NO_BALANCE;
diff --git a/src/main/java/org/qortal/transaction/UpdateNameTransaction.java b/src/main/java/org/qortal/transaction/UpdateNameTransaction.java
index fdcba164..ebfde97c 100644
--- a/src/main/java/org/qortal/transaction/UpdateNameTransaction.java
+++ b/src/main/java/org/qortal/transaction/UpdateNameTransaction.java
@@ -5,6 +5,7 @@ import java.util.List;
import org.qortal.account.Account;
import org.qortal.asset.Asset;
+import org.qortal.crypto.Crypto;
import org.qortal.data.naming.NameData;
import org.qortal.data.transaction.TransactionData;
import org.qortal.data.transaction.UpdateNameTransactionData;
@@ -77,6 +78,10 @@ public class UpdateNameTransaction extends Transaction {
// Check new name is in normalized form (no leading/trailing whitespace, etc.)
if (!newName.equals(Unicode.normalize(newName)))
return ValidationResult.NAME_NOT_NORMALIZED;
+
+ // Check name doesn't look like an address
+ if (Crypto.isValidAddress(newName))
+ return ValidationResult.INVALID_ADDRESS;
}
// Check new data size bounds (0 length means don't update data)
diff --git a/src/main/java/org/qortal/utils/Unicode.java b/src/main/java/org/qortal/utils/Unicode.java
index 8a9092ea..b73f3a32 100644
--- a/src/main/java/org/qortal/utils/Unicode.java
+++ b/src/main/java/org/qortal/utils/Unicode.java
@@ -41,7 +41,7 @@ public abstract class Unicode {
buildHomoglyphCodePointArrays();
}
- /** Returns string in Unicode canonical normalized form (NFC),
+ /** Returns string in Unicode canonical normalized form (NFKC),
* with zero-width spaces/joiners removed,
* leading/trailing whitespace trimmed
* and all other whitespace blocks collapsed into a single space character.
diff --git a/src/test/java/org/qortal/test/naming/MiscTests.java b/src/test/java/org/qortal/test/naming/MiscTests.java
index 0bb750d0..c46cbfab 100644
--- a/src/test/java/org/qortal/test/naming/MiscTests.java
+++ b/src/test/java/org/qortal/test/naming/MiscTests.java
@@ -96,4 +96,46 @@ public class MiscTests extends Common {
}
}
+ // test trying to register a name that looks like an address
+ @Test
+ public void testRegisterAddressAsName() throws DataException {
+ try (final Repository repository = RepositoryManager.getRepository()) {
+ // Register-name
+ PrivateKeyAccount alice = Common.getTestAccount(repository, "alice");
+ String name = alice.getAddress();
+ String data = "{}";
+
+ RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, data);
+ Transaction transaction = Transaction.fromData(repository, transactionData);
+ transaction.sign(alice);
+
+ ValidationResult result = transaction.importAsUnconfirmed();
+ assertTrue("Transaction should be invalid", ValidationResult.OK != result);
+ }
+ }
+
+ // test register then trying to update to a name that looks like an address
+ @Test
+ public void testUpdateToAddressAsName() throws DataException {
+ try (final Repository repository = RepositoryManager.getRepository()) {
+ // Register-name
+ PrivateKeyAccount alice = Common.getTestAccount(repository, "alice");
+ String name = "test-name";
+ String data = "{}";
+
+ TransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, data);
+ TransactionUtils.signAndMint(repository, transactionData, alice);
+
+ // we shouldn't be able to update name to an address
+ String newName = alice.getAddress();
+ String newData = "";
+ transactionData = new UpdateNameTransactionData(TestTransaction.generateBase(alice), name, newName, newData);
+ Transaction transaction = Transaction.fromData(repository, transactionData);
+ transaction.sign(alice);
+
+ ValidationResult result = transaction.importAsUnconfirmed();
+ assertTrue("Transaction should be invalid", ValidationResult.OK != result);
+ }
+ }
+
}