Commit c88d9cf3 authored by Eric Eastwood's avatar Eric Eastwood

Fix NPE with horse racing emoji check

Fix https://gitlab.com/gitlab-org/gitlab-ce/issues/32587
parent 256a8601
...@@ -88,6 +88,7 @@ function installGlEmojiElement() { ...@@ -88,6 +88,7 @@ function installGlEmojiElement() {
const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0; const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0;
if ( if (
emojiUnicode &&
isEmojiUnicode && isEmojiUnicode &&
!isEmojiUnicodeSupported(generatedUnicodeSupportMap, emojiUnicode, unicodeVersion) !isEmojiUnicodeSupported(generatedUnicodeSupportMap, emojiUnicode, unicodeVersion)
) { ) {
......
...@@ -28,7 +28,8 @@ function isSkinToneComboEmoji(emojiUnicode) { ...@@ -28,7 +28,8 @@ function isSkinToneComboEmoji(emojiUnicode) {
// doesn't support the skin tone versions of horse racing // doesn't support the skin tone versions of horse racing
const horseRacingCodePoint = 127943;// parseInt('1F3C7', 16) const horseRacingCodePoint = 127943;// parseInt('1F3C7', 16)
function isHorceRacingSkinToneComboEmoji(emojiUnicode) { function isHorceRacingSkinToneComboEmoji(emojiUnicode) {
return Array.from(emojiUnicode)[0].codePointAt(0) === horseRacingCodePoint && const firstCharacter = Array.from(emojiUnicode)[0];
return firstCharacter && firstCharacter.codePointAt(0) === horseRacingCodePoint &&
isSkinToneComboEmoji(emojiUnicode); isSkinToneComboEmoji(emojiUnicode);
} }
......
...@@ -192,6 +192,9 @@ describe('gl_emoji', () => { ...@@ -192,6 +192,9 @@ describe('gl_emoji', () => {
}); });
describe('isFlagEmoji', () => { describe('isFlagEmoji', () => {
it('should gracefully handle empty string', () => {
expect(isFlagEmoji('')).toBeFalsy();
});
it('should detect flag_ac', () => { it('should detect flag_ac', () => {
expect(isFlagEmoji('🇦🇨')).toBeTruthy(); expect(isFlagEmoji('🇦🇨')).toBeTruthy();
}); });
...@@ -216,6 +219,9 @@ describe('gl_emoji', () => { ...@@ -216,6 +219,9 @@ describe('gl_emoji', () => {
}); });
describe('isKeycapEmoji', () => { describe('isKeycapEmoji', () => {
it('should gracefully handle empty string', () => {
expect(isKeycapEmoji('')).toBeFalsy();
});
it('should detect one(keycap)', () => { it('should detect one(keycap)', () => {
expect(isKeycapEmoji('1️⃣')).toBeTruthy(); expect(isKeycapEmoji('1️⃣')).toBeTruthy();
}); });
...@@ -231,6 +237,9 @@ describe('gl_emoji', () => { ...@@ -231,6 +237,9 @@ describe('gl_emoji', () => {
}); });
describe('isSkinToneComboEmoji', () => { describe('isSkinToneComboEmoji', () => {
it('should gracefully handle empty string', () => {
expect(isSkinToneComboEmoji('')).toBeFalsy();
});
it('should detect hand_splayed_tone5', () => { it('should detect hand_splayed_tone5', () => {
expect(isSkinToneComboEmoji('🖐🏿')).toBeTruthy(); expect(isSkinToneComboEmoji('🖐🏿')).toBeTruthy();
}); });
...@@ -255,6 +264,9 @@ describe('gl_emoji', () => { ...@@ -255,6 +264,9 @@ describe('gl_emoji', () => {
}); });
describe('isHorceRacingSkinToneComboEmoji', () => { describe('isHorceRacingSkinToneComboEmoji', () => {
it('should gracefully handle empty string', () => {
expect(isHorceRacingSkinToneComboEmoji('')).toBeFalsy();
});
it('should detect horse_racing_tone2', () => { it('should detect horse_racing_tone2', () => {
expect(isHorceRacingSkinToneComboEmoji('🏇🏼')).toBeTruthy(); expect(isHorceRacingSkinToneComboEmoji('🏇🏼')).toBeTruthy();
}); });
...@@ -264,6 +276,9 @@ describe('gl_emoji', () => { ...@@ -264,6 +276,9 @@ describe('gl_emoji', () => {
}); });
describe('isPersonZwjEmoji', () => { describe('isPersonZwjEmoji', () => {
it('should gracefully handle empty string', () => {
expect(isPersonZwjEmoji('')).toBeFalsy();
});
it('should detect couple_mm', () => { it('should detect couple_mm', () => {
expect(isPersonZwjEmoji('👨‍❤️‍👨')).toBeTruthy(); expect(isPersonZwjEmoji('👨‍❤️‍👨')).toBeTruthy();
}); });
...@@ -300,6 +315,22 @@ describe('gl_emoji', () => { ...@@ -300,6 +315,22 @@ describe('gl_emoji', () => {
}); });
describe('isEmojiUnicodeSupported', () => { describe('isEmojiUnicodeSupported', () => {
it('should gracefully handle empty string with unicode support', () => {
const isSupported = isEmojiUnicodeSupported(
{ '1.0': true },
'',
'1.0',
);
expect(isSupported).toBeTruthy();
});
it('should gracefully handle empty string without unicode support', () => {
const isSupported = isEmojiUnicodeSupported(
{},
'',
'1.0',
);
expect(isSupported).toBeFalsy();
});
it('bomb(6.0) with 6.0 support', () => { it('bomb(6.0) with 6.0 support', () => {
const emojiKey = 'bomb'; const emojiKey = 'bomb';
const unicodeSupportMap = Object.assign({}, emptySupportMap, { const unicodeSupportMap = Object.assign({}, emptySupportMap, {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment