aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/services/entity_normalizer/entity_normalizer.service.js4
-rw-r--r--test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js11
2 files changed, 14 insertions, 1 deletions
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
index fc326ad1..67664af8 100644
--- a/src/services/entity_normalizer/entity_normalizer.service.js
+++ b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -196,9 +196,11 @@ export const parseAttachment = (data) => {
return output
}
export const addEmojis = (string, emojis) => {
+ const matchOperatorsRegex = /[|\\{}()[\]^$+*?.-]/g
return emojis.reduce((acc, emoji) => {
+ const regexSafeShortCode = emoji.shortcode.replace(matchOperatorsRegex, '\\$&')
return acc.replace(
- new RegExp(`:${emoji.shortcode}:`, 'g'),
+ new RegExp(`:${regexSafeShortCode}:`, 'g'),
`<img src='${emoji.url}' alt='${emoji.shortcode}' title='${emoji.shortcode}' class='emoji' />`
)
}, string)
diff --git a/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js b/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js
index 736b842c..49f378e2 100644
--- a/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js
+++ b/test/unit/specs/services/entity_normalizer/entity_normalizer.spec.js
@@ -345,5 +345,16 @@ describe('API Entities normalizer', () => {
const result = addEmojis('Admin add the :tenshi: emoji', emojis)
expect(result).to.equal('Admin add the :tenshi: emoji')
})
+
+ it('Doesn\'t blow up on regex special characters', () => {
+ const emojis = makeMockEmojiMasto([{
+ shortcode: 'c++'
+ }, {
+ shortcode: '[a-z] {|}*'
+ }])
+ const result = addEmojis('This post has :c++: emoji and :[a-z] {|}*: emoji', emojis)
+ expect(result).to.include('title=\'c++\'')
+ expect(result).to.include('title=\'[a-z] {|}*\'')
+ })
})
})