Skip to content

Commit 4c4c539

Browse files
committed
FIXUP: Refactor hex/ascii conversion
1 parent ebc1a01 commit 4c4c539

File tree

3 files changed

+113
-25
lines changed

3 files changed

+113
-25
lines changed

src/qt/buynamespage.cpp

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <interfaces/node.h>
55
#include <qt/configurenamedialog.h>
66
#include <qt/guiutil.h>
7+
#include <qt/nametablemodel.h>
78
#include <qt/platformstyle.h>
89
#include <qt/walletmodel.h>
910
#include <rpc/protocol.h>
@@ -112,7 +113,20 @@ QString BuyNamesPage::name_available(const QString &name) const
112113
LogPrint(BCLog::QT, "wallet attempting name_show: name=%s\n", strName);
113114

114115
UniValue params(UniValue::VOBJ);
115-
params.pushKV ("name", strName);
116+
117+
try
118+
{
119+
const QString hexName = NameTableModel::asciiToHex(name);
120+
params.pushKV ("name", hexName.toStdString());
121+
}
122+
catch (const InvalidNameString& exc)
123+
{
124+
return tr ("Name was invalid ASCII.");
125+
}
126+
127+
UniValue options(UniValue::VOBJ);
128+
options.pushKV ("nameEncoding", "hex");
129+
params.pushKV ("options", options);
116130

117131
const std::string walletURI = "/wallet/" + walletModel->getWalletName().toStdString();
118132

@@ -146,20 +160,31 @@ QString BuyNamesPage::firstupdate(const QString &name, const std::optional<QStri
146160

147161
UniValue params(UniValue::VOBJ);
148162

149-
valtype vtName = valtype (strName.begin (), strName.end ());
150-
std::string hexName = EncodeName (vtName, NameEncoding::HEX);
151-
params.pushKV ("name", hexName);
163+
try
164+
{
165+
const QString hexName = NameTableModel::asciiToHex(name);
166+
params.pushKV ("name", hexName.toStdString());
167+
}
168+
catch (const InvalidNameString& exc)
169+
{
170+
return tr ("Name was invalid ASCII.");
171+
}
152172

153173
UniValue options(UniValue::VOBJ);
154174
options.pushKV ("nameEncoding", "hex");
155175

156176
if (value)
157177
{
158-
std::string strValue = value.value().toStdString();
159-
valtype vtValue = valtype (strValue.begin (), strValue.end ());
160-
std::string hexValue = EncodeName (vtValue, NameEncoding::HEX);
178+
try
179+
{
180+
const QString hexValue = NameTableModel::asciiToHex(value.value());
181+
params.pushKV ("value", hexValue.toStdString());
182+
}
183+
catch (const InvalidNameString& exc)
184+
{
185+
return tr ("Value was invalid ASCII.");
186+
}
161187

162-
params.pushKV ("value", hexValue);
163188
options.pushKV ("valueEncoding", "hex");
164189
}
165190

src/qt/nametablemodel.cpp

Lines changed: 77 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,26 @@ class NameTablePriv
108108
}
109109

110110
const std::string hexName = maybeName.get_str();
111-
const valtype vtName = DecodeName(hexName, NameEncoding::HEX);
112-
const std::string name = std::string (vtName.begin (), vtName.end ());
111+
std::string name;
112+
try
113+
{
114+
name = NameTableModel::hexToAscii(QString::fromStdString(hexName)).toStdString();
115+
}
116+
catch (const InvalidNameString& exc)
117+
{
118+
continue;
119+
}
113120

114121
const std::string hexData = maybeData.get_str();
115-
const valtype vtData = DecodeName(hexData, NameEncoding::HEX);
116-
const std::string data = std::string (vtData.begin (), vtData.end ());
122+
std::string data;
123+
try
124+
{
125+
data = NameTableModel::hexToAscii(QString::fromStdString(hexData)).toStdString();
126+
}
127+
catch (const InvalidNameString& exc)
128+
{
129+
continue;
130+
}
117131

118132
const int height = find_value ( v, "height").get_int();
119133
const int expiresIn = find_value ( v, "expires_in").get_int();
@@ -165,12 +179,26 @@ class NameTablePriv
165179
}
166180

