Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions rules.ini
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ RIM = \.rim$ ; BioWare
RPF = \.rpf$ ; RAGE
SCR = \.scr$ ; SCI
SIERRA_EXE = (?:^|/)SIERRA\.EXE$ ; SCI
SND_OGG = (?:^|/)snd?_.+\.ogg$ ; GameMaker
SND_OGG = (?:^|/)snd?_\w+\.ogg$ ; GameMaker
TAB = \.tab$ ; Apex Engine
TGA = \.tga$ ; BioWare
TLK = \.tlk$ ; BioWare
Expand Down Expand Up @@ -92,7 +92,7 @@ FPS_Creator = (?:^|/)Files/languagebank/english/textfiles/fpsc-050\.ini$
Frostbite[] = (?:^|/)(?:Engine\.BuildInfo(?:_Win(?:64|32)_retail(?:_dll)?)?)\.dll$
Frostbite[] = (?:^|/)Runtime_Win64_retail\.BuildSettings$
GameBox = ^Nadeo\.ini$
GameGuru = ^files/gamecore/projectiletypes/.+\.dds$
GameGuru = ^files/gamecore/projectiletypes/[\w/]+\.dds$
GameMaker[] = (?:^|/)game\.(?:unx|ios)$
GameMaker[] = (?:^|/)libYoYoGamepad\.dylib$
GameMaker[] = (?:^|/)audiogroup1\.dat$
Expand Down
36 changes: 36 additions & 0 deletions tests/Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@
{
$FailingTests[] = "$Type.$Name: Regex \"$Regex\" contains a capturing group";
}

$RegexIssue = CheckRegexPerformance( $Regex );

if( $RegexIssue !== null )
{
$FailingTests[] = "$Type.$Name: Regex \"$Regex\" $RegexIssue";
}
}
}
}
Expand Down Expand Up @@ -147,6 +154,35 @@ function RegexHasCapturingGroups( string $regex ) : bool
);
}

function CheckRegexPerformance( string $regex ) : ?string
{
// Check for .+ or .*, skip if it's inside a character class like [.+]
if( preg_match( '/(?<!\[)\.[\+\*]/', $regex ) )
{
return 'uses .+ or .* which is inefficient';
}

// Patterns like (.+)+ or (a*)*
if( preg_match( '/\([^)]*[\+\*][^)]*\)[\+\*]/', $regex ) )
{
return 'has nested quantifiers';
}

// Quantifier applied to anchor
if( preg_match( '/[\^\$][\+\*\?]/', $regex ) )
{
return 'has quantifier on anchor';
}

// Empty alternation like (|foo) or (foo|)
if( preg_match( '/\(\||\|\)/', $regex ) )
{
return 'has empty alternation';
}

return null;
}

