Skip to content

Commit 49c4c19

Browse files
committed
imp(resolvers): check that regexps are safe before saving
1 parent 3e7a16b commit 49c4c19

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"@types/node": "^16.11.46",
5050
"@types/node-fetch": "^2.5.4",
5151
"@types/uuid": "^8.3.4",
52+
"@types/safe-regex": "^1.1.6",
5253
"amqp-connection-manager": "^3.1.0",
5354
"amqplib": "^0.5.5",
5455
"apollo-server-express": "^3.10.0",
@@ -73,6 +74,7 @@
7374
"mime-types": "^2.1.25",
7475
"mongodb": "^3.7.3",
7576
"ts-node-dev": "^2.0.0",
76-
"uuid": "^8.3.2"
77+
"uuid": "^8.3.2",
78+
"safe-regex": "^2.1.0"
7779
}
7880
}

src/resolvers/projectPatterns.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ResolverContextWithUser } from '../types/graphql';
22
import { ApolloError } from 'apollo-server-express';
33
import { ProjectEventGroupingPatternsDBScheme } from '@hawk.so/types';
4+
import { isSafeRegex } from 'safe-regex';
45

56
/**
67
* Type that represents payload for create project pattern mutation
@@ -68,6 +69,14 @@ function validateNewEventGroupingPattern(
6869
try {
6970
/* eslint-disable-next-line no-new */
7071
new RegExp(newEventGroupingPattern);
72+
73+
/**
74+
* Check if pattern is safe RegExp
75+
*/
76+
if (!isSafeRegex(newEventGroupingPattern)) {
77+
throw new ApolloError('Invalid regular expression pattern');
78+
}
79+
7180
} catch (error) {
7281
throw new ApolloError('Invalid regular expression pattern');
7382
}

yarn.lock

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,11 @@
11761176
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
11771177
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
11781178

1179+
"@types/safe-regex@^1.1.6":
1180+
version "1.1.6"
1181+
resolved "https://registry.yarnpkg.com/@types/safe-regex/-/safe-regex-1.1.6.tgz#1f13a950b77869e19626ae2dcf79e12902b38c0b"
1182+
integrity sha512-CQ/uPB9fLOPKwDsrTeVbNIkwfUthTWOx0l6uIGwVFjZxv7e68pCW5gtTYFzdJi3EBJp8h8zYhJbTasAbX7gEMQ==
1183+
11791184
"@types/serve-static@*":
11801185
version "1.15.0"
11811186
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
@@ -5632,6 +5637,11 @@ regex-not@^1.0.0, regex-not@^1.0.2:
56325637
extend-shallow "^3.0.2"
56335638
safe-regex "^1.1.0"
56345639

5640+
regexp-tree@~0.1.1:
5641+
version "0.1.27"
5642+
resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd"
5643+
integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==
5644+
56355645
regexp.prototype.flags@^1.4.3:
56365646
version "1.4.3"
56375647
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
@@ -5803,6 +5813,13 @@ safe-regex@^1.1.0:
58035813
dependencies:
58045814
ret "~0.1.10"
58055815

5816+
safe-regex@^2.1.0:
5817+
version "2.1.1"
5818+
resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2"
5819+
integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==
5820+
dependencies:
5821+
regexp-tree "~0.1.1"
5822+
58065823
"safer-buffer@>= 2.1.2 < 3":
58075824
version "2.1.2"
58085825
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"

0 commit comments

Comments
 (0)