@@ -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+
509559QString 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
0 commit comments