167181
const std::string hexName = maybeName.get_str();
168-
const valtype vtName = DecodeName(hexName, NameEncoding::HEX);
169-
const std::string name = std::string (vtName.begin (), vtName.end ());
182+
std::string name;
183+
try
184+
{
185+
name = NameTableModel::hexToAscii(QString::fromStdString(hexName)).toStdString();
186+
}
187+
catch (const InvalidNameString& exc)
188+
{
189+
continue;
190+
}
170191

171192
const std::string hexData = maybeData.get_str();
172-
const valtype vtData = DecodeName(hexData, NameEncoding::HEX);
173-
const std::string data = std::string (vtData.begin (), vtData.end ());
193+
std::string data;
194+
try
195+
{
196+
data = NameTableModel::hexToAscii(QString::fromStdString(hexData)).toStdString();
197+
}
198+
catch (const InvalidNameString& exc)
199+
{
200+
continue;
201+
}
174202

175203
const bool isMine = find_value ( v, "ismine").get_bool();
176204
const std::string op = find_value ( v, "op").get_str();
@@ -506,27 +534,59 @@ NameTableModel::emitDataChanged(int idx)
506534
dataChanged(index(idx, 0), index(idx, columns.length()-1));
507535
}
508536

537+
QString NameTableModel::asciiToHex(const QString &ascii)
538+
{
539+
const std::string strAscii = ascii.toStdString();
540+
const valtype vt = DecodeName (strAscii, NameEncoding::ASCII);
541+
542+
const std::string strHex = EncodeName (vt, NameEncoding::HEX);
543+
const QString hex = QString::fromStdString(strHex);
544+
545+
return hex;
546+
}
547+
548+
QString NameTableModel::hexToAscii(const QString &hex)
549+
{
550+
const std::string strHex = hex.toStdString();
551+
const valtype vt = DecodeName (strHex, NameEncoding::HEX);
552+
553+
const std::string strAscii = EncodeName (vt, NameEncoding::ASCII);
554+
const QString ascii = QString::fromStdString(strAscii);
555+
556+
return ascii;
557+
}
558+
509559
QString NameTableModel::update(const QString &name, const std::optional<QString> &value, const std::optional<QString> &transferTo) const
510560
{
511-
const std::string strName = name.toStdString();
512-
LogPrint(BCLog::QT, "wallet attempting name_update: name=%s\n", strName);
561+
LogPrint(BCLog::QT, "wallet attempting name_update: name=%s\n", name.toStdString());
513562

514563
UniValue params(UniValue::VOBJ);
515564

516-
valtype vtName = valtype (strName.begin (), strName.end ());
517-
std::string hexName = EncodeName (vtName, NameEncoding::HEX);
518-
params.pushKV ("name", hexName);
565+
try
566+
{
567+
const QString hexName = NameTableModel::asciiToHex(name);
568+
params.pushKV ("name", hexName.toStdString());
569+
}
570+
catch (const InvalidNameString& exc)
571+
{
572+
return tr ("Name was invalid ASCII.");
573+
}
519574

520575
UniValue options(UniValue::VOBJ);
521576
options.pushKV ("nameEncoding", "hex");
522577

523578
if (value)
524579
{
525-
std::string strValue = value.value().toStdString();
526-
valtype vtValue = valtype (strValue.begin (), strValue.end ());
527-
std::string hexValue = EncodeName (vtValue, NameEncoding::HEX);
580+
try
581+
{
582+
const QString hexValue = NameTableModel::asciiToHex(value.value());
583+
params.pushKV ("value", hexValue.toStdString());
584+
}
585+
catch (const InvalidNameString& exc)
586+
{
587+
return tr ("Value was invalid ASCII.");
588+
}
528589

529-
params.pushKV ("value", hexValue);
530590
options.pushKV ("valueEncoding", "hex");
531591
}
532592

src/qt/nametablemodel.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ class NameTableModel : public QAbstractTableModel
5050
Qt::ItemFlags flags(const QModelIndex &index) const;
5151
/*@}*/
5252

53+
static QString asciiToHex(const QString &ascii);
54+
static QString hexToAscii(const QString &hex);
55+
5356
QString update(const QString &name, const std::optional<QString> &value, const std::optional<QString> &transferTo) const;
5457
QString renew(const QString &name) const;
5558

0 commit comments

Comments
 (0)