aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2019-09-30 23:45:03 +0300
committerHenry Jameson <me@hjkos.com>2019-09-30 23:45:03 +0300
commita2923570c369e537ef1757865f708f73f20f3a16 (patch)
treeb67686426496878f7e34d64a208ffa930fb32f11
parentaadd36f3ec2d5131deae43a4e8042455a90ca16f (diff)
fix regex shortcode problem
-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] {|}*\'')
+ })
})
})