Prevent overlapping tags
This commit is contained in:
@@ -256,6 +256,15 @@ namespace Discord
|
|||||||
if (mode != TagHandling.Remove)
|
if (mode != TagHandling.Remove)
|
||||||
{
|
{
|
||||||
Emoji emoji = (Emoji)tag.Value;
|
Emoji emoji = (Emoji)tag.Value;
|
||||||
|
|
||||||
|
//Remove if its name contains any bad chars (prevents a few tag exploits)
|
||||||
|
for (int i = 0; i < emoji.Name.Length; i++)
|
||||||
|
{
|
||||||
|
char c = emoji.Name[i];
|
||||||
|
if (!char.IsLetterOrDigit(c) && c != '_' && c != '-')
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
switch (mode)
|
switch (mode)
|
||||||
{
|
{
|
||||||
case TagHandling.Name:
|
case TagHandling.Name:
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ namespace Discord.Rest
|
|||||||
index = text.IndexOf("@everyone", index);
|
index = text.IndexOf("@everyone", index);
|
||||||
if (index == -1) break;
|
if (index == -1) break;
|
||||||
|
|
||||||
|
if (!TagOverlaps(tags, index))
|
||||||
tags.Add(new Tag<object>(TagType.EveryoneMention, index, "@everyone".Length, 0, null));
|
tags.Add(new Tag<object>(TagType.EveryoneMention, index, "@everyone".Length, 0, null));
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
@@ -136,12 +137,23 @@ namespace Discord.Rest
|
|||||||
index = text.IndexOf("@here", index);
|
index = text.IndexOf("@here", index);
|
||||||
if (index == -1) break;
|
if (index == -1) break;
|
||||||
|
|
||||||
|
if (!TagOverlaps(tags, index))
|
||||||
tags.Add(new Tag<object>(TagType.HereMention, index, "@here".Length, 0, null));
|
tags.Add(new Tag<object>(TagType.HereMention, index, "@here".Length, 0, null));
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tags.ToImmutable();
|
return tags.ToImmutable();
|
||||||
}
|
}
|
||||||
|
private static bool TagOverlaps(IReadOnlyList<ITag> tags, int index)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < tags.Count; i++)
|
||||||
|
{
|
||||||
|
var tag = tags[i];
|
||||||
|
if (index >= tag.Index && index < tag.Index + tag.Length)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
public static ImmutableArray<ulong> FilterTagsByKey(TagType type, ImmutableArray<ITag> tags)
|
public static ImmutableArray<ulong> FilterTagsByKey(TagType type, ImmutableArray<ITag> tags)
|
||||||
{
|
{
|
||||||
return tags
|
return tags
|
||||||
|
|||||||
Reference in New Issue
Block a user