summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Pösel <robyer@seznam.cz>2017-03-12 22:08:07 +0100
committerGitHub <noreply@github.com>2017-03-12 22:08:07 +0100
commit52c25fc77b6a06a6433ab36da9d94360f684cfe3 (patch)
treebe1732e2423621c90f38b55eb16038fc6346cc95
parent355d635f6caa8d3e2d77feafb3f7c8a964208a7e (diff)
SkypeWeb: Fix replacing numeric HTML entities (fixes #685)
-rw-r--r--protocols/SkypeWeb/src/skype_utils.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/protocols/SkypeWeb/src/skype_utils.cpp b/protocols/SkypeWeb/src/skype_utils.cpp
index 70ce68f948..3f91e7242f 100644
--- a/protocols/SkypeWeb/src/skype_utils.cpp
+++ b/protocols/SkypeWeb/src/skype_utils.cpp
@@ -374,7 +374,7 @@ char *CSkypeProto::RemoveHtml(const char *text)
{
// Numeric replacement
bool hex = false;
- if (data.at(1) == 'x')
+ if (entity.at(1) == 'x')
{
hex = true;
entity = entity.substr(2);
@@ -385,9 +385,14 @@ char *CSkypeProto::RemoveHtml(const char *text)
}
if (!entity.empty())
{
+ found = true;
+ errno = 0;
unsigned long value = strtoul(entity.c_str(), NULL, hex ? 16 : 10);
-
- if (value <= 127)
+ if (errno != 0)
+ { // error with conversion in strtoul, ignore the result
+ found = false;
+ }
+ else if (value <= 127)
{ // U+0000 .. U+007F
new_string += (char)value;
}
@@ -409,7 +414,6 @@ char *CSkypeProto::RemoveHtml(const char *text)
new_string += (char)((value >> 8) & 0xFF);
new_string += (char)((value)& 0xFF);
}
- found = true;
}
}
else
@@ -619,4 +623,4 @@ INT_PTR CSkypeProto::GlobalParseSkypeUriService(WPARAM wParam, LPARAM lParam)
return Accounts[i]->ParseSkypeUriService(wParam, lParam);
return 1;
-} \ No newline at end of file
+}