Sicherheit: ReDoS in trim() umgehen.
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 21 Jul 2016 09:23:35 +0000 (11:23 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Thu, 21 Jul 2016 09:23:35 +0000 (11:23 +0200)
commitd38c6c0ef8b306bfd1a5542649b07f738954833d
treee38e2512e0e9dc615dcbd187749f582f54677507
parent9227f81db26d209ffab778bf9520798f6cbf7f0e
Sicherheit: ReDoS in trim() umgehen.

trim hat bisher whitespace mit dem regex /^\p{WSpace}+|\p{WSpace}+$/
getrimmt. Der ist aber anfällig gegen große Mengen Whitespace in der
Mitte, weil dann das Backtracking in O(n²) läuft:

$_ = "--".(" "x200000)."and more"; s/^\p{WSpace}+|\p{WSpace}+$//;
-> 0m16.572s

Für genau den Fall hat die Perl Engine aber Optimierungen, die bei
Regexes die rechts geankert sind einfach von hinten sucht. Die
funktionieren aber nur wenn einzeln gesucht wird. Also sind das jetzt
zwei separate Regexes.

$_ = "--".(" "x200000)."and more"; s/^\p{WSpace}+//; s/\p{WSpace}+$//;
-> 0m0.022s
SL/Util.pm