Bug #3668 » wt-3.3.4-rc1-gnu-regex-refencoder.patch
src/web/RefEncoder.C | ||
---|---|---|
#include "WebSession.h"
|
||
#include "WebUtils.h"
|
||
#include <boost/regex.hpp>
|
||
#include <boost/algorithm/string/trim.hpp>
|
||
#include "3rdparty/rapidxml/rapidxml.hpp"
|
||
#include "3rdparty/rapidxml/rapidxml_print.hpp"
|
||
... | ... | |
static std::string replaceUrlInStyle(std::string& style, WApplication *app)
|
||
{
|
||
boost::regex re("url\\((.*//.*)\\)",
|
||
boost::regex::perl | boost::regex::icase);
|
||
boost::sregex_iterator i(style.begin(), style.end(), re);
|
||
boost::sregex_iterator end;
|
||
WStringStream result;
|
||
std::size_t pos = 0;
|
||
std::size_t pos = 0, urlPos, schemePos, closePos;
|
||
while ((urlPos = style.find("url(", pos)) != std::string::npos) {
|
||
urlPos += 4;
|
||
result << style.substr(pos, urlPos - pos);
|
||
pos = urlPos;
|
||
for (; i != end; ++i) {
|
||
result << style.substr(pos, i->position(1) - pos);
|
||
schemePos = style.find("//", pos);
|
||
if (schemePos == std::string::npos)
|
||
continue;
|
||
closePos = style.find(')', pos);
|
||
if (closePos == std::string::npos || closePos < schemePos)
|
||
continue;
|
||
std::string url = style.substr(i->position(1), i->length(1));
|
||
std::string url = style.substr(pos, closePos - pos);
|
||
boost::algorithm::trim(url);
|
||
if (url.length() > 2)
|
||
if (url[0] == '\'' || url[1] == '"')
|
||
... | ... | |
|
||
result << WWebWidget::jsStringLiteral(app->encodeUntrustedUrl(url), '\'');
|
||
pos = i->position(1) + i->length(1);
|
||
pos = closePos;
|
||
}
|
||
result << style.substr(pos);
|