From kde-commits Sat Apr 21 17:56:57 2007 From: Harri Porten Date: Sat, 21 Apr 2007 17:56:57 +0000 To: kde-commits Subject: KDE/kdelibs/khtml/ecma Message-Id: <1177178217.561890.10225.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=117717822708210 SVN commit 656559 by porten: argument checking M +36 -24 xmlhttprequest.cpp M +2 -2 xmlhttprequest.h --- trunk/KDE/kdelibs/khtml/ecma/xmlhttprequest.cpp #656558:656559 @@ -354,10 +354,15 @@ changeState(XHRS_Open); } -void XMLHttpRequest::send(const QString& _body) +void XMLHttpRequest::send(const QString& _body, int& ec) { aborted = false; + if (m_state != XHRS_Open) { + ec = DOMException::INVALID_STATE_ERR; + return; + } + if (method == "post") { QString protocol = url.protocol().toLower(); @@ -459,10 +464,22 @@ changeState(XHRS_Uninitialized); } -void XMLHttpRequest::setRequestHeader(const QString& _name, const QString &value) +void XMLHttpRequest::setRequestHeader(const QString& _name, const QString& _value, int& ec) { + if (m_state != XHRS_Open) { + ec = DOMException::INVALID_STATE_ERR; + return; + } + QString nameTrimmed = _name.trimmed(); + if (nameTrimmed.isEmpty()) { + ec = DOMException::SYNTAX_ERR; + return; + } QString name = nameTrimmed.toLower(); + QString value = _value.trimmed(); + if (value.isEmpty()) + return; // Content-type needs to be set separately from the other headers if(name == "content-type") { @@ -495,7 +512,7 @@ return; } - m_requestHeaders[nameTrimmed] = value.trimmed(); + m_requestHeaders[nameTrimmed] = value; } ValueImp *XMLHttpRequest::getAllResponseHeaders() const @@ -702,6 +719,9 @@ } XMLHttpRequest *request = static_cast(thisObj); + + int ec = 0; + switch (id) { case XMLHttpRequest::Abort: request->abort(); @@ -749,15 +769,6 @@ } case XMLHttpRequest::Send: { - if (args.size() > 1) { - return Undefined(); - } - - if (request->m_state != XHRS_Open) { - setDOMException(exec, DOMException::INVALID_STATE_ERR); - return jsUndefined(); - } - QString body; if (args.size() >= 1) { DOM::NodeImpl* docNode = toNode(args[0]); @@ -776,22 +787,23 @@ } } - request->send(body); - + request->send(body, ec); + setDOMException(exec, ec); return jsUndefined(); } case XMLHttpRequest::SetRequestHeader: - if (args.size() != 2) { + if (args.size() < 2) + return throwError(exec, SyntaxError, "Not enough arguments"); + JSValue* keyArgument = args[0]; + JSValue* valArgument = args[1]; + QString key, val; + if (!keyArgument->isUndefined() && !keyArgument->isNull()) + key = keyArgument->toString(exec).qstring(); + if (!valArgument->isUndefined() && !valArgument->isNull()) + val = valArgument->toString(exec).qstring(); + request->setRequestHeader(key, val, ec); + setDOMException(exec, ec); return jsUndefined(); - } - if (request->m_state != XHRS_Open) { - setDOMException(exec, DOMException::INVALID_STATE_ERR); - return jsUndefined(); - } - - request->setRequestHeader(args[0]->toString(exec).qstring(), args[1]->toString(exec).qstring()); - - return jsUndefined(); } return Undefined(); --- trunk/KDE/kdelibs/khtml/ecma/xmlhttprequest.h #656558:656559 @@ -113,9 +113,9 @@ void processSyncLoadResults(const QByteArray &data, const KUrl &finalURL, const QString &headers); void open(const QString& _method, const KUrl& _url, bool _async); - void send(const QString& _body); + void send(const QString& _body, int& ec); void abort(); - void setRequestHeader(const QString& name, const QString &value); + void setRequestHeader(const QString& name, const QString& value, int& ec); ValueImp *getAllResponseHeaders() const; ValueImp *getResponseHeader(const QString& name) const;