Skip to content

Commit b64ba25

Browse files
committed
Introduce XData::findField
1 parent 35cd90c commit b64ba25

File tree

5 files changed

+30
-13
lines changed

5 files changed

+30
-13
lines changed

src/xmpp/xmpp-im/httpfileupload.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,12 @@ void HttpFileUpload::start()
118118
}
119119
if (ver != XEP0363::vUnknown) {
120120
QVector<std::pair<HttpHost, int>> hosts;
121-
const XData::Field field = item.registeredExtension(xmlns).getField(QLatin1String("max-file-size"));
122-
if (field.isValid() && field.type() == XData::Field::Field_TextSingle)
123-
sizeLimit = field.value().at(0).toULongLong();
121+
auto optField = item.registeredExtension(xmlns).findField(QLatin1String("max-file-size"));
122+
if (optField) {
123+
const XData::Field &field = *optField;
124+
if (field.isValid() && field.type() == XData::Field::Field_TextSingle)
125+
sizeLimit = field.value().value(0).toULongLong();
126+
}
124127
HttpHost host;
125128
host.ver = ver;
126129
host.jid = item.jid();

src/xmpp/xmpp-im/types.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -2902,20 +2902,22 @@ CaptchaChallenge::CaptchaChallenge(const Message &m) : d(new CaptchaChallengePri
29022902
d->dt = QDateTime::currentDateTime();
29032903
}
29042904

2905-
if (m.getForm().registrarType() != "urn:xmpp:captcha" || m.getForm().type() != XData::Data_Form)
2905+
if (m.getForm().registrarType() != QLatin1String("urn:xmpp:captcha") || m.getForm().type() != XData::Data_Form
2906+
|| m.id().isEmpty())
29062907
return;
29072908

2908-
if (m.id().isEmpty() || m.getForm().getField("challenge").value().value(0) != m.id())
2909+
auto fieldOpt = m.getForm().findField("challenge");
2910+
if (!fieldOpt || fieldOpt->value().value(0) != m.id())
29092911
return;
29102912

2911-
if (m.getForm().getField("from").value().value(0).isEmpty())
2913+
if (fieldOpt = m.getForm().findField("from"); !fieldOpt || fieldOpt->value().value(0).isEmpty())
29122914
return;
29132915

29142916
d->form = m.getForm();
29152917
d->explanation = m.body();
29162918
d->urls = m.urlList();
29172919
d->arbiter = m.from();
2918-
d->offendedJid = Jid(m.getForm().getField("from").value().value(0));
2920+
d->offendedJid = Jid(fieldOpt->value().value(0));
29192921
}
29202922

29212923
CaptchaChallenge::~CaptchaChallenge() { }

src/xmpp/xmpp-im/xmpp_vcard4.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -1493,7 +1493,8 @@ void VCard::setPhoto(const PAdvUris &photo)
14931493
Item<UriValue> &VCard::setPhoto(const UriValue &photo)
14941494
{
14951495
INIT_D();
1496-
d->photo.append({ Parameters(), photo });
1496+
PAdvUris l = { { PAdvUri { Parameters(), photo } } };
1497+
d->photo = std::move(l);
14971498
return d->photo.last();
14981499
}
14991500

src/xmpp/xmpp-im/xmpp_xdata.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ void XData::setRegistrarType(const QString &registrarType) { d->registrarType =
338338

339339
const XData::FieldList &XData::fields() const { return d->fields; }
340340

341-
XData::Field XData::getField(const QString &var) const
341+
std::optional<XMPP::XData::Field> XMPP::XData::findField(const QString &var) const
342342
{
343343
if (!d->fields.isEmpty()) {
344344
FieldList::ConstIterator it = d->fields.begin();
@@ -348,7 +348,13 @@ XData::Field XData::getField(const QString &var) const
348348
return f;
349349
}
350350
}
351-
return Field();
351+
return {};
352+
}
353+
354+
XData::Field XData::getField(const QString &var) const
355+
{
356+
auto of = findField(var);
357+
return of ? *of : XData::Field {};
352358
}
353359

354360
XData::Field &XData::fieldRef(const QString &var)

src/xmpp/xmpp-im/xmpp_xdata.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include <QString>
2929
#include <QStringList>
3030

31+
#include <optional>
32+
3133
class QDomDocument;
3234
class QDomElement;
3335

@@ -152,9 +154,12 @@ class XData {
152154
typedef QList<Field> FieldList;
153155

154156
const FieldList &fields() const;
155-
Field getField(const QString &var) const;
156-
Field &fieldRef(const QString &var);
157-
void setFields(const FieldList &fl);
157+
158+
std::optional<Field> findField(const QString &var) const;
159+
Field getField(const QString &var) const;
160+
Field &fieldRef(const QString &var); // dangerous
161+
162+
void setFields(const FieldList &fl);
158163

159164
private:
160165
class Private : public QSharedData {

0 commit comments

Comments
 (0)