3
0
mirror of https://github.com/Qortal/qortal.git synced 2025-02-11 17:55:50 +00:00

Disallow registering/updating to a name that looks like an address

This commit is contained in:
catbref 2020-05-27 10:56:03 +01:00
parent 9aabf93523
commit 6eea7c2aa1
4 changed files with 53 additions and 1 deletions

View File

@ -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;

View File

@ -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)

View File

@ -41,7 +41,7 @@ public abstract class Unicode {
buildHomoglyphCodePointArrays();
}
/** Returns string in Unicode canonical normalized form (NFC),<br>
/** Returns string in Unicode canonical normalized form (NFKC),<br>
* with zero-width spaces/joiners removed,<br>
* leading/trailing whitespace trimmed<br>
* and all other whitespace blocks collapsed into a single space character.

View File

@ -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);
}
}
}