/**
* @param array<string, string|string[]> $Rulesets
*/
Expand Down
20 changes: 10 additions & 10 deletions tests/types/Engine.GameGuru.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
files/gamecore/projectiletypes/----.dds
files/gamecore/projectiletypes/---.dds
files/gamecore/projectiletypes/--.dds
files/gamecore/projectiletypes/-.dds
files/gamecore/projectiletypes/1.dds
files/gamecore/projectiletypes/11.dds
files/gamecore/projectiletypes/111.dds
files/gamecore/projectiletypes/1111.dds
files/gamecore/projectiletypes/@.dds
files/gamecore/projectiletypes/@@.dds
files/gamecore/projectiletypes/33.dds
files/gamecore/projectiletypes/333.dds
files/gamecore/projectiletypes/3333.dds
files/gamecore/projectiletypes/5.dds
files/gamecore/projectiletypes/55.dds
files/gamecore/projectiletypes/555.dds
files/gamecore/projectiletypes/5555.dds
files/gamecore/projectiletypes/BB.dds
files/gamecore/projectiletypes/BBB.dds
files/gamecore/projectiletypes/BBBB.dds
files/gamecore/projectiletypes/Z.dds
files/gamecore/projectiletypes/ZZ.dds
files/gamecore/projectiletypes/ZZZ.dds
Expand Down
81 changes: 40 additions & 41 deletions tests/types/Evidence.SND_OGG.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
/sn_----.ogg
/sn_---.ogg
/sn_--.ogg
/sn_-.ogg
/sn_1.ogg
/sn_11.ogg
/sn_111.ogg
/sn_1111.ogg
/sn_@.ogg
/sn_@@.ogg
/sn_33.ogg
/sn_333.ogg
/sn_3333.ogg
/sn_5.ogg
/sn_55.ogg
/sn_555.ogg
/sn_5555.ogg
/sn_BB.ogg
/sn_BBB.ogg
/sn_BBBB.ogg
/sn_Z.ogg
/sn_ZZ.ogg
/sn_ZZZ.ogg
Expand All @@ -20,16 +20,16 @@
/sn_aa.ogg
/sn_aaa.ogg
/sn_aaaa.ogg
/snd_----.ogg
/snd_---.ogg
/snd_--.ogg
/snd_-.ogg
/snd_1.ogg
/snd_11.ogg
/snd_111.ogg
/snd_1111.ogg
/snd_@.ogg
/snd_@@.ogg
/snd_33.ogg
/snd_333.ogg
/snd_3333.ogg
/snd_5.ogg
/snd_55.ogg
/snd_555.ogg
/snd_5555.ogg
/snd_BB.ogg
/snd_BBB.ogg
/snd_BBBB.ogg
/snd_Z.ogg
/snd_ZZ.ogg
/snd_ZZZ.ogg
Expand All @@ -42,16 +42,16 @@
/snd_aa.ogg
/snd_aaa.ogg
/snd_aaaa.ogg
sn_----.ogg
sn_---.ogg
sn_--.ogg
sn_-.ogg
sn_1.ogg
sn_11.ogg
sn_111.ogg
sn_1111.ogg
sn_@.ogg
sn_@@.ogg
sn_33.ogg
sn_333.ogg
sn_3333.ogg
sn_5.ogg
sn_55.ogg
sn_555.ogg
sn_5555.ogg
sn_BB.ogg
sn_BBB.ogg
sn_BBBB.ogg
sn_Z.ogg
sn_ZZ.ogg
sn_ZZZ.ogg
Expand All @@ -64,17 +64,16 @@ sn_a.ogg
sn_aa.ogg
sn_aaa.ogg
sn_aaaa.ogg
sn_whatever.ogg
snd_----.ogg
snd_---.ogg
snd_--.ogg
snd_-.ogg
snd_1.ogg
snd_11.ogg
snd_111.ogg
snd_1111.ogg
snd_@.ogg
snd_@@.ogg
snd_33.ogg
snd_333.ogg
snd_3333.ogg
snd_5.ogg
snd_55.ogg
snd_555.ogg
snd_5555.ogg
snd_BB.ogg
snd_BBB.ogg
snd_BBBB.ogg
snd_Z.ogg
snd_ZZ.ogg
snd_ZZZ.ogg
Expand Down
118 changes: 118 additions & 0 deletions tests/types/_NonMatchingTests.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1413,3 +1413,121 @@ odin_dll
libodin_so
notodin.dll
notlibodin.so
AGSteam_dll
AGSteam.dlll
fAGSteam.dll
sub/dir/fAGSteam.dll
AGSteam.dl
gmsched_dll
gmsched.dlll
fgmsched.dll
sub/dir/fgmsched.dll
gmsched.dl
partner_xml_sig
partner.xml.sigg
fpartner.xml.sig
sub/dir/fpartner.xml.sig
partner.xml_sig
partner_xml.sig
yscfg_dat
yscfg.datt
fyscfg.dat
sub/dir/fyscfg.dat
yscfg.da
anybrainSDK_dll
anybrainSDK.dlll
fanybrainSDK.dll
sub/dir/fanybrainSDK.dll
anybrainSDK.dl
Cerebro_dll
Cerebro.dlll
fCerebro.dll
sub/dir/fCerebro.dll
Cerebro.dl
BlackCall_aes
BlackCall64_aes
BlackCall.aess
BlackCall64.aess
fBlackCall.aes
fBlackCall64.aes
sub/dir/fBlackCall.aes
BlackCall.ae
BlackCall65.aes
BlackCat64_sys
BlackCat64.syss
fBlackCat64.sys
sub/dir/fBlackCat64.sys
BlackCat64.sy
BlackCat32.sys
NEP2_dll
NEP2.dlll
fNEP2.dll
sub/dir/fNEP2.dll
NEP2.dl
NEP3.dll
gameguard_des
gameguard.dess
fgameguard.des
sub/dir/fgameguard.des
gameguard.de
gameguard.bes
opus_dll
opus.dlll
fopus.dll
sub/dir/fopus.dll
opus.dl
mus_test_ogg
mus_music_ogg
sub/dir/mus_test_ogg
snd_test_ogg
sn_test_ogg
sub/dir/snd_test_ogg
shared/shader_gar
shared_shader.gar
fshared/shader.gar
fmetadata.dat
sub/dir/fmetadata.dat
data_win
fdata.winn
options_ini
foptions.inii
pixi_js
fpixi.js
pixi.jss
Irrlicht_dll
Irrlicht.dlll
fIrrlicht.dll
sakanagl_dll
sakanagl.dlll
fsakanagl.dll
FalcoEngine_dll
FalcoEngine.dlll
fFalcoEngine.dll
wme_steam_dll
wme_steam.dlll
fwme_steam.dll
NeacSafe64_sys
NeacSafe64.syss
fNeacSafe64.sys
NeacSafe64_ex_sys
notFredaikisAntiCheat
FredaikisAntiCheat.dll
fFredaikisAntiCheat/
PnkBstrA_exe
PnkBstrA.exee
fPnkBstrA.exe
pbsv_dll
pbsv.dlll
fpbsv.dll
fdata.xp3f
krflash_dll
krflash.dlll
TrueAudioNext_dll
TrueAudioNext.dlll
fTrueAudioNext.dll
iZotope_dll
iZotope.dlll
fiZotope.dll
ortp_dll
ortp.dlll
fortp.dll
Loading