diff --git a/CHANGELOG-6.4.md b/CHANGELOG-6.4.md index 96e3ef9fcca75..6fc3ff74bf722 100644 --- a/CHANGELOG-6.4.md +++ b/CHANGELOG-6.4.md @@ -7,6 +7,29 @@ in 6.4 minor versions. To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v6.4.0...v6.4.1 +* 6.4.40 (2026-05-20) + + * security #cve-2026-46626 [Runtime] Fix CVE-2024-50340 patch bypass by gating argv on $_SERVER['QUERY_STRING'] (nicolas-grekas) + * security #cve-2026-47212 [Notifier][Twilio] Reject webhooks with missing or invalid HMAC signature (nicolas-grekas) + * security #cve-2026-45753 [HtmlSanitizer] Sanitize URLs in action, formaction, poster and cite attributes (nicolas-grekas) + * security #cve-2026-45754 [Mailer][Mailjet] Reject webhooks with missing or invalid Basic credentials (alexandre-daubois) + * security #cve-2026-45072 [TwigBridge] Fix XSS issue in CodeExtension::fileExcerpt() (nicolas-grekas) + * security #cve-2026-45064 [HtmlSanitizer] Reject BiDi override characters and percent-encode spaces in URLs (nicolas-grekas) + * security #cve-2026-45066 [HtmlSanitizer] Fix `allowLinkHosts`/`allowMediaHosts` bypass via URL parser differentials and `` misclassification (alexandre-daubois) + * security #cve-2026-45069 [Security] Add missing claims in `OidcTokenHandler` (alexandre-daubois) + * bug #64258 [DomCrawler] Fix `ChoiceFormField::addChoice()` clobbering values on multi-selects (nicolas-grekas) + * bug #64214 [HttpKernel] Preserve named-attribute override on Request/Session value resolvers (nicolas-grekas) + * security #cve-2026-45305 [Yaml] Harden the Parser::cleanup() regexes against catastrophic backtracking (nicolas-grekas) + * security #cve-2026-45304 [Yaml] Bound collection-alias resolution in the parser (nicolas-grekas) + * security #cve-2026-45133 [Yaml] Bound recursion depth in the parser (nicolas-grekas) + * security #cve-2026-45071 [DomCrawler] Fix XXE in addXmlContent() by not enabling `validateOnParse` (alexandre-daubois) + * security #cve-2026-45068 [Mailer] Add end-of-options separator before recipients in SendmailTransport; reject addresses starting with a dash (alexandre-daubois) + * security #cve-2026-45063 [Security] Anchor emailAddress regex to RDN boundary in X509Authenticator (alexandre-daubois) + * security #cve-2026-45065 [Routing] Fix regex alternation anchoring in `UrlGenerator` requirement validation (alexandre-daubois) + * security #cve-2026-45067 [Mime] Reject email addresses containing line breaks in Address (alexandre-daubois) + * security #cve-2026-45073 [Cache] Validate the prefix given to AbstractAdapter::clear() (nicolas-grekas) + * security #cve-2026-45077 [MonologBridge] Bind server:log to localhost by default (nicolas-grekas) + * 6.4.39 (2026-05-13) * bug #64198 [SecurityBundle] Allow defining security provider factories without config (hockdudu) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 77ab10a5049b2..a99a88f756c88 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -38,8 +38,8 @@ The Symfony Connect username in parenthesis allows to get more information - Tobias Nyholm (tobias) - Samuel ROZE (sroze) - Pascal Borreli (pborreli) - - Santiago San Martin (santysisi) - Romain Neutron + - Santiago San Martin (santysisi) - Kevin Bond (kbond) - Joseph Bielawski (stloyd) - Drak (drak) @@ -57,12 +57,12 @@ The Symfony Connect username in parenthesis allows to get more information - Jan Schädlich (jschaedl) - Vincent Langlet (deviling) - Antonio J. García Lagar (ajgarlag) - - Kévin THERAGE (kevin_therage) - Pierre-Emmanuel CAPEL (pecapel) + - Kévin THERAGE (kevin_therage) - Pierre-Emmanuel CAPEL - Valtteri R (valtzu) - - Simon André (simonandre) - corradogrimoldi + - Simon André (simonandre) - Matthias Pigulla (mpdude) - Gabriel Ostrolucký (gadelat) - Jonathan Wage (jwage) @@ -71,1035 +71,1045 @@ The Symfony Connect username in parenthesis allows to get more information - Grégoire Paris (greg0ire) - Alexandre Salomé (alexandresalome) - William DURAND - - Pierre du Plessis (pierredup) - Dany Maillard (maidmaid) - - Francis Besset (francisbesset) - - Titouan Galopin (tgalopin) + - Pierre du Plessis (pierredup) - Gábor Egyed (1ed) + - Eriksen Costa - stealth35 ‏ (stealth35) - Diego Saint Esteben (dosten) - - Eriksen Costa + - Francis Besset (francisbesset) + - Titouan Galopin (tgalopin) - Alexander Mols (asm89) - David Maicher (dmaicher) - Tomasz Kowalczyk (thunderer) - - Gary PEGEOT (gary-p) - Bulat Shakirzyanov (avalanche123) - - Iltar van der Berg - Ruud Kamphuis (ruudk) + - Gary PEGEOT (gary-p) + - Iltar van der Berg - Miha Vrhovnik (mvrhov) - - Allison Guilhem (a_guilhem) - Saša Stamenković (umpirsky) + - Allison Guilhem (a_guilhem) - Mathieu Piot (mpiot) - Vasilij Duško (staff) - Tomas Norkūnas (norkunas) + - Konstantin Kudryashov (everzet) - Sarah Khalil (saro0h) - Laurent VOULLEMIER (lvo) - - Konstantin Kudryashov (everzet) - Bilal Amarni (bamarni) - Guilhem N (guilhemn) - Eriksen Costa - - Hubert Lenoir (hubert_lenoir) - soyuka - - Florin Patan (florinpatan) + - Hubert Lenoir (hubert_lenoir) - Vladimir Reznichenko (kalessil) - - Henrik Bjørnskov (henrikbjorn) + - Florin Patan (florinpatan) - Peter Rehm (rpet) + - Henrik Bjørnskov (henrikbjorn) - David Buchmann (dbu) + - Ben Younes Ousama (oby) - Andrej Hudec (pulzarraider) - Jáchym Toušek (enumag) - - Christian Raue - - Antoine Makdessi (amakdessi) - Eric Clemmons (ericclemmons) - Arnout Boks (aboks) + - Antoine Makdessi (amakdessi) + - Christian Raue - Denis (yethee) - - Alex Pott - Issei Murasawa (issei_m) - - Douglas Greenshields (shieldo) - - Ben Younes Ousama (oby) - Michel Weimerskirch (mweimerskirch) - David Prévot (taffit) - - Fran Moreno (franmomu) + - Alex Pott + - Douglas Greenshields (shieldo) - Frank A. Fiebig (fafiebig) + - Fran Moreno (franmomu) - Baldini - - Henrik Westphal (snc) + - Charles Sarrazin (csarrazi) - Yanick Witschi (toflar) + - Henrik Westphal (snc) - Dariusz Górecki (canni) - - Charles Sarrazin (csarrazi) - Konstantin Myakshin (koc) - Ener-Getick - Massimiliano Arione (garak) - Phil E. Taylor (philetaylor) - - Graham Campbell (graham) - Joel Wurtz (brouznouf) - Tugdual Saunier (tucksaun) - - Brandon Turner - - Lee McDermott - - Théo FIDRY + - Graham Campbell (graham) - Luis Cordova (cordoval) - - Daniel Holmes (dholmes) + - Théo FIDRY + - Lee McDermott + - Brandon Turner - Julien Falque (julienfalque) - - Jordan Alliot (jalliot) - - Vasilij Dusko | CREATION + - Daniel Holmes (dholmes) - Toni Uebernickel (havvg) - Bart van den Burg (burgov) - - Catoire (lacatoire) + - Vasilij Dusko | CREATION + - Jordan Alliot (jalliot) - Jeroen Spee (jeroens) - John Wards (johnwards) - Florent Morselli (spomky_) + - Catoire (lacatoire) - Konstantin.Myakshin - Antoine Hérault (herzult) - - Tac Tacelosky (tacman1123) - - Arnaud Le Blanc (arnaud-lb) - - Maxime STEINHAUSSER - Rokas Mikalkėnas (rokasm) + - Maxime STEINHAUSSER - Sebastiaan Stok (sstok) - - gnito-org - - Tim Nagel (merk) + - Tac Tacelosky (tacman1123) + - Arnaud Le Blanc (arnaud-lb) - Jérôme Vasseur (jvasseur) + - gnito-org - Chris Wilkinson (thewilkybarkid) + - Brice BERNARD (brikou) - Peter Kokot (peterkokot) - Jacob Dreesen (jdreesen) - - Brice BERNARD (brikou) - - Michal Piotrowski - - marc.weistroff + - Tim Nagel (merk) - Younes ENNAJI (yokho) + - marc.weistroff - Nicolas Philippe (nikophil) - Vladimir Tsykun (vtsykun) + - Michal Piotrowski - Lars Strojny (lstrojny) - - Włodzimierz Gajda (gajdaw) - - Jérôme Parmentier (lctrs) - Javier Spagnoletti (phansys) + - Gregor Harlan (gharlan) - Adrien Brault (adrienbrault) + - Włodzimierz Gajda (gajdaw) - Maximilian Beckers (maxbeckers) - - Gregor Harlan (gharlan) - - Florian Voutzinos (florianv) - - Colin Frei - - Gordon Franke (gimler) + - Jérôme Parmentier (lctrs) + - Bob van de Vijver (bobvandevijver) + - Przemysław Bogusz (przemyslaw-bogusz) - Teoh Han Hui (teohhanhui) + - Colin Frei - Pascal CESCON (amoifr) - - Przemysław Bogusz (przemyslaw-bogusz) - - Bob van de Vijver (bobvandevijver) - - Paráda József (paradajozsef) - - Hugo Alliaume (kocal) + - Gordon Franke (gimler) + - Florian Voutzinos (florianv) + - Saif Eddin Gmati (azjezz) - Maxime Helias (maxhelias) - - Dāvis Zālītis (k0d3r1s) - - Baptiste Clavié (talus) - Fabien Pennequin (fabienpennequin) - - Alexander Schwenn (xelaris) - - Saif Eddin Gmati (azjezz) + - Baptiste Clavié (talus) + - Hugo Alliaume (kocal) + - Paráda József (paradajozsef) - Andreas Schempp (aschempp) - - Alexis Lefebvre - - jeremyFreeAgent (jeremyfreeagent) + - Alexander Schwenn (xelaris) + - Dāvis Zālītis (k0d3r1s) + - Daniel Wehner (dawehner) + - Joshua Thijssen - Michael Babker (mbabker) + - Alexis Lefebvre - Christopher Hertel (chertel) + - jeremyFreeAgent (jeremyfreeagent) + - Thomas Landauer (thomas-landauer) + - François-Xavier de Guillebon (de-gui_f) - Malte Schlüter (maltemaltesich) - Vasilij Dusko - - Daniel Wehner (dawehner) - - Joshua Thijssen - - François-Xavier de Guillebon (de-gui_f) - - Thomas Landauer (thomas-landauer) - Eric GELOEN (gelo) - - Smaine Milianni (ismail1432) - - Jhonny Lidfors (jhonne) - Stiven Llupa (sllupa) - - Robert Schönthal (digitalkaoz) + - Jhonny Lidfors (jhonne) + - Ion Bazan (ionbazan) + - Niels Keurentjes (curry684) + - Richard van Laak (rvanlaak) + - Smaine Milianni (ismail1432) - Stefano Sala (stefano.sala) + - Jonathan Scheiber (jmsche) - Gabriel Caruso - OGAWA Katsuhiro (fivestar) - - Richard van Laak (rvanlaak) - - Niels Keurentjes (curry684) - - Jonathan Scheiber (jmsche) - - Ion Bazan (ionbazan) - - Juti Noppornpitak (shiroyuki) - - Arnaud Kleinpeter (nanocom) - - Tigran Azatyan (tigranazatyan) + - Robert Schönthal (digitalkaoz) + - Hidenori Goto (hidenorigoto) - Sebastian Hörl (blogsh) - - Daniel Gomes (danielcsgomes) - Florent Mata (fmata) - - Romain Monteil (ker0x) - - Hidenori Goto (hidenorigoto) + - Daniel Gomes (danielcsgomes) + - Guilherme Blanco (guilhermeblanco) - Anthony MARTIN + - Arnaud Kleinpeter (nanocom) + - Juti Noppornpitak (shiroyuki) + - Romain Monteil (ker0x) + - Tigran Azatyan (tigranazatyan) - Ben Davies (bendavies) - - Guilherme Blanco (guilhermeblanco) - - Jan Rosier (rosier) - - Fritz Michael Gschwantner (fritzmg) + - Rafael Dohms (rdohms) - jwdeitch - - Farhad Safarov (safarov) + - Roman Martinuk (a2a4) + - Fritz Michael Gschwantner (fritzmg) - Michael Käfer (michael_kaefer) - - Rafael Dohms (rdohms) + - Jan Rosier (rosier) - Alessandro Chitolina (alekitto) - - Roman Martinuk (a2a4) + - Farhad Safarov (safarov) - Pablo Godel (pgodel) + - Jérémy Derussé + - Simon Berger + - Dawid Nowak + - Andréia Bohner (andreia) - Jack Worman (jworman) + - Philipp Wahala (hifi) - Indra Gunawan (indragunawan) - - Andréia Bohner (andreia) - - Vyacheslav Pavlov - - Tomas Votruba (tomas_votruba) - - George Mponos (gmponos) - - Ahmed TAILOULOUTE (ahmedtai) - - Dawid Nowak - - Jérémy Derussé - Sokolov Evgeniy (ewgraf) + - Alessandro Lai (jean85) + - Richard Shank (iampersistent) + - Arman Hosseini (arman) + - Tom Van Looy (tvlooy) + - George Mponos (gmponos) + - Vyacheslav Pavlov - Roland Franssen + - Tomas Votruba (tomas_votruba) - Albert Casademont (acasademont) - - Tom Van Looy (tvlooy) - Matthieu Napoli (mnapoli) - - Arman Hosseini (arman) - - Philipp Wahala (hifi) - - Simon Berger - - Richard Shank (iampersistent) - - Tyson Andre - - Guillaume (guill) - - Oleg Voronkovich + - Ahmed TAILOULOUTE (ahmedtai) + - Michał Pipa (michal.pipa) + - zairig imad (zairigimad) + - Soner Sayakci (shyim) + - wkania + - Quynh Xuan Nguyen (seriquynh) + - Fabien Bourigault (fbourigault) + - YaFou - Jonathan Ingram - - Matthieu Ouellette-Vachon (maoueh) + - Wouter J - Sergey (upyx) - - Asis Pattisahusiwa - - YaFou - - Alessandro Lai (jean85) - - GDIBass - - Samuel NELA (snela) - - Clemens Tolboom + - Olivier Dolbeau (odolbeau) + - Vincent Touzet (vincenttouzet) + - Gocha Ossinkine (ossinkine) - Rouven Weßling (realityking) - - Daniel Burger - - 77web - - Wouter J - Jannik Zschiesche - - Michał Pipa (michal.pipa) - - Jesse Rushlow (geeshoe) - - Gocha Ossinkine (ossinkine) - - Vincent Touzet (vincenttouzet) - Dorian Villet (gnutix) - - Artur Kotyrba - - zairig imad (zairigimad) - - Antonio Pauletich (x-coder264) - - Quynh Xuan Nguyen (seriquynh) - - wkania + - Samuel NELA (snela) + - Tyson Andre - Marco Pivetta (ocramius) - - Olivier Dolbeau (odolbeau) - Ayyoub AFW-ALLAH (ayyoub-afwallah) - - Fabien Bourigault (fbourigault) - - Alex Hofbauer (alexhofbauer) - - Soner Sayakci (shyim) + - 77web + - Antonio Pauletich (x-coder264) + - GDIBass + - Oleg Voronkovich + - Jesse Rushlow (geeshoe) + - Daniel Burger + - Guillaume (guill) - Amal Raghav (kertz) - - Mikael Pajunen - - Sébastien Alfaiate (seb33300) - - Arnaud PETITPAS (apetitpa) + - Alex Hofbauer (alexhofbauer) + - Asis Pattisahusiwa + - Clemens Tolboom + - Artur Kotyrba + - Matthieu Ouellette-Vachon (maoueh) + - Justin Hileman (bobthecow) + - Christian Scheb - Daniel Espendiller - - Colin O'Dell (colinodell) + - Quentin Devos + - Michael Voříšek - Markus Fasselt (digilist) + - Colin O'Dell (colinodell) + - Larry Garfield (crell) + - Anthony GRASSIOT (antograssiot) + - Baptiste Leduc (korbeil) + - Dmitrii Chekaliuk (lazyhammer) + - VAN DER PUTTE Guillaume (guillaume_vdp) + - Alan Poulain (alanpoulain) - Nate Wiebe (natewiebe13) - - Marko Kaznovac (kaznovac) + - Richard Miller - Clément JOBEILI (dator) - - DQNEO + - Marko Kaznovac (kaznovac) - Warnar Boekkooi (boekkooi) - Victor Bocharsky (bocharsky_bw) + - Thomas Rabaix (rande) - Andreas Möller (localheinz) + - DQNEO + - Chi-teck + - James Halsall (jaitsu) - Mario A. Alvarez Garcia (nomack84) - - Alan Poulain (alanpoulain) - - Baptiste Leduc (korbeil) - - Marek Štípek (maryo) - - D (denderello) - - VAN DER PUTTE Guillaume (guillaume_vdp) + - Mikael Pajunen - Sergey Linnik (linniksa) - - Quentin Devos - - Thomas Rabaix (rande) - - Anthony GRASSIOT (antograssiot) - - Chi-teck - - James Halsall (jaitsu) - - Christian Scheb - - Justin Hileman (bobthecow) - - Martin Hujer (martinhujer) - - Larry Garfield (crell) + - Marek Štípek (maryo) - Vincent AUBERT (vincent) - Aleksandar Jakovljevic (ajakov) - - Richard Miller - - Michael Voříšek - - Dmitrii Chekaliuk (lazyhammer) - - Bastien Jaillot (bastnic) - - Pierre Minnieur (pminnieur) - - Christian Schmidt - - Bram Leeda (bram123) - - Remon van de Kamp - - Guilliam Xavier - - Nikolay Labinskiy (e-moe) - - Ruben Gonzalez (rubenrua) - - Filippo Tessarotto (slamdunk) - - roman joly (eltharin) - - Andreas Hucks (meandmymonkey) - - Noel Guilbert (noel) - - Leo Feyer - - Mathieu Lemoine (lemoinem) - - Denis Brumann (dbrumann) - - Anderson Müller + - Sébastien Alfaiate (seb33300) + - Arnaud PETITPAS (apetitpa) + - Martin Hujer (martinhujer) + - D (denderello) - Benjamin Dulau (dbenjamin) - - Patrick Landolt (scube) - - Priyadi Iman Nurcahyo (priyadi) - - Stepan Anchugov (kix) - - Jonathan H. Wage - Karoly Gossler (connorhu) - - Loick Piera (pyrech) - - bronze1man - - Giorgio Premi - Andre Rømcke (andrerom) - - Stadly - - apetitpa - mcfedr (mcfedr) + - Ruben Gonzalez (rubenrua) + - Pierre Minnieur (pminnieur) + - Jonathan H. Wage + - Loick Piera (pyrech) + - Noel Guilbert (noel) + - Guilliam Xavier - Timo Bakx (timobakx) + - Andreas Hucks (meandmymonkey) + - Stadly + - Remon van de Kamp + - Filippo Tessarotto (slamdunk) + - Anderson Müller - sun (sun) + - Bastien Jaillot (bastnic) + - Denis Brumann (dbrumann) + - Nikolay Labinskiy (e-moe) + - Christian Schmidt - Martin Schuhfuß (usefulthink) - - Julien Brochet - - John Kary (johnkary) + - bronze1man + - Leo Feyer + - Giorgio Premi + - Mathieu Lemoine (lemoinem) + - roman joly (eltharin) + - Stepan Anchugov (kix) + - Bram Leeda (bram123) + - apetitpa + - Priyadi Iman Nurcahyo (priyadi) + - Patrick Landolt (scube) + - Edi Modrić (emodric) + - Jean-Baptiste Delhommeau + - Jan Sorgalla (jsor) + - Pascal Montoya + - Hugo Monteiro (monteiro) + - Oleg Andreyev (oleg.andreyev) + - Yassine Guedidi (yguedidi) - Evert Harmeling (evertharmeling) - - fd6130 (fdtvui) - - Chris Smith (cs278) - - Wojciech Kania + - Michele Orselli (orso) + - Arjen van der Meijden + - Jeroen Noten (jeroennoten) + - Jérémie Augustin (jaugustin) + - François Pluchino (francoispluchino) + - Wolfgang Klinger (wolfgangklingerplan2net) + - Thomas Lallement (raziel057) + - Leszek Prabucki (l3l0) + - Marcin Sikoń (marphi) - Tristan Darricau (tristandsensio) - - François Zaninotto (fzaninotto) - - Valentine Boineau (valentineboineau) - - Jean-Baptiste Delhommeau - - Sven Paulus (subsven) + - Marcel Beerta (mazen) - Dustin Whittle (dustinwhittle) - - Leszek Prabucki (l3l0) - - Dmitrii Poddubnyi (karser) - - jeff - - Dmitry Bukhonov - - Mickael GOETZ - - Peter Kruithof (pkruithof) - - Arjen van der Meijden - henrikbjorn - - Matthieu Lempereur (mryamous) - - Hugo Monteiro (monteiro) - - Thomas Lallement (raziel057) - - Võ Xuân Tiến (tienvx) - - Rui Marinho (ruimarinho) + - Wojciech Kania + - Peter Kruithof (pkruithof) - a.dmitryuk + - Rui Marinho (ruimarinho) + - Võ Xuân Tiến (tienvx) + - Dmitry Bukhonov + - Mickael GOETZ + - Mantis Development + - Chris Smith (cs278) + - Valentine Boineau (valentineboineau) + - Sven Paulus (subsven) - Timothée Barray (tyx) - - Oleg Andreyev (oleg.andreyev) - - François Pluchino (francoispluchino) - - Jérémie Augustin (jaugustin) - - Michele Orselli (orso) - - Wolfgang Klinger (wolfgangklingerplan2net) + - jeff + - Michael Lee (zerustech) + - Matthieu Lempereur (mryamous) + - Julien Brochet + - fd6130 (fdtvui) + - John Kary (johnkary) - Maxime Veber (nek-) - - Yassine Guedidi (yguedidi) - - Pascal Montoya - Maciej Malarz (malarzm) - - Mantis Development - - Jeroen Noten (jeroennoten) - - Marcel Beerta (mazen) - - Florian Lonqueu-Brochard (florianlb) - Joe Bennett (kralos) - - Jan Sorgalla (jsor) - - Edi Modrić (emodric) - - Michael Lee (zerustech) - - Marcin Sikoń (marphi) - - Zan Baldwin (zanbaldwin) - - Pierre-Yves Lebecq (pylebecq) - - dFayet + - Dmitrii Poddubnyi (karser) + - Florian Lonqueu-Brochard (florianlb) + - François Zaninotto (fzaninotto) + - Francois Zaninotto + - Lynn van der Berg (kjarli) + - Benoît Burnichon (bburnichon) + - Dariusz Ruminski + - Joseph Rouff (rouffj) + - David Badura (davidbadura) + - Patrick McDougle (patrick-mcdougle) + - Alexander Kotynia (olden) + - Bob den Otter (bopp) + - Jordan Samouh (jordansamouh) + - Arnt Gulbrandsen - Michaël Perrin (michael.perrin) + - Christian Schmidt + - Roman Ring (inori) + - Daniel Gorgan - Michał (bambucha15) + - Pierre-Yves Lebecq (pylebecq) - javaDeveloperKid - - maxime.steinhausser + - dFayet + - BoShurik + - Xavier Perez - Nikita Konstantinov (unkind) - - Adam Prager (padam87) - - Alexander Kotynia (olden) - - Christian Schmidt - - Rob Frawley 2nd (robfrawley) - - Thomas Adam - - Anton Chernikov (anton_ch1989) - - Joseph Rouff (rouffj) - - David Badura (davidbadura) - - Romaric Drigon (romaricdrigon) - Arjen Brouwer (arjenjb) - - siganushka (siganushka) - - Ray - - Benjamin Leveque (benji07) - - Adrian Rudnik (kreischweide) - - Thibault Gattolliat (crovitche) - - Dariusz Ruminski - - Sylvain Fabre (sylfabre) - - Hidde Wieringa (hiddewie) - - Elnur Abdurrakhimov (elnur) - - BoShurik - - Alif Rachmawadi - - Thomas Schulz (king2500) + - Oleksiy (alexndlm) - Daniel Tschinder - - Lynn van der Berg (kjarli) - - pcescon - - Xavier Perez - - Jurica Vlahoviček (vjurica) - - Link1515 - - Jordan Samouh (jordansamouh) - - Benoît Burnichon (bburnichon) - - Patrick McDougle (patrick-mcdougle) - - Renan (renanbr) + - Eugene Leonovich (rybakit) + - Alif Rachmawadi - Manuel Reinhard (sprain) - - Oleksiy (alexndlm) - - Sullivan SENECHAL (soullivaneuh) - - Aurélien Pillevesse (aurelienpillevesse) - - Philipp Cordes (corphi) - - Uwe Jäger (uwej711) - Xavier Montaña Carreras (xmontana) - - Arnt Gulbrandsen + - Hidde Wieringa (hiddewie) + - Ray + - Emanuele Panzeri (thepanz) + - jdhoek + - Aurélien Pillevesse (aurelienpillevesse) + - Jurica Vlahoviček (vjurica) + - Danny Berger (dpb587) + - Adrian Rudnik (kreischweide) + - Fabien S (bafs) - Pierre Ambroise (dotordu) - Félix Labrecque (woodspire) - - GordonsLondon + - Adam Prager (padam87) + - Thibault Gattolliat (crovitche) + - Benjamin Leveque (benji07) + - Renan (renanbr) + - Anton Chernikov (anton_ch1989) + - Zan Baldwin (zanbaldwin) - Chekote - - Bob den Otter (bopp) - - Michel Roca (mroca) - - jdhoek - - Kyle - - Emanuele Panzeri (thepanz) - - Fabien S (bafs) - - Danny Berger (dpb587) - - Daniel Gorgan + - GordonsLondon + - siganushka (siganushka) + - Rob Frawley 2nd (robfrawley) - Marc Weistroff (futurecat) - - Eugene Leonovich (rybakit) + - Romaric Drigon (romaricdrigon) + - Michel Roca (mroca) + - Link1515 + - Elnur Abdurrakhimov (elnur) + - Tim Goudriaan (codedmonkey) - Alex Rock (pierstoval) + - pcescon + - Sylvain Fabre (sylfabre) + - Sullivan SENECHAL (soullivaneuh) + - Kyle + - Uwe Jäger (uwej711) + - Thomas Schulz (king2500) + - maxime.steinhausser + - Thomas Adam + - Philipp Cordes (corphi) - Iker Ibarguren (ikerib) - - Tim Goudriaan (codedmonkey) - - Roman Ring (inori) - - Francois Zaninotto - - Bohan Yang (brentybh) - - Serkan Yildiz (srknyldz) - - Grégoire Passault (gregwar) - - Philippe SEGATORI (tigitz) - - Raphaël Geffroy (raphael-geffroy) - - Benjamin Morel - - Marco Petersen (ocrampete16) + - Matthieu Auger (matthieuauger) - jaugustin + - Hamza Makraz (makraz) + - Jordane VASPARD (elementaire) + - Ismael Ambrosi (iambrosi) + - Magnus Nordlander (magnusnordlander) + - Maximilian Reichel (phramz) + - Cédric Anne + - Francesc Rosàs (frosas) - Jerzy Zawadzki (jzawadzki) + - Gabor Toth (tgabi333) - Christopher Davis (chrisguitarguy) - - Jan Decavele (jandc) - - Loïc Frémont (loic425) + - flack (flack) + - Pavel Batanov (scaytrase) + - Raphaël Geffroy (raphael-geffroy) + - Simon Podlipsky (simpod) + - Marcos Sánchez + - Samaël Villette (samadu61) + - Robert Kiss (kepten) - Dominique Bongiraud - - Ben Hakim - - Tiago Ribeiro (fixe) - - Michael Hirschler (mvhirsch) + - Loïc Frémont (loic425) + - Thomas Bisignani (toma) + - Beau Simensen (simensen) + - rudy onfroy (ronfroy) + - Bohan Yang (brentybh) + - Benjamin Morel + - Atsuhiro KUBO (iteman) + - Wu (wu-agriconomie) + - realmfoo - Sergey Belyshkin (sbelyshkin) - - Magnus Nordlander (magnusnordlander) - - Matthieu Auger (matthieuauger) - - Karoly Negyesi (chx) + - Alexandre Quercia (alquerci) - Fabien Villepinte - - renanbr - - Wodor Wodorski - - Moshe Weitzman (weitzman) - - janschoenherr - - Baptiste Lafontaine (magnetik) - - Lee Rowlands + - Thomas Tourlourat (armetiz) + - Emmanuel BORGES + - Wouter Van Hecke + - Pascal Luna (skalpa) - Kim Hemsø Rasmussen (kimhemsoe) - - Blanchon Vincent (blanchonvincent) - - Herberto Graca - - Atsuhiro KUBO (iteman) - - Pavel Batanov (scaytrase) - - Maximilian Reichel (phramz) - Dane Powell - - Christian Schmidt - - realmfoo - - Soner Sayakci - - Josip Kruslin (jkruslin) - - Alexey Kopytko (sanmai) + - Raul Fraile (raulfraile) + - Ben Hakim + - Tiago Ribeiro (fixe) + - Andrey Lebedev (alebedev) - Craig Duncan (duncan3dc) - - Samaël Villette (samadu61) - - Thomas Tourlourat (armetiz) - - Mathieu Rochette (mathroc) - - Hamza Makraz (makraz) - - Jordane VASPARD (elementaire) + - Sebastien Morel (plopix) + - Blanchon Vincent (blanchonvincent) + - Herberto Graca + - Manuel de Ruiter (manuel) - Marc Morera (mmoreram) - - Wu (wu-agriconomie) - - Ivan Kurnosov - - Sébastien Lavoie (lavoiesl) - - Aurelijus Valeiša (aurelijus) + - Vilius Grigaliūnas + - renanbr - Emanuele Gaspari (inmarelibero) + - Marco Petersen (ocrampete16) + - Grégoire Passault (gregwar) + - Frank de Jonge + - Wodor Wodorski + - Damien Alexandre (damienalexandre) + - Andrii Bodnar + - janschoenherr + - Bertrand Zuchuat (garfield-fr) + - Mathieu Rochette (mathroc) + - Lee Rowlands + - Sébastien Lavoie (lavoiesl) - Dalibor Karlović + - Jan Decavele (jandc) + - Baptiste Lafontaine (magnetik) + - Andrew Moore (finewolf) + - Manuel Kießling (manuelkiessling) + - Stepan Tanasiychuk (stfalcon) + - Gustavo Piltcher + - Aurelijus Valeiša (aurelijus) + - Ivan Kurnosov + - Serkan Yildiz (srknyldz) + - Quentin Dequippe (qdequippe) + - Yoann RENARD (yrenard) + - Josip Kruslin (jkruslin) + - Florian Klein (docteurklein) - SiD (plbsid) - - rudy onfroy (ronfroy) + - Moshe Weitzman (weitzman) + - Alexey Kopytko (sanmai) - Joppe De Cuyper (joppedc) - - Frank de Jonge - - Marcos Sánchez - - Pascal Luna (skalpa) - - Thomas Bisignani (toma) - - Robert Kiss (kepten) - - Cédric Anne - Warxcell (warxcell) - - Andrew Moore (finewolf) - - Raul Fraile (raulfraile) - - Manuel de Ruiter (manuel) - - Quentin Dequippe (qdequippe) + - Michael Hirschler (mvhirsch) + - Christian Schmidt - Michael Holm (hollo) - - Simon Podlipsky (simpod) - - Sebastien Morel (plopix) - - Wouter Van Hecke - - Gustavo Piltcher - - Andrey Lebedev (alebedev) - - Manuel Kießling (manuelkiessling) - - Gabor Toth (tgabi333) - - Bertrand Zuchuat (garfield-fr) + - Soner Sayakci - schlndh - - Beau Simensen (simensen) - - Alexandre Quercia (alquerci) - - Vilius Grigaliūnas - - Emmanuel BORGES - - Stepan Tanasiychuk (stfalcon) - - Damien Alexandre (damienalexandre) - - flack (flack) + - Philippe SEGATORI (tigitz) - Andrey Esaulov (andremaha) - Pavel Kirpitsov (pavel-kirpichyov) - - Florian Klein (docteurklein) - - Andrii Bodnar - - Yoann RENARD (yrenard) - - Ismael Ambrosi (iambrosi) - - Francesc Rosàs (frosas) - - Quentin Schuler (sukei) - - Gwendolen Lynch - - Inal DJAFAR (inalgnu) - - Michele Locati - - hubert lecorche (hlecorche) - - Kristen Gilden - - Ivan Mezinov - - Zmey - - Thierry T (lepiaf) - - Marek Kalnik (marekkalnik) - - Matthias Althaus (althaus) - - Nicolas LEFEVRE (nicoweb) - - kor3k kor3k (kor3k) - - Neil Peyssard (nepey) - - FORT Pierre-Louis (plfort) - - Pablo Lozano (arkadis) - - Yaroslav Kiliba - - Laszlo Korte - - Alain Hippolyte (aloneh) - - Nadim AL ABDOU (nadim) - - Daniel Tschinder + - Karoly Negyesi (chx) + - Kirill chEbba Chebunin + - hossein zolfi (ocean) + - Haralan Dobrev (hkdobrev) + - Philipp Kräutli (pkraeutli) + - Philippe Segatori + - Kieran Brahney + - Raffaele Carelle + - Urinbayev Shakhobiddin (shokhaa) - Johann Pardanaud - - Vadim Kharitonov (vadim) - - Alessandro Desantis - - Mateusz Sip (mateusz_sip) - - James Gilliland (neclimdul) - - Ivan Sarastov (isarastov) + - Max Baldanza + - Maarten de Boer (mdeboer) - Eric Masoero (eric-masoero) - - Ilija Tovilo (ilijatovilo) - - Roumen Damianoff - - BrokenSourceCode + - Karel Souffriau + - Clément Gautier (clementgautier) + - Albert Jessurum (ajessu) + - mondrake (mondrake) - Kai + - Vitaliy Zakharov (zakharovvi) + - vladimir.reznichenko + - Ricard Clau (ricardclau) + - Ivan Sarastov (isarastov) + - Yannick Ihmels (ihmels) - Sanpi (sanpi) - - Lorenz Schori - - Terje Bråten - - Greg Thornton (xdissent) - - Maksym Slesarenko (maksym_slesarenko) + - Grzegorz (Greg) Zdanowski (kiler129) + - Martin Herndl (herndlm) + - Thierry T (lepiaf) - Hassan Amouhzi - - Lukáš Holeczy (holicz) - - Daniel Beyer - - Dmytro Borysovskyi (dmytr0) - - mondrake (mondrake) - - vladimir.reznichenko - - Steven RENAUX (steven_renaux) - - Gyula Sallai (salla) - - Valmonzo - - Asmir Mustafic (goetas) - - ShinDarth - - Grenier Kévin (mcsky_biig) - - Albert Jessurum (ajessu) - - ivan - - Thibaut Cheymol (tcheymol) - - Kirill chEbba Chebunin + - Issam Raouf (iraouf) + - Jeremy Livingston (jeremylivingston) + - Tobias Sjösten (tobiassjosten) - Anthon Pang (robocoder) - - smoench - - Urinbayev Shakhobiddin (shokhaa) - - Matthew Lewinski (lewinski) - - Oscar Cubo Medina (ocubom) - - Karel Souffriau - - Florent Blaison (orkin) - - Mokhtar Tlili (sf-djuba) - - Bohdan Bobko - - Raffaele Carelle - - Rob Bast - - Julien Galenski (ruian) - - Kieran Brahney - - Max Baldanza + - Islam Israfilov (islam93) + - Grenier Kévin (mcsky_biig) + - SUMIDA, Ippei (ippey_s) + - Gyula Sallai (salla) + - Roumen Damianoff - Joe Lencioni - - Ricard Clau (ricardclau) - - Grzegorz (Greg) Zdanowski (kiler129) - - Costin Bereveanu (schniper) - - Pol Dellaiera (drupol) - - Rhodri Pugh (rodnaph) + - Asmir Mustafic (goetas) + - Steven RENAUX (steven_renaux) - Maximilian Ruta (deltachaos) - - Harm van Tilborg (hvt) + - Eduardo Gulias (egulias) + - Mateusz Sip (mateusz_sip) + - Gonzalo Vilaseca (gonzalovilaseca) - Thomas Royer (cydonia7) - - Jan Nedbal - Diego Agulló (aeoris) - - Eduardo Gulias (egulias) - - Mathias STRASSER (roukmoute) + - Cătălin Dan (dancatalin) - Artem (artemgenvald) - Alex Bowers - - Jakub Kucharovic (jkucharovic) - - Felix Labrecque - - Tobias Sjösten (tobiassjosten) - - Vitalii Ekert (comrade42) + - Vyacheslav Salakhutdinov (megazoll) + - Valmonzo + - Mathias STRASSER (roukmoute) + - Pol Dellaiera (drupol) + - Ahmed Ghanem (ahmedghanem00) - Alex (aik099) - Francesco Levorato - - Ben Scott (bpscott) - - Yannick Ihmels (ihmels) - - Marc Morales Valldepérez (kuert) + - Kev + - smoench + - Jakub Kucharovic (jkucharovic) - Hendrik Luup (hluup) - - Ahmed Raafat - - Dave Long + - Endre Fejes + - Maksym Slesarenko (maksym_slesarenko) + - Ahmed Raafat + - Matthew Lewinski (lewinski) + - Clara van Miert + - Pavel Volokitin (pvolok) - Andy Palmer (andyexeter) - giulio de donato (liuggio) - - Islam Israfilov (islam93) - - Robbert Klarenbeek (robbertkl) - - Pavel Volokitin (pvolok) - - Dimitri Gritsajuk (ottaviano) - - Issam Raouf (iraouf) - - hossein zolfi (ocean) - - Haralan Dobrev (hkdobrev) - - Philipp Kräutli (pkraeutli) - - Philippe Segatori - Hans Mackowiak - - Maarten de Boer (mdeboer) - - Clément Gautier (clementgautier) - - Vitaliy Zakharov (zakharovvi) - - C (dagardner) - - Martin Herndl (herndlm) - - SUMIDA, Ippei (ippey_s) - - Vyacheslav Salakhutdinov (megazoll) - - Ahmed Ghanem (ahmedghanem00) - - Vincent Chalamon + - James Gilliland (neclimdul) + - Robbert Klarenbeek (robbertkl) + - Dmytro Borysovskyi (dmytr0) - Xavier HAUSHERR + - BrokenSourceCode + - Jan Nedbal + - Alain Hippolyte (aloneh) + - Stéphane PY (steph_py) + - ivan + - Julien Galenski (ruian) + - Alessandro Desantis + - Vadim Kharitonov (vadim) + - Daniel Tschinder + - Dimitri Gritsajuk (ottaviano) - Gasan Guseynov (gassan) + - Nadim AL ABDOU (nadim) - Christophe L. (christophelau) - - Gonzalo Vilaseca (gonzalovilaseca) + - Oscar Cubo Medina (ocubom) + - Bohdan Bobko + - Shein Alexey - Thomas Perez (scullwm) + - C (dagardner) + - Marc Biorklund (mbiork) - Damien Fernandes - - Tarmo Leppänen (tarlepp) - - Clara van Miert + - Laszlo Korte - Jesper Noordsij - - Tobias Naumann (tna) - - Endre Fejes + - Marek Kalnik (marekkalnik) + - Vincent Chalamon + - hubert lecorche (hlecorche) + - Felix Labrecque + - Vitalii Ekert (comrade42) - Erin Millard - - Marc Biorklund (mbiork) - - Kev - - Kevin van Sonsbeek (kevin_van_sonsbeek) + - Tarmo Leppänen (tarlepp) + - Zmey + - Tobias Naumann (tna) + - Yaroslav Kiliba + - Pablo Lozano (arkadis) - Vladyslav Loboda - - Stéphane PY (steph_py) - - Shein Alexey + - Ilija Tovilo (ilijatovilo) + - Inal DJAFAR (inalgnu) + - Ivan Mezinov + - Kevin van Sonsbeek (kevin_van_sonsbeek) + - FORT Pierre-Louis (plfort) + - Lorenz Schori + - Neil Peyssard (nepey) - Arthur de Moulins (4rthem) - - Daniel STANCU + - kor3k kor3k (kor3k) - Nathanael Noblet (gnat) + - Nicolas LEFEVRE (nicoweb) + - Kristen Gilden + - Daniel STANCU + - Terje Bråten + - Michele Locati + - Greg Thornton (xdissent) - Jan Böhmer + - Matthias Althaus (althaus) + - Gwendolen Lynch + - Quentin Schuler (sukei) - Pierre Rineau - - Cătălin Dan (dancatalin) - - Jeremy Livingston (jeremylivingston) - - ilyes kooli (skafandri) - - Romain Gautier (mykiwi) - - Dave Hulbert (dave1010) + - Marc Morales Valldepérez (kuert) + - Rob Bast + - Rhodri Pugh (rodnaph) + - Ben Scott (bpscott) + - Dave Long + - Harm van Tilborg (hvt) + - Costin Bereveanu (schniper) + - ShinDarth + - Thibaut Cheymol (tcheymol) + - Florent Blaison (orkin) + - Daniel Beyer + - Mokhtar Tlili (sf-djuba) + - Lukáš Holeczy (holicz) + - Anthony Ferrara + - Philipp Rieber (bicpi) + - Asier Illarramendi (doup) + - Ali-HENDA + - Petr Duda (petrduda) + - Robert-Jan de Dreu + - M. Vondano + - Benjamin Cremer (bcremer) + - Ziumin + - Matthias Krauser (mkrauser) + - lenar + - Raulnet + - Gigino Chianese (sajito) + - Matthijs van den Bos (matthijs) + - Roberto Espinoza (respinoza) + - mcben + - Grummfy (grummfy) + - Maelan LE BORGNE + - Thomas Durand + - Maxime Pinot (maximepinot) + - jprivet-dev + - Denis Gorbachev (starfall) + - Jérôme Tanghe (deuchnord) + - Judicaël RUFFIEUX (axanagor) + - Benjamin (yzalis) + - Soufian EZ ZANTAR (soezz) + - lancergr + - Forfarle (forfarle) + - Adrien Roches (neirda24) + - Adam Szaraniec + - Kamil Kokot (pamil) + - Marek Zajac + - Roy Van Ginneken (rvanginneken) + - Michael Moravec + - Korvin Szanto + - Giso Stallenberg (gisostallenberg) + - Dmitriy Mamontov (mamontovdmitriy) + - Brian King + - Matheo Daninos (mathdns) + - Niklas Fiekas + - Krzysztof Piasecki (krzysztek) + - Maximilian Zumbansen + - Nate (frickenate) + - Jacek Jędrzejewski (jacek.jedrzejewski) + - Belhassen Bouchoucha (crownbackend) + - Alex Bakhturin + - Lenard Palko + - Ben Roberts (benr77) + - Maxim Dovydenok (dovydenok-maxim) - PHAS Developer - - Peter Bowyer (pbowyer) - - Eugene Wissner - - tim - - Philipp Scheit (pscheit) - - Bahman Mehrdad (bahman) - - Denis Kulichkin (onexhovia) - - Aurélien Fredouelle - - Benjamin Zaslavsky (tiriel) + - Bilge + - Martin Kirilov (wucdbm) - Laurent Masforné (heisenberg) - - AnneKir - - Jan Ole Behrens (deegital) - - Krzysztof Piasecki (krzysztek) - - Berny Cantos (xphere81) - - François Dume (franek) - - Vlad Gregurco (vgregurco) - - simon chrzanowski (simonch) - - Tobias Weichart - - Fabian Lange (codingfabian) - - Jérôme Tanghe (deuchnord) - - sasezaki - - Zbigniew Malcherczyk (ferror) + - Boris Vujicic (boris.vujicic) - Marcin Szepczynski (czepol) - - Greg Anderson - - William Arslett (warslett) - - Geoffrey Tran (geoff) - - Sergey Melesh (sergex) - - Lenard Palko - - Thomas Durand - - Angelov Dejan (angelov) - - Loïc Ovigne (oviglo) - - Jacek Jędrzejewski (jacek.jedrzejewski) - - Giso Stallenberg (gisostallenberg) + - Jonas Flodén (flojon) + - Eyüp Can Akman - Kurt Thiemann - - Luc Vieillescazes (iamluc) - - Filip Procházka (fprochazka) - - Trent Steel (trsteel88) - - Nate (frickenate) - - Jérôme Macias (jeromemacias) - - Marcos Rezende (rezende79) - - Emanuele Iannone - - Tobias Bönner - - NickSdot + - Rodrigo Borrego Bernabé (rodrigobb) + - Sergio Santoro + - Jannik Zschiesche + - Tavo Nieves J (tavoniievez) + - mamazu + - Peter Bowyer (pbowyer) + - Andrii Dembitskyi - Jonas Elfering - - Erik Saunier (snickers) - - Eyüp Can Akman - - Florian Merle (florian-merle) - - aaa2000 (aaa2000) - - Ioan Negulescu - - Adam Szaraniec - - boombatower + - Jan van Thoor (janvt) + - William Arslett (warslett) + - Roman Anasal + - sasezaki + - Denis Kulichkin (onexhovia) + - Pablo Díez (pablodip) + - tim - De Cock Xavier (xdecock) - - Guilherme Ferreira - - Sergio Santoro - - Zach Badgett (zachbadgett) - - Gábor Fási - - Franck RANAIVO-HARISOA (franckranaivo) - - Eduardo Oliveira (entering) + - Benjamin Zaslavsky (tiriel) + - Loïc Ovigne (oviglo) + - Restless-ET + - Gunnstein Lye (glye) + - Ivan Rey (ivanrey) + - Luc Vieillescazes (iamluc) + - Alexander Deruwe (aderuwe) + - Arkadius Stefanski (arkadius) + - Dariusz Ruminski + - Jan Ole Behrens (deegital) - Jeanmonod David (jeanmonod) - - Sergey Panteleev - - Ziumin - - Lctrs - - Maxime Pinot (maximepinot) - - Korvin Szanto - - Nathan Dench (ndenc2) - - Roman Anasal - - Pavel Popov (metaer) + - BENOIT POLASZEK (bpolaszek) + - Erik Saunier (snickers) + - Bohdan Pliachenko + - Disquedur + - Xavier HAUSHERR + - wicliff wolda (wickedone) + - Arturs Vonda + - Ryan + - Nicolas Rigaud + - Trent Steel (trsteel88) - Miroslav Šustek (sustmi) - - Vicent Soria Durá (vicentgodella) - - Jaik Dean (jaikdean) - - Asier Illarramendi (doup) - - Christoph Mewes (xrstf) - - Dmitriy Mamontov (mamontovdmitriy) - - Daniel Tiringer - - Remi Collet - - Miro Michalicka - - Alex Bakhturin - - Krasimir Bosilkov (kbosilkov) - - mmokhi - - Shakhobiddin - - Leevi Graham (leevigraham) - - Andrii Dembitskyi - - Piotr Kugla (piku235) - - Joachim Løvgaard (loevgaard) - - Bernd Stellwag - - Yevhen Sidelnyk - - Steven Surowiec (steves) - - Johnny Robeson (johnny) - - Jérôme Vieilledent (lolautruche) - - Dariusz Ruminski - - R. Achmad Dadang Nur Hidayanto (dadangnh) - - Jakub Škvára (jskvara) - Chad Sikorra (chadsikorra) - - Alexandru Furculita (afurculita) - - Matthew Grasmick - - Gijs van Lammeren - - Joshua Nye - - Tavo Nieves J (tavoniievez) - - Martin Parsiegla (spea) - - Chris Sedlmayr (catchamonkey) - - Michael Moravec - - Dennis Fridrich (dfridrich) - - Kevin McBride - - Silas Joisten (silasjoisten) - - Fabrice Bernhard (fabriceb) - - Benjamin Georgeault (wedgesama) - - Ivan Rey (ivanrey) - - Martin Gilbert (nitram1618) - - Nils Adermann (naderman) - - Thomas Talbot (ioni) - - Oleksii Zhurbytskyi - - John Bafford (jbafford) - - Adam Harvey - - Roy Van Ginneken (rvanginneken) - - Gunnstein Lye (glye) - - Judicaël RUFFIEUX (axanagor) - - Yoshio HANAWA - - Anton Bakai - - Jan Schumann - - Vitaliy Tverdokhlib (vitaliytv) - - Lescot Edouard (idetox) - - Gawain Lynch (gawain) - - Markus Lanthaler (lanthaler) - - Michel Salib (michelsalib) + - Philipp Scheit (pscheit) + - Nicolas Dewez (nicolas_dewez) + - Benoit Galati (benoitgalati) + - Brayden Williams (redstar504) + - Norbert Orzechowicz (norzechowicz) + - Nathan Dench (ndenc2) + - DerManoMann + - Martin Morávek (keeo) + - Jiří Bok + - Johnny Robeson (johnny) + - Jeroen Thora (bolle) + - Marcin Michalski (marcinmichalski) + - Markus Bachmann (baachi) - Alireza Mirsepassi (alirezamirsepassi) - - Samuele Lilli (doncallisto) - - Ariel Ferrandini (aferrandini) + - Vitaliy Tverdokhlib (vitaliytv) + - Sergey Panteleev - Ned Schwartz - - Restless-ET - - Artem Stepin (astepin) - - Mohammad Emran Hasan (phpfour) - - Matthew Smeets - - Andrew M-Y (andr) - - M. Vondano + - Vlad Gregurco (vgregurco) + - François Dume (franek) + - Tobias Bönner + - Cédric Lombardot (cedriclombardot) + - Jérémy DECOOL (jdecool) + - Jérémy M (th3mouk) - Matthieu Bontemps - - Brayden Williams (redstar504) - - Martin Morávek (keeo) - - Gigino Chianese (sajito) - - Denis Gorbachev (starfall) + - Andrew Udvare (audvare) + - Miro Michalicka + - Jan Schumann + - Gábor Fási + - R. Achmad Dadang Nur Hidayanto (dadangnh) + - Chris Tanaskoski (devristo) + - Arnaud De Abreu (arnaud-deabreu) + - Zbigniew Malcherczyk (ferror) - Dirk Pahl (dirkaholic) - - Marek Zajac - - Erik Trapman - - Faizan Akram Dar (faizanakram) - - Ryan + - Gawain Lynch (gawain) + - Axel Guckelsberger (guite) + - Geoffrey Tran (geoff) + - Vicent Soria Durá (vicentgodella) + - boombatower - vagrant - - Matheo Daninos (mathdns) - - Jonathan Johnson (jrjohnson) - - wicliff wolda (wickedone) - - Boris Vujicic (boris.vujicic) - - PatNowak - - Loïc Faugeron - - Andrew Udvare (audvare) + - nikos.sotiropoulos + - Florian Rey (nervo) + - Lescot Edouard (idetox) - Markus Staab - - Sander Toonen (xatoo) - - Anatoly Pashin (b1rdex) - - Klaus Silveira (klaussilveira) - - Jibé Barth (jibbarth) - - Jiří Bok - - Benoit Galati (benoitgalati) + - Arnaud POINTET (oipnet) + - Johan Vlaar (johjohan) + - Gildas Quéméner (gquemener) + - Artem Stepin (astepin) + - Loïc Faugeron + - Greg ORIOL + - Piotr Kugla (piku235) + - PatNowak + - Kevin McBride - Ioan Ovidiu Enache (ionutenache) - - Robert-Jan de Dreu - - battye - - BASAK Semih (itsemih) + - Bhavinkumar Nakrani (bhavin4u) + - “Filip + - Pavel Popov (metaer) + - Dennis Fridrich (dfridrich) + - Sander Toonen (xatoo) + - Andrew M-Y (andr) + - Mark Challoner (markchalloner) + - Ioan Negulescu + - Thomas Talbot (ioni) + - Fabrice Bernhard (fabriceb) + - Jérôme Vieilledent (lolautruche) + - aaa2000 (aaa2000) + - Sergey Melesh (sergex) + - Florian Merle (florian-merle) + - Emanuele Iannone + - Toni Rudolf (toooni) - Ivan Nikolaev (destillat) + - Fabian Lange (codingfabian) + - Webnet team (webnet) - Vadim Borodavko (javer) - - Norbert Orzechowicz (norzechowicz) - - Rodrigo Borrego Bernabé (rodrigobb) - - jprivet-dev - - lenar + - BASAK Semih (itsemih) + - Krasimir Bosilkov (kbosilkov) + - Yoshio HANAWA + - Ariel Ferrandini (aferrandini) + - Tobias Weichart + - Martijn Cuppens + - Filip Procházka (fprochazka) + - Jérôme Macias (jeromemacias) + - Jibé Barth (jibbarth) + - Mohammad Emran Hasan (phpfour) + - Erkhembayar Gantulga (erheme318) + - Jerzy Lekowski (jlekowski) + - Lctrs + - Nils Adermann (naderman) + - Aurélien Fredouelle + - Tom Klingenberg + - NickSdot + - mmokhi + - Shakhobiddin + - Bahman Mehrdad (bahman) + - Martin Parsiegla (spea) + - Adam Harvey + - Marvin Feldmann (breyndotechse) + - Pavel Campr (pcampr) + - Bernd Stellwag + - Patrick Reimers (preimers) + - Kevin Saliou (kbsali) + - Marcos Rezende (rezende79) + - Steffen Roßkamp + - Yi-Jyun Pan + - Florent Destremau (florentdestremau) + - John Bafford (jbafford) + - Antonin CLAUZIER (0x346e3730) + - Samuele Lilli (doncallisto) + - Christoph Mewes (xrstf) + - Michel Salib (michelsalib) + - nathanpage + - Silas Joisten (silasjoisten) + - Shawn Iwinski - Clemens Krack (ckrack) - - Stefan Gehrig (sgehrig) - - Markus S. (staabm) - - Petr Duda (petrduda) + - Scott Arciszewski + - Yevhen Sidelnyk + - Ben Ramsey (ramsey) - Sebastian Zoglowek - - Greg ORIOL - - BENOIT POLASZEK (bpolaszek) - - kylekatarnls (kylekatarnls) - - Antonio Jose Cerezo (ajcerezo) - - Antonin CLAUZIER (0x346e3730) - - Raulnet - - Pavel Campr (pcampr) + - Remi Collet - Ricardo Oliveira (ricardolotr) - - Martijn Cuppens - - nathanpage - - Marvin Feldmann (breyndotechse) - - Grummfy (grummfy) + - Andrii Dembitskyi + - Martin Gilbert (nitram1618) + - Petrisor Ciprian Daniel + - Greg Anderson + - W0rma + - Antonio Jose Cerezo (ajcerezo) + - simon chrzanowski (simonch) + - AKeeman (akeeman) + - Andreas Hennings + - Jaik Dean (jaikdean) + - Tri Pham (phamuyentri) + - Benjamin Georgeault (wedgesama) + - Markus Lanthaler (lanthaler) + - battye + - Jonathan Johnson (jrjohnson) - Valentin Jonovs - - Xavier HAUSHERR - - Ben Roberts (benr77) - - Jérémy M (th3mouk) - - mamazu - - Bohdan Pliachenko - Christian Gripp (core23) - - Cédric Lombardot (cedriclombardot) - - Yi-Jyun Pan - - Webnet team (webnet) + - ReenExe + - Angelov Dejan (angelov) + - Guilherme Ferreira + - Zach Badgett (zachbadgett) + - Berny Cantos (xphere81) + - Franck RANAIVO-HARISOA (franckranaivo) - M. (mbontemps) - - Philipp Rieber (bicpi) - - Disquedur - - Arturs Vonda + - Matthew Grasmick + - Eugene Wissner + - Steven Surowiec (steves) + - Marcin Chyłek (songoq) + - Erik Trapman + - geoffrey - Stefan Kruppa - - Nicolas Rigaud - - Alexander Deruwe (aderuwe) - - Sam Fleming (sam_fleming) - - DerManoMann - - Nicolas Dewez (nicolas_dewez) + - Daniel Tiringer + - Dawid Pakuła (zulusx) - Evan S Kaufman (evanskaufman) - - Bilge - - Niklas Fiekas - - Marcin Michalski (marcinmichalski) - - Belhassen Bouchoucha (crownbackend) - - Chris Tanaskoski (devristo) - - Kevin Saliou (kbsali) - - Steffen Roßkamp - - Johan Vlaar (johjohan) + - Sebastian Bergmann + - Alexandru Furculita (afurculita) + - Romain Gautier (mykiwi) + - ilyes kooli (skafandri) + - Desjardins Jérôme (jewome62) + - Matthew Smeets + - Anatoly Pashin (b1rdex) + - Jérémy REYNAUD (babeuloula) + - kylekatarnls (kylekatarnls) + - Jakub Škvára (jskvara) + - Oleksii Zhurbytskyi + - AnneKir - Dominik Zogg - - Roberto Espinoza (respinoza) - - W0rma - - Pablo Díez (pablodip) - - Martin Kirilov (wucdbm) - - Dawid Pakuła (zulusx) - - Axel Guckelsberger (guite) - - Matthijs van den Bos (matthijs) - - Jerzy Lekowski (jlekowski) - - nikos.sotiropoulos - - Florian Rey (nervo) - - Forfarle (forfarle) - - Arkadius Stefanski (arkadius) - - Jan van Thoor (janvt) - - Maximilian Zumbansen - - Benjamin (yzalis) - - ReenExe - - mcben + - Sam Fleming (sam_fleming) + - Anton Bakai + - Andrey Astakhov (aast) - quentin neyrat (qneyrat) - - Evgeny Ruban - - Kamil Kokot (pamil) + - Leevi Graham (leevigraham) - Dries Vints - - Adrien Roches (neirda24) - - Anthony Ferrara - - Benjamin Cremer (bcremer) - - Maxim Dovydenok (dovydenok-maxim) - - Marcin Chyłek (songoq) - - Toni Rudolf (toooni) + - Klaus Silveira (klaussilveira) + - Dave Hulbert (dave1010) + - Chris Sedlmayr (catchamonkey) + - Eduardo Oliveira (entering) + - Koen Reiniers (koenre) + - Evgeny Ruban + - Faizan Akram Dar (faizanakram) + - Gijs van Lammeren + - Markus S. (staabm) - takashiraki - - “Filip - - AKeeman (akeeman) - - Arnaud De Abreu (arnaud-deabreu) - - Soufian EZ ZANTAR (soezz) - - Jonas Flodén (flojon) - - Jeroen Thora (bolle) - - Tri Pham (phamuyentri) + - Joshua Nye + - Joachim Løvgaard (loevgaard) - Claude Khedhiri (ck-developer) - - Tom Klingenberg - - Jérémy REYNAUD (babeuloula) - - Arnaud POINTET (oipnet) - - geoffrey - - Andreas Hennings - - Ali-HENDA - - Mark Challoner (markchalloner) - - Petrisor Ciprian Daniel - - Bhavinkumar Nakrani (bhavin4u) + - Stefan Gehrig (sgehrig) - Barry vd. Heuvel (barryvdh) - - Erkhembayar Gantulga (erheme318) - - Matthias Krauser (mkrauser) - - Ben Ramsey (ramsey) - - Markus Bachmann (baachi) - - Shawn Iwinski - - Scott Arciszewski - - Florent Destremau (florentdestremau) - - Koen Reiniers (koenre) - - Gildas Quéméner (gquemener) - - Andrey Astakhov (aast) - - lancergr - - Maelan LE BORGNE - - Brian King - - Jannik Zschiesche - - Andrii Dembitskyi - - Desjardins Jérôme (jewome62) - - Jérémy DECOOL (jdecool) - - Sebastian Bergmann - - Patrick Reimers (preimers) - - Reedy + - Malte Müns + - James Hudson (mrthehud) + - Eduardo Rocha + - Joost van Driel (j92) + - Rafael Kraut + - Thomas Nunninger + - Arpit Verma - Max Baldanza - - Payene Denis KOMBATE (payene) + - Ettore Del Negro (ettoredn) + - Christophe Villeger (seragan) + - Vladimir Varlamov (iamvar) - Arjan Keeman - - Ryan RAJKOMAR (rrajkomar) - - bukhonovd - Zouaoui Montassar - - Miquel Rodríguez Telep (mrtorrent) - - James Hudson (mrthehud) - - Vladimir Varlamov (iamvar) + - bukhonovd + - hugovms + - Payene Denis KOMBATE (payene) + - Ryan RAJKOMAR (rrajkomar) + - Nicolas Dousson + - Youssef Benhssaien (moghreb) + - Vikram Vaswani + - Alexander Dmitryuk (coden1) + - Andrew Tchircoff (andrewtch) + - Brad Jones - Martin (meckhardt) - Gerard van Helden (drm) - Maks 3w (maks3w) - - Vikram Vaswani + - Michael Roterman (wtfzdotnet) + - Nicole Cordes (ichhabrecht) + - Miquel Rodríguez Telep (mrtorrent) + - Sergey Kolodyazhnyy (skolodyazhnyy) + - tourze - julien57 - - Rafael Kraut - - Thomas Nunninger - Matijn (matijn-made) - - Arpit Verma - Florian Wolfsjaeger (flowolf) - - Christophe Villeger (seragan) - - hugovms - - Nicolas Dousson - Jonathan Hogervorst - Amr Ezzat (amrezzat) - - Andrew Tchircoff (andrewtch) - - Ettore Del Negro (ettoredn) - Julien Robic (nayte) + - Xavier Leune (xleune) + - aegypius + - Abhoryo + - Sergey Yastrebov - Mustafa Cheraim (musta_cher) - - Raphaëll Roussel - Reinier Kip + - shubhalgupta + - Tomasz Kusy + - Raphaëll Roussel + - Pavel Witassek + - Benjamin Franzke - Florian Weber + - Maksim Muruev - Stéphane Escandell (sescandell) - Israel J. Carberry + - Andrew Hilobok (hilobok) + - Ilia (aliance) - Gladhon - Mudassar - Konstantin Grachev (grachevko) - Philippe Segatori + - Benjamin Grandfond (benjamin) - Oleksii Kozhemiaka (okozhemiaka) - Gálik Pál + - develop + - Oriol Viñals + - Mihai Stancu + - Reyo Stallenberg (reyostallenberg) - Pierre Hennequart - Carson Full (carsonfull) - Álvaro Sánchez Taboada - Mark Schmale (masch) - Benoît Merlet (trompette) - - Mihai Stancu - Yuriy Vilks (igrizzli) - fzerorubigd - - Xavier Leune (xleune) - - aegypius + - Denis Zunke (donalberto) + - Chris Boden (cboden) + - VJ + - Jacques MOATI (jmoati) - grizlik + - Malte Blättermann + - louismariegaborit - Benjamin Toussaint (bto) - - VJ - Barney Hanlon - Kieran Cross (kilosierracharlie) - Andrei C. (moldman) + - Daniel Cestari - Bert Hekman (demontpx) - Loïc Beurlet - Marcos Gómez Vilches (markitosgv) - Pedro Miguel Maymone de Resende (pedroresende) - - Michael Roterman (wtfzdotnet) + - Ryan Hendrickson + - Luis Tacón (lutacon) + - Andreas Braun - Zhuravlev Alexander (scif) - - Pavel Witassek + - Marko Petrovic - Jose Gonzalez - - Nicole Cordes (ichhabrecht) - - Benjamin Grandfond (benjamin) - - Benjamin Franzke + - den - Jordan Deitch - - Sergey Kolodyazhnyy (skolodyazhnyy) - - tourze - Arturas Smorgun (asarturas) - - shubhalgupta - - Reyo Stallenberg (reyostallenberg) - - Tomasz Kusy - - Ilia (aliance) - - Youssef Benhssaien (moghreb) - - Alexander Dmitryuk (coden1) - - louismariegaborit + - Vincent QUATREVIEUX + - Loïc Chardonnet - scyzoryck - Tiago Brito (blackmx) - - Brad Jones - - Jacques MOATI (jmoati) - bogdan - - Joost van Driel (j92) - - Andrew Hilobok (hilobok) - - Denis Zunke (donalberto) - - Chris Boden (cboden) - - Daniel Cestari - Shin Ohno (ganchiku) - - develop - - Malte Blättermann - Adrien Jourdier (eclairia) - Volodymyr Panivko - David Fuhr - Artur Eshenbrener - Fabien LUCAS (flucas2) - Ferran Perxas (fperxas) - - Ryan Hendrickson - Tony Tran - Tristan Roussel - - Sergey Yastrebov - Johnny Peck (johnnypeck) - frost-nzcr4 - Michiel Boeckaert (milio) - Gerben Oolbekkink - Jon Dufresne - avorobiev - - Luis Tacón (lutacon) - - Marko Petrovic - - Abhoryo + - Fabien Salles (blacked) - Guillaume Verstraete - - Maksim Muruev - Pierre-Yves Landuré (biapy) - Sascha Grossenbacher (berdir) - Matt Johnson (gdibass) - Wouter van der Loop (toppy-hennie) + - Terje Bråten + - Reen Lokum - phpner - Damien Fa + - Dennis Hotson + - Gregor Nathanael Meyer (spackmat) + - Geoffrey Brier (geoffrey-brier) + - zenas1210 - Felds Liscia (felds) - Sander De la Marche (sanderdlm) - Carlos Quintana - Jeroen Fiege (fieg) - - Fabien Salles (blacked) - - den - Jeroen van den Enden (endroid) - - Andreas Braun - Ворожцов Максим (myks92) - Tristan Maindron (tmaindron) - Andreas Lutro (anlutro) @@ -1110,28 +1120,24 @@ The Symfony Connect username in parenthesis allows to get more information - Alex Xandra Albert Sim - Anton A. Sumin - benjaminmal + - David Romaní - d-mitrofanov-v - - Oriol Viñals - Roger Guasch (rogerguasch) - Kristof Van Cauwenbergh (kristofvc) - Nahuel Cuesta (ncuesta) - - Vincent QUATREVIEUX + - Sinan Eldem (sineld) - Christian Sciberras (uuf6429) - Kagan Balga (kagan-balga) - Simon Mönch - - Terje Bråten - Alex Bogomazov (alebo) - - David Romaní + - Chris Jones (magikid) + - Jonathan (jlslew) - Dennis Langen (nijusan) - - Reen Lokum - Mathias Brodala (mbrodala) - - Loïc Chardonnet - Carlos Pereira De Amorim (epitre) - Nathan PAGE (nathix) - Jon Gotlin (jongotlin) - - Chris Jones (magikid) - Vitaliy Ryaboy (vitaliy) - - Jonathan (jlslew) - Mátyás Somfai (smatyas) - Maxime COLIN (maximecolin) - izzyp @@ -1139,40 +1145,38 @@ The Symfony Connect username in parenthesis allows to get more information - Tales Santos (tsantos84) - Patrick Allaert - mfettig - - Malte Müns + - Ana Raro + - Gabrielle Langer - Sebastian Marek (proofek) - Christopher Hall (mythmakr) - katario - wuchen90 - - Michael Thieulin - - Sinan Eldem (sineld) + - Reedy - Ivan Grigoriev (greedyivan) - Geert De Deckere - - Dennis Hotson - Daniel Badura - Eric Abouaf (neyric) - Piotr Stankowski - Dmitrii Tarasov (dtarasov) + - Glodzienski - COMBROUSE Dimitri - - Gregor Nathanael Meyer (spackmat) - EStyles (insidestyles) - ampaze - ouardisoft - Baptiste CONTRERAS - - Ana Raro - - Glodzienski + - Kay Wei - Julien Tattevin (jutattevin) - Ke WANG (yktd26) - - Geoffrey Brier (geoffrey-brier) - - zenas1210 - Jay Klehr - NanoSector + - Marek Pietrzak (mheki) + - Gert Wijnalda (cinamo) - sl_toto (sl_toto) - DUPUCH (bdupuch) - Egor Taranov - Don Pinkster + - Sergey Zolotov (enleur) - Davide Borsatto (davide.borsatto) - - Kay Wei - Massimiliano Braglia (massimilianobraglia) - Guilherme Augusto Henschel - Baldur Rensch (brensch) @@ -1181,10 +1185,11 @@ The Symfony Connect username in parenthesis allows to get more information - Matthieu Calie (matth--) - ornicar - Xavier Briand (xavierbriand) - - mohamed - Daniel Alejandro Castro Arellano (lexcast) - Paul Oms - radar3301 + - Pedro Casado (pdr33n) + - mohamed - Steve Grunwell - Dragos Protung (dragosprotung) - Marco Wansinck (mwansinck) @@ -1193,84 +1198,85 @@ The Symfony Connect username in parenthesis allows to get more information - Emil Einarsson - Edvin Hultberg - Ondrej Exner + - Alexander Grimalovsky (flying) - ToshY - - Pedro Casado (pdr33n) - - Gabrielle Langer - Noémi Salaün (noemi-salaun) - - Marek Pietrzak (mheki) - - Gert Wijnalda (cinamo) + - Paulo Ribeiro (paulo) - Maxim Tugaev (tugmaks) - - Sergey Zolotov (enleur) + - Dhananjay Goratela - Sebastian Grodzicki (sgrodzicki) + - Alex Bacart + - Mantas Var (mvar) - Vincent Composieux (eko) - acoulton - - Alexander Grimalovsky (flying) - Delf Tonder (leberknecht) - Florian Hermann (fhermann) - Guillaume Aveline - Vladyslav Petrovych - - Mantas Var (mvar) + - Xavier Lacot (xavier) + - Cristoforo Cervino (cristoforocervino) + - Gábor Tóth + - Gintautas Miselis (naktibalda) + - Asier Etxebeste - Andre Hoong - Thorry84 - Johannes Klauss (cloppy) - Jan Prieser - - Paulo Ribeiro (paulo) - Noah Heck (myesain) - James Johnston - - Dhananjay Goratela - - Alex Bacart - - Xavier Lacot (xavier) - Quentin Dreyer (qkdreyer) - wanxiangchwng - - Cristoforo Cervino (cristoforocervino) - Marc Abramowitz + - Oliver Hoff + - Philipp Keck + - Aydin Hassan - Adam + - Ivan + - kick-the-bucket + - Alexandre Dupuy (satchette) + - Maximilian.Beckers - Jakub Vrána (vrana) - 243083df + - Simon DELICATA - Lukas Mencl + - Adrien Lucas (adrienlucas) - Mickaël Andrieu (mickaelandrieu) + - Geordie - Rodrigo Méndez (rodmen) - - Oliver Hoff - Thiago Cordeiro (thiagocordeiro) - Hossein Bukhamsin - - Gábor Tóth - DT Inier (gam6itko) - - Gintautas Miselis (naktibalda) - Romanavr - - Asier Etxebeste - - Philipp Keck - - Aydin Hassan - Matteo Beccati (matteobeccati) - Tarjei Huse (tarjei) - SpacePossum - Nguyen Xuan Quynh - Toon Verwerft (veewee) - jochenvdv - - kick-the-bucket + - Johann Saunier (prophet777) - fedor.f - - Simon DELICATA - - Geordie - - Michał Jusięga - - Niklas Keller - Michał Marcin Brzuchalski (brzuchal) - - Ivan - - Alexandre Dupuy (satchette) - - Maximilian.Beckers - - Johann Saunier (prophet777) - - StefanoTarditi - Simon Terrien (sterrien) + - Michał Jusięga + - Niklas Keller - Thomas Cochard (tcochard) + - StefanoTarditi - Sebastian Krebs - Laurent Bassin (lbassin) - Koen Kuipers (koku) - Andreas Erhard (andaris) + - origaminal + - Sem Schidler (xvilo) + - Aleksandr Volochnev (exelenz) + - Daniël Brekelmans (dbrekelmans) + - Josiah (josiah) + - abdul malik ikhsan (samsonasik) - Sébastien JEAN (sebastien76) - Trevor North - - origaminal - Matthieu Mota (matthieumota) - Simon Heimberg (simon_heimberg) - Quentin de Longraye (quentinus95) - - Adrien Lucas (adrienlucas) + - Bill Hance (billhance) - Dmytro Boiko (eagle) - zenmate - Baptiste Meyer (meyerbaptiste) @@ -1280,289 +1286,285 @@ The Symfony Connect username in parenthesis allows to get more information - Robin van der Vleuten (robinvdvleuten) - Patrick Dawkins (pjcdawkins) - Anthony Tenneriello + - Stephan Vock (glaubinix) + - Mouad ZIANI (mouadziani) + - Julien Fredon + - Paweł Niedzielski (steveb) - vladimir.panivko - - Matthieu Bontemps - flip111 + - Alexandre parent + - Balazs Csaba + - Matthieu Bontemps + - Tamás Nagy (t-bond) + - Olivier Maisonneuve + - Sherin Bloemendaal + - Valentin Nazarov + - Stefano Degenkamp (steef) + - Bálint Szekeres + - Tony Malzhacker + - Oliver Hader + - Hany el-Kerdany - Bozhidar Hristov + - Richard Henkenjohann (richardhj) + - umpirski + - Marc Laporte + - Tamas Szijarto + - Benjamin Lebon + - marie - Richard van den Brand (ricbra) - - Sem Schidler (xvilo) + - Evan C + - Mickaël Isaert (misaert) + - Fractal Zombie + - Ana Raro + - Kevin SCHNEKENBURGER + - Ian Jenkins (jenkoian) + - Jakub Podhorsky (podhy) + - Korvin Szanto + - Ivan Kurnosov + - Oriol Viñals + - Vitaliy Zhuk (zhukv) + - Cameron Porter + - Adrian Nguyen (vuphuong87) + - Alexander Kim + - Adrian Günter (adrianguenter) - Robert Gruendler (pulse00) - Jordi Sala Morales (jsala) + - Johnson Page (jwpage) + - Paweł Wacławczyk (pwc) - Takashi Kanemoto (ttskch) - Tinjo Schöni + - Oleg Zinchenko (cystbear) + - Mario Ramundo (rammar) + - Lorenzo Millucci (lmillucci) + - Yi-Jyun Pan + - Nikolai Mikhailov (sonnymilton) + - Roy de Vos Burchart + - Neil Ferreira + - Mikhail Yurasov (mym) + - Peter Potrowl + - Åsmund Garfors + - Grinbergs Reinis (shima5) + - Antal Áron (antalaron) + - stoccc + - Wesley Lancel + - Fred Cox + - Hossein Hosni + - Dennis Væversted (srnzitcom) + - Morten Wulff (wulff) + - Jiri Barous + - Thibaut THOUEMENT (thibaut_thouement) + - Ian Irlen + - James Michael DuPont - Petar Obradović + - Vincent CHALAMON + - Seb Koelen + - Ramunas Pabreza (doobas) + - Tomasz Ignatiuk + - Masterklavi - David ALLIX - Daniel González (daniel.gonzalez) - - Aleksandr Volochnev (exelenz) + - Jean Pasdeloup + - Thijs-jan Veldhuizen (tjveldhuizen) + - Gert de Pagter + - Julien Turby + - Brajk19 + - Ondrej Machulda (ondram) + - Julien Maulny + - Thomas P - Aurimas Niekis (gcds) + - skmedix (skmedix) + - Florent Viel (luxifer) + - Sébastien Despont (bouillou) + - Maxime Douailin + - Vladimir Valikayev + - Morgan Auchede + - Marco Lipparini (liarco) + - Christin Gruber (christingruber) + - Krzysztof Łabuś (crozin) + - Hidde Boomsma (hboomsma) - Manuel Alejandro Paz Cetina - Rootie - Ilya Levin (ilyachase) - alexandre.lassauge - - Balazs Csaba + - Francisco Alvarez (sormes) + - Tamás Szigeti + - Travis Carden (traviscarden) - Andrew Berry - - Sherin Bloemendaal + - _sir_kane (waly) + - Cyril Vermandé (cyve) + - Alex (garrett) + - Cornel Cruceru (amne) + - Alex Kalineskou + - Bastien DURAND (deamon) + - Thibault Buathier (gwemox) + - Ulumuddin Cahyadi Yunus (joenoez) - Chris Heng (gigablah) + - RJ Garcia + - Benjamin Schoch (bschoch) + - Sascha Dens (saschadens) + - Jean-Baptiste GOMOND (mjbgo) + - David Molineus + - Gina Peter Banyard + - Matt Janssen + - arai + - Mior Muhammad Zaki (crynobone) + - Jan Kramer + - Lars Vierbergen (vierbergenlars) + - Simon Schick (simonsimcity) - Michael Devery (mickadoo) - - Alexandre parent - - Valentin Nazarov - - Stefano Degenkamp (steef) - Thiago Melo + - Stefan Warman (warmans) + - Shaharia Azam - Jawira Portugal (jawira) - - Oliver Hader + - Oleksandr Barabolia (oleksandrbarabolia) - Natsuki Ikeguchi - Simon Watiau (simonwatiau) - Pavol Tuka - - Daniël Brekelmans (dbrekelmans) - - Josiah (josiah) + - Arun Philip - Jan Walther (janwalther) - Rimas Kudelis - Benjamin Zikarsky (bzikarsky) + - Brunet Laurent (lbrunet) + - Marko H. Tamminen (gzumba) - Joschi Kuphal + - Fabian Vogler (fabian) - Pierrick VIGNAND (pierrick) - Mark Sonnabaum - - umpirski - - Jan Kramer - - abdul malik ikhsan (samsonasik) - - Bill Hance (billhance) + - James Hemery + - Florian Pfitzer (marmelatze) + - Michael Bessolov + - Ahmed Ashraf (ahmedash95) - Carlos Buenosvinos (carlosbuenosvinos) - Dustin Dobervich (dustin10) - Jakub Kulhan (jakubkulhan) - - Mouad ZIANI (mouadziani) - Kyle Evans (kevans91) - - arai - Dominik Ulrich - Simon (kosssi) - Jesper Noordsij + - Javier López (loalf) - Martins Sipenko + - Aurimas Niekis (aurimasniekis) - Daisuke Ohata - Ayke Halder - - Ana Raro - - Benjamin Lebon - - Ian Jenkins (jenkoian) - - Vitaliy Zhuk (zhukv) - - marie - - Johnson Page (jwpage) - - Paweł Wacławczyk (pwc) + - Simon Leblanc (leblanc_simon) - Besnik Br - - Nikolai Mikhailov (sonnymilton) - - Roy de Vos Burchart - - Mickaël Isaert (misaert) - Evan Villemez - - Korvin Szanto - - Ivan Kurnosov - - Oriol Viñals - - Jiri Barous - - Kevin SCHNEKENBURGER - - Thibaut THOUEMENT (thibaut_thouement) - - Thijs-jan Veldhuizen (tjveldhuizen) - - Grinbergs Reinis (shima5) - - stoccc - - Hossein Hosni - - Dennis Væversted (srnzitcom) - - Ian Irlen - - Alexander Kim - - Adrian Günter (adrianguenter) - - Tamás Nagy (t-bond) - - James Michael DuPont - - Seb Koelen - - RJ Garcia - ywisax - - Oleg Zinchenko (cystbear) - - Mario Ramundo (rammar) - - Lorenzo Millucci (lmillucci) - - Neil Ferreira - - skmedix (skmedix) - - Florent Viel (luxifer) - - Simon Schick (simonsimcity) - - Arun Philip - - Mikhail Yurasov (mym) - - Peter Potrowl - - Åsmund Garfors - - Morten Wulff (wulff) - - Jean Pasdeloup - - Gert de Pagter - - Tamás Szigeti - - Paweł Niedzielski (steveb) - - Alex Kalineskou - - Ulumuddin Cahyadi Yunus (joenoez) - Krystian Marcisz (simivar) - - Maxime Douailin - - Vladimir Valikayev - - Vincent CHALAMON - - Ramunas Pabreza (doobas) - - Brunet Laurent (lbrunet) - - Marko H. Tamminen (gzumba) - - Marco Lipparini (liarco) - - Christin Gruber (christingruber) - - Krzysztof Łabuś (crozin) - - Marc Laporte - - Hidde Boomsma (hboomsma) - - Francisco Alvarez (sormes) - - _sir_kane (waly) - - Olivier Maisonneuve + - Mohamed Gamal + - Yosmany Garcia (yosmanyga) - Roy Klutman (royklutman) - - Bálint Szekeres - - Tomasz Ignatiuk - - Masterklavi - - Yi-Jyun Pan - - Fred Cox - - Bastien DURAND (deamon) - - Thibault Buathier (gwemox) - - Mior Muhammad Zaki (crynobone) - - Lars Vierbergen (vierbergenlars) - - James Hemery - - Tony Malzhacker - - Julien Maulny - - Thomas P - - Julien Turby - - Oleksandr Barabolia (oleksandrbarabolia) - - Morgan Auchede - - Fabian Vogler (fabian) - - Travis Carden (traviscarden) - - Cyril Vermandé (cyve) - - Alex (garrett) + - Jaroslav Kuba - Ivo Bathke (ivoba) - - Javier López (loalf) - - Cornel Cruceru (amne) - - Cameron Porter - - Jean-Baptiste GOMOND (mjbgo) - - David Molineus + - Minna N + - Christophe V. (cvergne) + - DemigodCode - Clemens Krack - - Gina Peter Banyard - - Matt Janssen - - Adrian Nguyen (vuphuong87) - - Stefan Warman (warmans) - - Shaharia Azam - - Antal Áron (antalaron) - - Richard Henkenjohann (richardhj) - - Florian Pfitzer (marmelatze) - - Julien Fredon - - Michael Bessolov - - Ahmed Ashraf (ahmedash95) - - Tamas Szijarto - - Stephan Vock (glaubinix) - - Dmitry Parnas (parnas) - - Rodrigo Aguilera - - Jörn Lang - - Fractal Zombie - - Hany el-Kerdany - - Aurimas Niekis (aurimasniekis) - - Simon Leblanc (leblanc_simon) - - Evan C - - Jakub Podhorsky (podhy) - - Brajk19 - - Ondrej Machulda (ondram) - - Sébastien Despont (bouillou) - - Benjamin Schoch (bschoch) - - Sascha Dens (saschadens) - - Wesley Lancel - - Andreas Leathley (iquito) - - Jaroslav Kuba - Matthew Davis (mdavis1982) - John Bohn (jbohn) + - Guillaume Sainthillier (guillaume-sainthillier) + - Jayson Xu (superjavason) + - Christian Soronellas (theunic) + - Thibault Richard (t-richard) + - Benjamin Laugueux - fago - - Rafał Wrzeszcz (rafalwrzeszcz) + - Mike Meier (mykon) + - Vincent Simonin + - Max Rath (drak3) + - Dmitry Parnas (parnas) + - Rodrigo Aguilera + - Richard Bradley + - Douglas Reith (douglas_reith) + - Barthold Bos + - Xav` (xavismeh) + - vitaliytv + - Jörn Lang + - Kieran + - Julie Hourcade (juliehde) + - Jonatan Männchen + - Tim Düsterhus + - Alaattin Kahramanlar (alaattin) + - Degory Valentine - Jonas Elfering - Ruben Gonzalez (rubenruateltek) + - Casper Valdemar Poulsen - Thomas Ploch - Paul Kamer (pkamer) - Gustavo Falco (gfalco) - - Jayson Xu (superjavason) + - Pascal Helfenstein - Stephan Vierkant (svierkant) - Vladimir Luchaninov (luchaninov) - - Vincent Simonin - - Kieran - - Julie Hourcade (juliehde) - - Alaattin Kahramanlar (alaattin) - - Arnaud Frézet + - Martijn Evers + - Nicolas de Marqué (nicola) + - noniagriconomie + - Carl Casbolt (carlcasbolt) + - Jan Pintr + - Cosmin Sandu - Maximilian Bösing - Alexander Li (aweelex) - Maksim Kotlyar (makasim) + - Arnaud Frézet + - Ben + - Franco Traversaro (belinde) - michaelwilliams - Luca Saba (lucasaba) - Rustam Bakeev (nommyde) + - Jesper Skytte (greew) - AndrolGenhald - - Casper Valdemar Poulsen - - johan Vlaar - - Nicolas de Marqué (nicola) - - noniagriconomie - Antoine Corcy - buffcode + - Pavlo Pelekh (pelekh) + - Randy Geraads + - johan Vlaar + - Kuba Werłos (kuba) + - Gennady Telegin + - Arno Geurts + - Sofiane HADDAG (sofhad) + - Bastien THOMAS + - Benedikt Lenzen (demigodcode) + - Christian Stoller (naitsirch) + - Calin Mihai Pristavu + - Grégoire Penverne (gpenverne) + - Kevin (oxfouzer) + - d-ph + - MrMicky - Achilles Kaloeridis (achilles) - Sebastian Paczkowski (sebpacz) - Zeeshan Rashid (zeeshan) + - Andreas Leathley (iquito) + - Andrey Sevastianov - Evan Shaw - Claudio Zizza - - Nico Haase - - David Marín Carreño (davefx) - - Christophe V. (cvergne) - - DemigodCode - - Mardari Dorel (dorumd) - - Kuba Werłos (kuba) - - Arno Geurts - - Kien Nguyen - - Nykopol (nykopol) - - Sofiane HADDAG (sofhad) - - Minna N - - Calin Mihai Pristavu - - Stéphan Kochen - - Sofien Naas - - mwsaz - yclian - Eric COURTIAL - - Christian Soronellas (theunic) + - Robert Fischer (sandoba) - Duncan de Boer (farmer-duck) - Stéphane Delprat - - Thibault Richard (t-richard) - Roberto Nygaard + - Nico Haase + - David Marín Carreño (davefx) - Michel Hunziker - - Benjamin Laugueux - - Mike Meier (mykon) - - Pascal Helfenstein - - Guillaume Sainthillier (guillaume-sainthillier) + - Alexander Miehe + - Kien Nguyen + - Nykopol (nykopol) - stlrnz - - Sergii Dolgushev (serhey) - - Sylvain BEISSIER (sylvain-beissier) + - Stéphan Kochen + - Sofien Naas + - mwsaz - Jake (jakesoft) - Nikita Nefedov (nikita2206) - Elan Ruusamäe (glen) - - Max Rath (drak3) - Andrii Popov (andrii-popov) - Harry Walter (haswalt) - - Richard Bradley + - Sergii Dolgushev (serhey) + - Sylvain BEISSIER (sylvain-beissier) - Andrew Neil Forster (krciga22) + - Rafał Wrzeszcz (rafalwrzeszcz) - Douglas Hammond (wizhippo) - - Martijn Evers - - Douglas Reith (douglas_reith) - - Barthold Bos - - vitaliytv - - Andrey Sevastianov - - Xav` (xavismeh) - - Carl Casbolt (carlcasbolt) - - Cosmin Sandu - - Mohamed Gamal - - Yosmany Garcia (yosmanyga) - Wybren Koelmans (wybren_koelmans) - - Ben - - Franco Traversaro (belinde) - - Jonatan Männchen - - Tim Düsterhus - - Jesper Skytte (greew) - - Randy Geraads - - Degory Valentine - - Gennady Telegin - - Jan Pintr - - Bastien THOMAS - - Benedikt Lenzen (demigodcode) - - Pavlo Pelekh (pelekh) - - Christian Stoller (naitsirch) - - d-ph - - MrMicky - - Grégoire Penverne (gpenverne) - - Kevin (oxfouzer) - - Robert Fischer (sandoba) - - Alexander Miehe + - Mardari Dorel (dorumd) + - Philipp Kolesnikov + - Sébastien Santoro (dereckson) - Simo Heinonen (simoheinonen) - Simeon Kolev (simeon_kolev9) - Jason Tan (jt2k) @@ -1571,11 +1573,9 @@ The Symfony Connect username in parenthesis allows to get more information - Rostyslav Kinash - Toni Peric (tperic) - Kristijan Kanalaš (kristijan_kanalas_infostud) - - Philipp Kolesnikov - Renan Rodrigo - Ruben Jacobs (rubenj) - Robin Lehrmann - - Sébastien Santoro (dereckson) - Marcel Hernandez - Richard Quadling - Andrew Codispoti @@ -1607,130 +1607,194 @@ The Symfony Connect username in parenthesis allows to get more information - Adán Lobato (adanlobato) - Emil Masiakowski - Christian Grasso (chris54721) + - Nicolas Badey (nico-b) + - Daniel Londero (dlondero) + - Diego Campoy + - Buster Neece + - Thomas Decaux + - tarlepp + - tinect (tinect) + - tirnanog06 + - Dominik Ritter (dritter) + - Julien JANVIER (jjanvier) + - Nathan Sepulveda + - Ramazan APAYDIN (rapaydin) + - hjkl + - Tatsuya Tsuruoka + - Martynas Narbutas + - Noel Light-Hilary + - Alexis + - enomotodev + - Eugene Babushkin (warl) + - Patrick Kuijvenhoven + - Frank Schulze (xit) - Erfan Bahramali - - Anton (bonio) + - afaricamp + - Oz (import) + - Alexis Lefebvre + - Gregório Bonfante Borba (bonfante) - klyk50 - Konstantinos Alexiou - - Stefan Hüsges (tronsha) + - Dan (dantleech) - Arnaud - - Moritz Borgmann (mborgmann) - Christian Jul Jensen - - Oncle Tom - - Vivien + - Michael Schneider - Tim Lieberman - - Ferran Vidal + - Guillem Fondin (guillemfondin) - Gleb Sidora - Even André Fiskvik - Lance McNearney - - Amine Yakoubi + - Juanmi Rodriguez Cerón - hainey - Attila Szeremi - - timaschew + - Abdul.Mohsen B. A. A - danilovict2 - - Michael Steininger - - Claas Augner - - Kévin Gonella - - Nathanaël Martel (nathanaelmartel) - - Michael Telgmann + - Rein Baarsma (solidwebcode) + - DerStoffel + - René Landgrebe + - PierreRebeilleau + - Helmut Januschka - Carlos Fernandes (carferdas) - Nikos Charalampidis - mohammadreza honarkhah - Tim Jabs (rubinum) - Peter Breuls - Clément R. (clemrwan) - - ADmad + - Osayawe Ogbemudia Terry (terdia) + - tamcy + - casdal + - Janusz Jabłoński (yanoosh) + - chillbram + - Alexey Buyanow (alexbuyanow) + - Cosmin-Romeo TANASE + - Pedro Silva + - Piergiuseppe Longo - Mark Beech (jaybizzle) - - Steffen Persch (n3o77) + - Pavel Prischepa - Serhii Smirnov - Darryl Hein (xmmedia) - Xavier REN - thib92 - Francisco Facioni (fran6co) - karl.rixon - - Vladislav (simpson) - - Alexis MARQUIS - - Benjamin Dos Santos + - Pierre-Henry Soria 🌴 (pierrehenry) + - Hoffmann András + - ncou + - Vlad Dumitrache + - Enrico Schultz + - Markus Baumer + - Rafał Toboła - Normunds - Derek Lambert (dlambert) - - Daniel Tiringer - - Edvinas Klovas - - Ahmad El-Bardan - - Bojan - - Yann Rabiller (einenlum) - - Tomasz Szymczyk (karion) - - Tarjei Huse (symfony_cloud) + - Nicolas Lemoine + - Paul Matthews + - TheMhv + - Imangazaliev Muhammad (imangazaliev) + - Kirill Lazarev + - Matt Daum (daum) + - kwiateusz + - Daniel Tiringer + - Siebe Vanden Eynden + - Ahmad El-Bardan + - Bojan + - Giuseppe Campanelli + - Rene de Lima Barbosa (renedelima) + - Marcin Szepczynski (szepczynski) + - Yannick Vanhaeren (yvh) + - Jens Hatlak + - Guillaume Loulier (guikingone) + - Yann Rabiller (einenlum) + - Tomasz Szymczyk (karion) + - Jeremy Bush - Jiri Velek - d.huethorst - Dan Wilga - Bouke Haarsma - Laurens Laman - - Tobias Genberg (lorceroth) + - Matt Ketmo (mattketmo) - Mauricio Lopez (diaspar) - - Andriy + - Łukasz Makuch + - Arek Bochinski + - Vacheslav Silyutin + - Sam Williams + - Sajad Torkamani + - Gary Houbre (thegarious) + - shdev + - Rafael Tovar + - Ostrzyciel + - Tadcka + - wiseguy1394 + - Sergiy Sokolenko - karolsojko + - Cedrick Oka + - Gerrit Addiks + - Sven Nolting + - Victor Truhanovich (victor_truhanovich) - Kasperki - Peter Gribanov - - Guillaume Smolders (guillaumesmo) + - Jules Lamur - Daniel Strøm - - Vlad Dumitrache - Cristobal Dabed - - changmin.keum + - Adoni Pavlakis (adoni) - Martijn Croonen - Patrik Patie Gmitter - - Benjamin BOUDIER + - Kim Laï Trinh + - Peter Orosz (ill_logical) + - Hubert Moreau (hmoreau) + - Daniel Bannert + - Dominik Schwind (dominikschwind) - Thomas Jarrand - alsar - - Konrad Mohrfeldt + - Gerben Wijnja - roog - - Enrico Schultz + - Eric Krona + - Flinsch - Qingshan Luo - - Peter Jaap Blaakmeer - - Kubicki Kamil (kubik) - - Nicolas Badey (nico-b) - - Amin Hosseini (aminh) - - Daniel Londero (dlondero) + - Agata + - Joan Cruz - David Vancl - - tarlepp - - Götz Gottwald + - Sylvain METAYER + - jannick-holm + - Amin Hosseini (aminh) + - George Yiannoulopoulos + - Mateusz Lerczak + - William Thomson (gauss) + - Karim - BiaDd - Christian Neff (secondtruth) - - Mdsujansarkar - Ivan Pepelko (pepelko) - Cesar Scur (cesarscur) - - tirnanog06 + - Sergey Stavichenko (sergey_stavichenko) - Ludek Stepan - Kamil Musial - Denis Yuzhanin - Patrick Luca Fazzi (ap3ir0n) - - AntoineDly + - DaikiOnodera + - AbdelatifAitBara + - James Cowgill - Camille Islasse - - Andrey Ryaguzov + - Raito Akehanareru (raito) - k-sahara - Sergey Yuferev - Michal Forbak - - Ramazan APAYDIN (rapaydin) - - Noel Light-Hilary - - jean pasqualini (darkilliant) + - satalaondrej + - Pitchaya Boonsarngsuk - Cédric Lahouste (rapotor) - - Alexis + - Gautier Deuette - Wojciech Gorczyca - - Eugene Babushkin (warl) - - afaricamp + - Dmytro Liashko + - everyx - Florian Cellier - - DerStoffel - Luís Cobucci (lcobucci) - - Agata + - tamar peled - Jon Green (jontjs) - - Uwe Kleinmann - - Taras Girnyk - - Jeremy Benoist + - Ilya Vertakov - j0k (j0k) - Cyrille Bourgois (cyrilleb) - Juga Paazmaya - zcodes - - Jens Hatlak - - Oz (import) - - Jeremiah VALERIE + - Sorin Gitlan (forapathy) + - Marvin Butkereit - JG (jege) - dangkhoagms (dangkhoagms) - chesteroni (chesteroni) @@ -1738,161 +1802,118 @@ The Symfony Connect username in parenthesis allows to get more information - Brian Freytag - Daniel Perez Pinazo (pitiflautico) - Shiro - - Alexis Lefebvre - - Guilain (guilain_sylapps) - - Yannick Bensacq (cibou) + - František Bereň - Paul L McNeely (mcneely) - - Dan (dantleech) - - Michael Schneider + - Silvio Ginter - spdionis - - Guillem Fondin (guillemfondin) + - Tadas Gliaubicas (tadcka) - Pablo Ogando Ferreira - - Juanmi Rodriguez Cerón - - Abdul.Mohsen B. A. A - - Rein Baarsma (solidwebcode) - - Pascal Hofmann - - Guillaume Loulier (guikingone) - - Łukasz Makuch - - Arek Bochinski + - Mostafa - Frankie Wittevrongel - Karel Syrový - - Mati Kochen (mtk) - Stefan Graupner (efrane) - Jérôme Dumas - - Anna Damm - - Wissame MEKHILEF - Haritz - povilas - Kevin Herrera (kherge) - - Helmut Januschka - - Sjoerd Adema - - Jan Pech (pechynho) - - Jonas Claes - - Osayawe Ogbemudia Terry (terdia) + - Loenix + - Yannick + - excelwebzone + - Jean de La Bédoyère + - Tobias Speicher - Oliver Hoff - - Guillermo Gisinger (t3chn0r) - - jannick-holm + - Bert Hekman + - Christian Wahler (christian) - Kevin Decherf - - Vacheslav Silyutin - - Maksym Romanowski (maxromanovsky) - - casdal - - Cosmin-Romeo TANASE - - Andrew Marcinkevičius (ifdattic) + - Aleksei Lebedev + - Andreas Forsblom (aforsblo) - Alberto Pirovano (geezmo) - - Pavel Prischepa + - marbul - Dcp (decap94) - - Imangazaliev Muhammad (imangazaliev) - Peter Simoncic - - Pierre-Henry Soria 🌴 (pierrehenry) + - Andrei O - Sébastien Decrême (sebdec) - - ncou + - Pierre Dudoret - Tiago Garcia (tiagojsag) - - Audain - - René Landgrebe + - Ambroise Maupate - Jozef Môstka (mostkaj) - - Tema Yud + - Xavier RENAUDIN - Roma (memphys) - Bart Baaten - Damián Nohales (eagleoneraptor) - - Antonio Mansilla - - PierreRebeilleau - - Kirill Lazarev - - Matt Daum (daum) - - Markus Baumer - - Cedrick Oka - - Gerrit Addiks - - scourgen hung (scourgen) - - Rene de Lima Barbosa (renedelima) - - Marcin Szepczynski (szepczynski) - - Yannick Vanhaeren (yvh) - - Ronny López (ronnylt) - - m.chwedziak - - Nicolas Lemoine - - kwiateusz + - cthulhu + - Albert Ganiev (helios-ag) + - Stefan Moonen + - Ismail Faizi (kanafghan) + - Oleh Korneliuk + - Linas Ramanauskas + - Vlad Gapanovich (gapik) - jonmldr - Arnaud Buathier (arnapou) - ollie harridge (ollietb) + - Nicolas A. Bérard-Nault - Andre Eckardt (korve) - Florent SEVESTRE (aniki-taicho) - - Nicolas A. Bérard-Nault - - Mephistofeles + - Julia - Willem Mouwen - - Giuseppe Campanelli - - Matt Ketmo (mattketmo) - - Dominik Ritter (dritter) - - Julien JANVIER (jjanvier) + - gazi04 - neFAST - - Sam Williams - - tamcy - - Tadcka - - Janusz Jabłoński (yanoosh) + - Greg Korba + - SnakePin + - Dionysis Arvanitis + - Valmont Pehaut-Pietri (valmonzo) + - Sylvain Dherbecourt - Nicolas Bastien (nicolas_bastien) - - Peter Orosz (ill_logical) - - Victor Truhanovich (victor_truhanovich) - - Marcos Labad - - Muhammad Elhwawshy + - Erwin Dirks + - Kirill Nesmeyanov (serafim) + - Philip Dahlstrøm - Ahmed Shamim Hassan (me_shaon) - Nasim - Rémi Leclerc - Gil Hadad - - Andreas Allacher + - Andreas Heigl (heiglandreas) - Sébastien COURJEAN - - Jan Dobrovodský (j-dobr) + - Felix Eymonot (hyanda) - Eric Hertwig - - chillbram - - Alexey Buyanow (alexbuyanow) - - Adoni Pavlakis (adoni) - - Pedro Silva - - Piergiuseppe Longo - - Danilo Silva - Kirill Saksin + - Mario Young + - Albion Bame (abame) + - Tijs Verkoyen + - Gustavo Adrian + - Clément Bertillon (skigun) + - Łukasz Giza (destroyer) + - Danilo Silva - Klaas Naaijkens - Sergey Novikov (s12v) - bch36 - - Michael Zangerle + - Knallcharge - Andrii Boiko - - Michael Nelson + - Ali Tavafi + - Juan Ases García (ases) + - Piotr Zajac + - Sylvain Lorinet + - markusu49 - Florian Morello - Stefano A. (stefano93) - - Albert Ganiev (helios-ag) - - Stefan Moonen - - Ismail Faizi (kanafghan) - - Colin Michoudet - - Hubert Moreau (hmoreau) - - Gerben Wijnja - - Vyacheslav Slinko - - Silvio Ginter - - Aaron Somi - - Marcin Twardowski - - BrokenSourceCode - - Ostrzyciel - - Knallcharge - Roger Webb - - Sven Nolting - - George Yiannoulopoulos - - Sergey Stavichenko (sergey_stavichenko) - - satalaondrej - - CarolienBEER - - Erwin Dirks - - Pitchaya Boonsarngsuk - - Philip Dahlstrøm - - Jordi Kroon + - Dmitry Hordinky - Konstantin S. M. Möllers (ksmmoellers) - Emre YILMAZ + - iamvar + - Samuel Vogel (samuelvogel) + - moldcraft - Lenar Lõhmus - v.shevelev - Georgi Georgiev - - Gautier Deuette - - Bogdan - - Dmytro Liashko - - Albion Bame (abame) - - Fabien Perroquin + - Rares Sebastian Moldovan (raresmldvn) - raplider - llupa - Daniel Kay (danielkay-cp) - Matthias Larisch - Evgeniy Koval - - Tadas Gliaubicas (tadcka) + - Michal Čihař + - evgkord + - Radek Wionczek (rwionczek) - Farid Jalilov - Jeroen van den Nieuwenhuisen - Abderrahman DAIF (death_maker) @@ -1901,1914 +1922,1927 @@ The Symfony Connect username in parenthesis allows to get more information - Sam Malone - Eno Mullaraj (emullaraj) - Shaun Simmons - - Bert Ramakers - - Martin Komischke - - Mostafa - - Constantine Shtompel + - Gaylord Poillon (gaylord_p) + - robmro27 + - Valouleloup + - Christoforos Ntafos - Neagu Cristian-Doru (cristian-neagu) - Jordan de Laune (jdelaune) - Frank Naegler - - Martin Schophaus (m_schophaus_adcada) + - Valentin VALCIU - Bruno BOUTAREL - Mark van den Berg + - Thierry Marianne - Danish Translation Contributor - Yorkie Chadwick (yorkie76) - - ivelin vasilev - vlechemin - Elías (eliasfernandez) + - Ken Stanley + - Máximo Cuadros (mcuadros) + - Edwin + - Per Modin + - abulford + - André Matthies + - Htun Htun Htet (ryanhhh91) + - Kamil Piwowarski (cyklista) + - uncaught + - Yurun + - SuRiKmAn + - Johannes Müller (johmue) + - Wouter de Wild + - Orestis + - Norbert Schultheisz + - Felipy Amorim (felipyamorim) + - gr1ev0us + - Tayfun Aydin - Patricia Wagner - Romain - Sebastian Göttschkes (sgoettschkes) - Arkalo2 - Anton Sukhachev (mrsuh) - - Saif Eddin G + - MGDSoft - Yasmany Cubela Medina (bitgandtter) - - Gustavo Adrian - - Clément Bertillon (skigun) - - Nathanael d. Noblet - - Pierre Rebeilleau (pierrereb) + - Olexandr Kalaidzhy + - James Michael DuPont + - vlakoff + - Marc + - David Stone + - Patrizio Bekerle + - Jonathan Hedstrom - Damon Jones (damon__jones) - - Loenix + - Cedric BERTOLINI (alsciende) - Tito Miguel Costa (titomiguelcosta) - Aurélien Fontaine - RFreij - Michał Dąbrowski (defrag) - Markus Klein - - Ken Stanley - - Tobias Speicher + - Nico Hiort af Ornäs - Franz Wilding (killerpoke) - Jesper Søndergaard Pedersen (zerrvox) - Ville Mattila - - Christian Wahler (christian) + - Guile (guile) - Christoph König (chriskoenig) - Markus Tacker - Michael Dowling (mtdowling) - - Maxcastel - - Andreas Forsblom (aforsblo) - - wiseguy1394 - - marbul - - cthulhu + - Steve Müller + - Ben Miller + - Maximilian Berghoff (electricmaxxx) - Piers Warmers - Alexandre Segura - Zuruuh - - Patrick Kaufmann + - Jérémy CROMBEZ (jeremy) - Matthew J Mucklo - - Andrei O - - Pierre Dudoret + - Vincent AMSTOUTZ (vincent_amstz) + - Kai Dederichs + - Johannes Goslar - Andras Ratz - Erik van Wingerden - - Markus Staab + - wetternest + - Maksym Pustynnikov (pustynnikov) - Rafał Treffler + - Malcolm Fell (emarref) - David Zuelke - Fabian Steiner (fabstei) - Pablo Monterde Perez (plebs) - Krzysztof Menżyk (krymen) - Foxprodev - - Oleh Korneliuk - - Vlad Gapanovich (gapik) + - shreypuranik + - Derek Stephen McLean - Talha Zekeriya Durmuş - DSeemiller - - gazi04 + - Elias Teutschländer - Vincent LEFORT (vlefort) - - Edwin - - SnakePin + - David Szkiba - Victor Garcia - - Dionysis Arvanitis - - Valmont Pehaut-Pietri (valmonzo) + - Goran (gog) + - Darius Leskauskas (darles) + - Mikko Ala-Fossi - Ivan Nemets - - Bart Wach + - Peter Gnodde - Ivan Nemets - Sören Bernstein - Koalabaerchen - - Kirill Nesmeyanov (serafim) - - Tristan Kretzer + - Hans N. Hjort + - Matt Lehner - George Bateman - - Mario Young + - Daniil Gentili - DidierLmn - remieuronews - julien_tempo1 (julien_tempo1) - David Christmann - Christian Flach (cmfcmf) - - Łukasz Giza (destroyer) + - Nicolas Bondoux (nsbx) - Marcel Siegert - curlycarla2004 - Moza Bogdan (bogdan_moza) - Zacharias Luiten - Halil Hakan Karabay (hhkrby) - - MiBo + - Arne Groskurth - Loïc Vernet (coil) - - sualko - - Sema - - Muharrem Demirci (mdemirci) - - Piotr Zajac - - Rich Sage - - Sezil + - Claude + - Marc Bennewitz + - Stefano Cappellini (stefano_cappellini) + - Ilya Biryukov (ibiryukov) + - Josef Hlavatý + - Jessica F Martinez + - johnstevenson + - Thomas Citharel (tcit) + - Paweł Stasicki - sensio - - Kovacs Nicolas - - markusu49 + - dantleech + - Robert Worgul - Felix Marezki - - Philippe Pichet - - Rares Sebastian Moldovan (raresmldvn) - - Michal Čihař - - ElisDN + - Steve Müller + - Michael Olšavský + - riadh26 + - Alexander Cheprasov + - Zoli Szabó (zoliszabo) - Víctor Mateo (victormateo) + - Ninos + - phc + - Artfaith + - Tomas Kmieliauskas + - hamza - Serge (nfx) - Stano Turza + - Florian Pondepeyre + - Ala Eddine Khefifi (nayzo) + - Farhad Hedayatifard - Per Sandström (per) - - Jiri Korenek - - evgkord - devel + - Athorcis + - Emmanuel Vella (emmanuel.vella) + - Alexandre Beaujour + - Abudarham Yuval - Thomas Baumgartner (shoplifter) - nyro (nyro) - ssilatel - - voodooism + - Cantepie + - seho-nl + - Christian López Espínola (penyaskito) + - Anton (bonio) - Moritz Kraft (userfriendly) - - Radek Wionczek (rwionczek) + - Brian Corrigan + - Nicolas + - Lukas Naumann + - Thomason, James + - Adam Elsodaney (archfizz) - Adrien Samson (adriensamson) - Yevgen Kovalienia - Aurimas Rimkus (patrikas) + - Caligone + - Alexandru Bucur + - Chris Maiden (matason) + - goabonga + - Vladislav Rastrusny (fractalizer) + - Grayson Koonce + - Elliot Anderson (elliot) + - Michael Lively (mlivelyjr) + - Jake Bishop (yakobeyak) + - Adel ELHAIBA (eadel) + - Mihail Krasilnikov (krasilnikovm) + - Valentin + - Arseny Razin + - Lin Clark - Sébastien HOUZÉ - - Paul Andrieux - - Jan Eichhorn (exeu) + - Lauris Binde (laurisb) + - wallach-game + - Staormin - Alexandre Tranchant (alexandre_t) - - Valouleloup - - Thierry Marianne + - Sébastien HOUZE + - Ignacio Alveal - Xesau - Grégory Pelletier (ip512) - - abulford - - Anton Zagorskii - - Johannes Müller (johmue) - - alanzarli - - dima-gr - - Nicolas Le Goff (nlegoff) - - Paul Mitchum (paul-m) - - pdragun + - David Lumaye (tux1124) + - Drew Butler + - Morimoto Ryosuke + - Laurent Negre (raulnet) + - neghmurken + - Iain Cambridge + - Joe Springe + - Drew Butler + - Peter Mead (petermead) + - Nicolas ASSING (nicolasassing) + - Kamil Madejski (kmadejski) + - Michael Orlitzky - Jeremy Benoist - - hamza - - Olexandr Kalaidzhy - - Joseph Maarek - - Juan Luis (juanlugb) - - Joseph FRANCLIN - - DerManoMann - - Matěj Humpál - - Eric Schildkamp - - Simon Müller (boscho) - - Guillaume Aveline - - Gabriel Moreira - - James Michael DuPont - - WaiSkats - - David Joos (djoos) - - Arnau González - - Marc - - Bjorn Twachtmann (dotbjorn) - - Justin Rainbow (jrainbow) - - Julien Pauli - - uncaught - - Vitalii - - Almog Baku (almogbaku) - - Stephen Lewis (tehanomalousone) - - azine - - Denys Voronin (hurricane) - - Tom Maguire - - Max Voloshin (maxvoloshin) - - Troy McCabe - - Eric Grimois - - Cedric BERTOLINI (alsciende) - - sebastian - - Jos Elstgeest - - Blackfelix - - Agustin Gomes - - Tobias Rautenkranz - - Maxim Lovchikov - - orlovv - - Pablo Schläpfer - - Nico Hiort af Ornäs - - Guile (guile) - - PaoRuby - - Warwick - - Ben Miller - - Jovan Perovic (jperovic) - - Joel Marcey - - Pavinthan - - Milos Colakovic (project2481) - - Emmanuelpcg - - Wouter Diesveld - - Peter Smeets (darkspartan) - - Maximilian Berghoff (electricmaxxx) - - Tero Alén (tero) - - Eric J. Duran - - Helmer Aaviksoo - - georaldc - - Jeroen de Boer - - Robert-Jan de Dreu - - Ruslan Zavacky (ruslanzavacky) - - baron (bastien) - - simbera - - Nicolas Schwartz (nicoschwartz) - - Nick Stemerdink - - Marco Jantke - - ondrowan - - Stanislav Gamaiunov (happyproff) - - Ronny (big-r) - - Bruno Nogueira Nascimento Wowk - - Antonio Angelino - - Dmitriy Tkachenko (neka) - - Alexander Menk - - Ruben Jansen - - HADJEDJ Vincent (hadjedjvincent) - - Johannes Goslar - - Swen van Zanten - - inwebo veritas (inwebo) - - Laurent Bachelier (laurentb) - - martijn - - Kai Dederichs - - Bárbara Luz - - root - - Sven Scholz - - Cayetano Soriano Gallego (neoshadybeat) - - Bruno Ziegler (sfcoder) - - Karl Shea - - shreypuranik - - Radoslaw Kowalewski - - Derek Stephen McLean - - Mateusz Lerczak - - Miloš Milutinović - - Elias Teutschländer - - Cantepie - - Marie Minasyan (marie.minassyan) - - Ahmed HANNACHI (tiecoders) - - David Szkiba - - psampaz (psampaz) - - Roromix - - Mathias Geat - - Jakub Vrána - - wetternest - - Nicolas Sauveur (baishu) - - Matthieu Prat - - Elliot Anderson (elliot) - - Goran (gog) - - Jake Bishop (yakobeyak) - - William Thomson (gauss) - - Adel ELHAIBA (eadel) - - Mihail Krasilnikov (krasilnikovm) - - Valentin - - David Lumaye (tux1124) - - Tischoi - - Jeffrey Cafferata (jcidnl) - - Florian Guimier - - Juan Gonzalez Montes (juanwilde) - - Mikko Ala-Fossi - - Adrian Olek (adrianolek) - - Hans N. Hjort - - Dale.Nash - - Frank Jogeleit - - mwos - - Nil Borodulia - - Matt Lehner - - emilienbouard (neime) - - Valentin Barbu (jimie) - - Maksym Pustynnikov (pustynnikov) - - François Poguet - - John Nickell (jrnickell) - - cay89 - - Troy Crawford - - Benoit Lévêque (benoit_leveque) - - Michael Orlitzky - - Matthias Perret (mp3000mp) - - Maxime AILLOUD (mailloud) - - Julien Bianchi (jubianchi) - - dened - - Andrea Quintino (dirk39) - - Michael Olšavský - - Athorcis - - Jens Schulze - - Sylvain Just - - Chris Tickner - - Ernest Hymel - - Daniil Gentili - - Zander Baldwin - - Wojciech Zimoń - - Oxan van Leeuwen - - Anatol Belski - - gedrox - - Zachary Tong (polyfractal) - - Carsten Eilers (fnc) - - Abdulkadir N. A. - - Sebastian Ionescu - - Alexandru Patranescu - - Daniele Cesarini (ijanki) - - MGatner - - Vic D'Elfant (vicdelfant) - - Marc Lemay (flug) - - George Sparrow - - Nicolas Bondoux (nsbx) - - Alexandre Beaujour - - Caligone - - Vincent Pabst - - Arseny Razin - - Arne Groskurth + - Jakub Chábek + - Stefan Kleff (stefanxl) - Marcel Berteler - - Simon Jamain - - Marc Bennewitz + - Tomas Liubinas + - guangwu + - Nicolas Tallefourtané (nicolab) + - cybernet (cybernet2u) + - Simon / Yami - Constantine Shtompel - - Drew Butler - - Geoffrey Pécro (gpekz) + - Robin Kanters (anddarerobin) + - ging-dev + - SanderSander + - Jelizaveta Lemeševa (broken_core) + - Martin Pärtel + - ryunosuke + - Saem Ghani + - PLAZANET Pierre (pedrotroller) + - Ron Gähler (t-ronx) + - Patryk Kozłowski + - Omar Yepez (oyepez003) + - Vladislav Vlastovskiy (vlastv) + - Matthew Foster (mfoster) + - Johan Wilfer (johanwilfer) + - Peter Schultz - Alessandro Loffredo - Marco Pfeiffer - Eduardo García Sanz (coma) - - Sergio - - Michaël VEROUX - - Dr. Gianluigi "Zane" Zanettini - - Pontus Mårdnäs - - Pavel Stejskal (spajxo) - - Nicolas Appriou - - Tobias Stöckler - - ChrisC - - Ilya Biryukov (ibiryukov) - - Sergey Fokin (tyraelqp) - - Yuri Karaban - - Maxime Aknin (3m1x4m) - - michal - - SAY-5 - - zors1 - - detinkin - - Jessica F Martinez - - Robert Worgul - - sez-open - - Benjamin Ellis - - Guillaume LECERF - - riadh26 - - Artem (digi) - - Ian Littman (iansltx) - - Mathieu Morlon (glutamatt) - - Daniel Kozák - - Ilya Vertakov - - Norbert Schultheisz - - Jared Farrish - - NIRAV MUKUNDBHAI PATEL (niravpatel919) - - Alexander Cheprasov - - Victor Macko (victor_m) - - Oleksii Bulba - - Justin Reherman (jreherman) - - Miquel Fontana - - Roman Orlov - - Stéphane Seng (stephaneseng) - - Stas Soroka (stasyan) - - Stephen Clouse - - Florian Pondepeyre - - vltrof - - Martin Eckhardt - - G.R.Dalenoort - - Geoffrey Monte (numerogeek) - - Benjamin Schultz (bschultz) - - Karolis Daužickas (kdauzickas) - - Damien Fayet (rainst0rm) - - Jean de La Bédoyère - - Ala Eddine Khefifi (nayzo) - - Illia Antypenko (aivus) - - Robin Duval (robin-duval) - - Janusz Mocek - - Joas Schilling - - Jiri Falis - - Tim van Densen - - Sylvain Dherbecourt - - Abudarham Yuval - - cgonzalez - - Cyrille Jouineau (tuxosaurus) - - Nouhail AL FIDI (alfidi) - - Adam Elsodaney (archfizz) - - Andreas Heigl (heiglandreas) - - pkowalczyk - - Sjors Ottjes - - Myke79 - - Christoph Kappestein - - mboultoureau - - Bernd Matzner (bmatzner) - - Alex Niedre - - Kevin Mian Kraiker - - Markus Reinhold - - Adam Wójs (awojs) - - Nerijus Arlauskas (nercury) - - Aleksandar Dimitrov (netbull) - - Tom Newby (tomnewbyau) - - boulei_n - - matze - - Jean-Baptiste Nahan - - Michael Lively (mlivelyjr) - - Filipe Guerra - - Denis Klementjev (dklementjev) - - Alexey Vlasov - - Lin Clark - - Peter Mead (petermead) - - Dan Patrick (mdpatrick) - - Jakub Chábek - - Bikal Basnet - - johnstevenson - - Benjamin Rosenberger - - Paul Le Corre - - Mei Gwilym (meigwilym) - - muchafm - - Michael Tibben - - Nicolas Tallefourtané (nicolab) - - Manatsawin Hanmongkolchai - - Javier Espinosa (javespi) - - Evgeny Efimov (edefimov) - - Artyum Petrov - - Diego Aguiar (mollokhan) - - Asrorbek (asrorbek) - - Jochen Bayer (jocl) - - Vincent Chalamon - - Benjamin Pick - - Tom Houdmont - - Simon / Yami - - Evgeniy Tetenchuk - - gr8b - - Jorrit Schippers (jorrit) - - Jonathan Vollebregt - - Pierre-Louis LAUNAY - - Emilien Escalle - - Roman Tyshyk - - Roeland Jago Douma - - Anne-Sophie Bachelard - - Patryk Kozłowski - - Lukas Naumann - - Thomason, James - - Charles-Édouard Coste - - Stefan Kleff (stefanxl) - Fabio Panaccione - Zlatoslav Desyatnikov - Damien Vauchel (damien_vauchel) - - Benjamin Franzke - - Lane Shukhov - - Viktor Novikov (nowiko) - - Yurguis Garcia (yurguis) - - Vincent AMSTOUTZ (vincent_amstz) - - misterx + - MiBo + - Babichev Maxim (rez1dent3) + - Vladimir Vasilev (bobahvas) + - Roman Tyshyk + - alanzarli + - Severin Glöckle + - Aurélien ADAM (aadam) + - Martin Mayer (martin) + - mousezheng + - Benjamin Franzke - Volker Killesreiter (ol0lll) - - Aurelijus Rožėnas - - Elías Fernández + - ZiYao54 + - Thibaut Chieux - Felicitus - - Karim Cassam Chenaï (ka) - - mrossard - - Michael Pohlers (mick_the_big) - - Martins Eglitis + - Julien BERNARD + - Guillaume Smolders (guillaumesmo) - Simon Asika - - Jason Desrosiers - - Sébastien Lévêque (legenyes) + - Quique Porta (quiqueporta) - Gilles Gauthier + - Sergio + - Carsten Eilers (fnc) + - Dr. Gianluigi "Zane" Zanettini + - Abderrahim (phydev) + - Beth Binkovitz + - Sebastian Utz + - Harry Wiseman + - Denis Golubovskiy (bukashk0zzz) + - Eric Schildkamp + - Cyrille Jouineau (tuxosaurus) + - taiiiraaa - adenkejawen - - Alex Vasilchenko - - Steven Dubois - - Ramon Kleiss (akathos) + - Niels Robin-Aubertin + - Ibon Conesa (ibonkonesa) + - Bram Van der Sype (brammm) + - Alexey Deriyenko + - BRAMILLE Sébastien (oktapodia) - Thijs Reijgersberg - - Dmitry Hordinky + - Mike Francis + - Thomas + - Michael Pohlers (mick_the_big) + - Martins Eglitis - db306 - - Jacek Wilczyński (jacekwilczynski) - - AbdelatifAitBara - - cybernet (cybernet2u) - - Max Grigorian (maxakawizard) + - Jason Desrosiers + - Sébastien Lévêque (legenyes) - Michaël Marinetti + - Sema - Nicolas Pion - - Marek Binkowski + - Oncle Tom - Alex Silcock - - Rodolfo Ruiz - - Fabien - - Ondřej Frei - - Ivo Valchev - - Stefan Kruppa - - dmitrijivanenko - - Starfox64 - - Thibaut Chieux - - Frederik Schwan - - Alexander Zogheb - - Roy-Orbison - - Ambroise Maupate - - AmsTaFF (amstaff) - - Flavien Knuchel (knuch) - - Gemorroj (gemorroj) - - jfcixmedia - - Maerlyn - - ffd000 - - Malaney J. Hill - - Saem Ghani + - Jelle Bekker (jbekker) + - Nguyen Tuan Minh (tuanminhgp) + - Asil Barkin Elik (asilelik) + - Yurii K + - rtek + - Bikal Basnet + - Paul Mitchum (paul-m) + - pdragun + - Théo DELCEY + - Nicolas Attard (nicolasattard) + - Charles-Édouard Coste + - Arnau González + - Lane Shukhov + - Viktor Novikov (nowiko) + - Yurguis Garcia (yurguis) + - Pierre-Louis LAUNAY + - Emilien Escalle + - misterx + - Menno Holtkamp + - Anne-Sophie Bachelard + - Will Donohoe + - Aurelijus Rožėnas + - Elías Fernández + - mieszko4 + - Tema Yud + - Jacek Wilczyński (jacekwilczynski) - Dominik Hajduk (dominikalp) - Jorge Maiden (jorgemaiden) - - gstapinato + - Luca Genuzio (genuzio) + - Antonio Mansilla + - Michael Zangerle + - Michael Nelson + - Nicolas Le Goff (nlegoff) + - Joseph FRANCLIN + - Marek Binkowski + - Mbechezi Nawo + - gauss + - rhel-eo + - Kirill Roskolii + - LoginovIlya + - Mamikon Arakelyan (mamikon) + - Michal Gebauer + - Ondřej Frei + - Aharon Perkel + - Rodolfo Ruiz + - Fabien + - Joseph Maarek + - Juan Luis (juanlugb) + - DerManoMann + - Benhssaein Youssef + - Jack Wright + - Simon Müller (boscho) + - Guillaume Aveline + - Blackfelix - Jakub Caban (lustmored) - Vladimir Khramtsov (chrome) - Mathieu Dewet (mdewet) + - Luke Towers + - László GÖRÖG + - Michael Genereux + - CarolienBEER + - Peter Dietrich (xosofox) + - Tero Alén (tero) + - Botond Dani (picur) + - AmsTaFF (amstaff) + - Tischoi + - Jeffrey Cafferata (jcidnl) + - jfcixmedia + - Maksym Romanowski (maxromanovsky) + - jersoe + - Pierre Foresi (pforesi) + - Francois Martin + - Carlos Tasada + - Denis Kop + - dasmfm + - max + - Michaël VEROUX + - Nsbx + - Bogdan + - Abdulkadir N. A. + - Roman Tymoshyk (tymoshyk) + - Jonathan Gough - Jimmy Leger (redpanda) - Ahmad Mayahi (ahmadmayahi) - - Plamen Mishev (pmishev) + - Jean-François Morin-Abdullah - Camille Baronnet - Kevin Nadin (kevinjhappy) - - Dan Kadera + - Alexandru Patranescu + - Bert Ramakers + - George Sparrow + - Jan Vernieuwe (vernija) + - Sandro Hopf (senaria) + - Sam Anthony + - Illia Antypenko (aivus) + - John Edmerson Pizarra + - Matt Brunt + - Ivan Yivoff + - Olivier Laviale (olvlvl) - Ahmed EBEN HASSINE (famas23) - Olatunbosun Egberinde - - James Cowgill - andersmateusz - - Martijn Evers - - Dmitri Petmanson - - Mbechezi Nawo - - gauss - - Andy Raines - - Kirill Roskolii - - LoginovIlya - - Mamikon Arakelyan (mamikon) - - Joao Paulo V Martins (jpjoao) - - fduch (fduch) - - Nikita Starshinov (biji) + - Yannick Bensacq (cibou) + - Walter Doekes + - Laurent Clouet + - Robin Duval (robin-duval) + - Ivo Valchev + - Youpie + - wesign (inscrutable01) - Michael Simonson (mikes) - - Marcel Pociot (mpociot) - - Francesco Panina (dasas87) + - dmitrijivanenko + - Gabriel Moreira + - Flavien Knuchel (knuch) + - WaiSkats + - David Joos (djoos) + - azine + - Gijs Kunze + - Jean-Guilhem Rouel (jean-gui) + - sebastian + - Alexey Popkov + - Starfox64 - Abdiel Carrazana (abdielcs) + - RichardGuilland + - Javier + - Gemorroj (gemorroj) + - Vaidas Lažauskas - Richard van Velzen - - Daniel González Zaballos (dem3trio) - - amcastror + - Lebnik + - Holger Lösken + - ffd000 - lerminou - Eddie Abou-Jaoude (eddiejaoude) - - Marvin Bölsterli (marvinb) + - wusuopu + - j4nr6n (j4nr6n) + - Malaney J. Hill + - Francesco Panina (dasas87) + - amcastror - natechicago - - Simon Mönch - - patrickmaynard - - Frederic Godfrin - - Arkadiusz Rzadkowolski (flies) - - Martin Auswöger + - Shane McKinley + - Louis-Proffit + - Olivier Scherler (oscherler) - Ibrahim Bougaoua - - Ikko Ashimine - - dargor980 + - Joseph Deray + - Roland Franssen :) - Gerrit Drost - - jwaguet - - 2manypeople - - Lucas Bäuerle - - JuntaTom (juntatom) - - Adrian Philipp - - “teerasak” + - Bjorn Twachtmann (dotbjorn) + - Justin Rainbow (jrainbow) + - Martin Komischke + - Almog Baku (almogbaku) + - Saif Eddin G - Luis Ramirez (luisdeimos) - - Gerry Vandermaesen (gerryvdm) - - Jan Vernieuwe (vernija) - - Simone Ruggieri - - iamvar - - Anthony Ferrara - - Marco Pfeiffer - - Aharon Perkel - - Benhssaein Youssef - - xaav - - gechetspr - - Hadrien Cren (hcren) - - Matt Farmer - - dogedede - - Dmitry (staratel) - - Ondřej Mirtes (mirtes) - - gondo (gondo) + - Patrick Kaufmann + - Fernando Henrique + - Simon Ackermann + - Ismail Özgün Turan (dadeather) - Carl Julian Sauter + - Troy McCabe + - Muriel (metalmumu) + - divinity76 + - Adam + - Andrea Sprega (asprega) + - Merijn Wijngaard + - Atthaphon Urairat - David Stone - - Peter Ward - - Ferenczi Krisztian (fchris82) - - Michael Genereux - - jersoe - - Pierre Foresi (pforesi) - - Francois Martin + - mlazovla + - Xavier HAUSHERR + - Kristen Gilden - Guillaume Gammelin - - Florian Caron (shalalalala) - - Edwin Hageman - Romeo - - Jure (zamzung) - - Emmanuel Dreyfus - - Sam Anthony + - Peter Bex + - Markus Reinhold + - Nerijus Arlauskas (nercury) + - Lucas Bäuerle + - JuntaTom (juntatom) + - Adrian Philipp + - “teerasak” - czachor - - John Edmerson Pizarra - - Maxwell Vandervelde - - Helmut Hummel (helhum) - - Simon Sargeant - - wusuopu - Wouter Sioen (wouter_sioen) - - Martynas Sudintas (martiis) - - Frank Dekker - - Yiorgos Kalligeros - - Carlos Tasada - - Denis Kop - - dasmfm - - max + - Angel Fernando Quiroz Campos (angelfqc) + - Laurent Moreau + - Miquel Fontana + - Jos Elstgeest + - Cédric Girard + - Shyim - Saem Ghani - - Nsbx - - Gavin (gavin-markup) - - Eduard Bulava (nonanerz) - - Roman Tymoshyk (tymoshyk) - - j4nr6n (j4nr6n) + - Jan Dobrovodský (j-dobr) + - Thorsten Hallwas + - Guillaume Royer + - Yewhen Khoptynskyi (khoptynskyi) + - Chris de Kok + - Benjamin Bender - Sebastian Busch (sebu) - - Adam Monsen (meonkeys) + - devman1917 + - Michał Strzelecki + - Romain Geissler - Gerhard Seidel (gseidel) - - dakur - Nacho Martin (nacmartin) - - Samuel Vogel (samuelvogel) - - moldcraft + - Anton Kroshilin + - Dilek Erkut + - Ole Rößner (basster) + - Karlos Presumido (oneko) - John VanDeWeghe + - Matt Fields - Ph3nol - Bert ter Heide (bertterheide) - kurozumi (kurozumi) + - Peter Ward + - Ferenczi Krisztian (fchris82) + - Pierrick Charron - Christoph Krapp - - vlakoff + - Jeroen + - Philippe Pichet + - Ivan Tse - izenin - - Ali Tavafi - - Juan Ases García (ases) - - David Stone - - Patrizio Bekerle + - Ulrik Nielsen (mrbase) - Ionut Cioflan + - Mark de Haan (markdehaan) + - Wim Godden (wimg) + - Gustavo Adrian - Florian Bogey + - Michaël Thieulin (mthieulin) + - Wotre + - Thomas Bibaut + - darnel + - HellFirePvP + - mmokhi - Antonio Torres - Valentin - - Ryan Rogers + - Frédéric Bouchery (fbouchery) - Nardberjean - - David Windell - - Thomas Boileau (tboileau) - Tobias Anders - - koyolgecen - - Rodrigo Díez Villamuera (rodrigodiez) + - Flavian Sierk - Juliano Petronetto - - helmi - - Laurent Moreau + - Alexander McCullagh (mccullagh) + - Fabian Haase + - Shane Preece (shane) - Fabrice Locher + - Eric Grimois - David Négrier (moufmouf) - - Evgeny Anisiforov - - Aaron Piotrowski (trowski) - - Romain Geissler - Tomáš Polívka (draczris) - Yoann MOROCUTTI - - Anton Kroshilin - - Claude - - Ole Rößner (basster) - - Karlos Presumido (oneko) + - Florian Caron (shalalalala) - Arash Tabrizian (ghost098) - - Matt Fields - - Mark de Haan (markdehaan) - - Wim Godden (wimg) - - Gustavo Adrian - - Farhad Hedayatifard - - wallach-game + - Boullé William (williamboulle) + - Yiorgos Kalligeros + - Adam Monsen (meonkeys) - Simone Di Maulo (toretto460) - - Pavel Starosek (octisher) - - Wotre - - Thomas Bibaut - - darnel - - HellFirePvP - - Artyom Protaskin - - Andras Debreczeni - - Jordi Rejas - - Josef Cech - - Pierre Tachoire - - Michal Gebauer - - Klaas Cuvelier (kcuvelier) - - Maarten Nusteling (nusje2000) - - Phillip Look (plook) - - Dario Savella - - NorthBlue333 - - Thomas Chmielowiec + - cilefen (cilefen) - sarah-eit - - Anton Dyshkant - - Igor Tarasov (polosatus) + - Maarten Nusteling (nusje2000) + - Benoit Lévêque (benoit_leveque) - Tom Hart - Arnaud CHASSEUX - - Gabriel Birke - Dmytro Dzubenko + - Thomas Chmielowiec - Christian Morgan + - Thomas Hanke + - ibasaw + - Anton Dyshkant + - Gabriel Birke + - Colin Michoudet + - Tobias Rautenkranz + - Maxim Lovchikov + - orlovv + - Pablo Schläpfer - Giorgio Premi - - Romeo - - Louis-Proffit - - Olivier Scherler (oscherler) - Stephen - - Joseph Deray - - Benjamin Bender - - Muriel (metalmumu) + - PaoRuby + - Warwick - Benjamin Long - - Michał Strzelecki - - Théo DELCEY - - Nicolas Attard (nicolasattard) - - pthompson - - Randel Palu - - Elias Häußler - - Gijs Kunze - - Thomas Hanke - - yoye - - Evert Jan Hakvoort + - martkop26 + - Maxime Aknin (3m1x4m) - Pathpat - Andriy Prokopenko (sleepyboy) - Kris Buist - ReScO - - Alessandro Tagliapietra (alex88) - - Daniel Rotter (danrot) - - Mark Pedron (markpedron) - - Maciej Schmidt + - boite - Charly Terrier (charlypoppins) - Sergei Shitikov - - Paul Ferrett + - pthompson - Thanh Trần - - heccjj + - Sezil - patrick-mcdougle - - Tristan Bessoussa (sf_tristanb) - - Kajetan Kołtuniak (kajtii) - - Mark Topper - - craigmarvelley - - divinity76 - - Adam - - Tournoud (damientournoud) - - Rick Prent - - Jose Manuel Gonzalez (jgonzalez) - - Nico Hiort af Ornäs + - Carsten Nielsen (phreaknerd) - David Courtey (david-crty) - Kasper Hansen - Robert Gurau - - Alan Chen + - Artem (digi) + - Randel Palu + - Paul Ferrett + - Ian Littman (iansltx) + - Viet Pham + - Mathieu Morlon (glutamatt) + - Jovan Perovic (jperovic) + - Joel Marcey + - Pavinthan + - Milos Colakovic (project2481) + - Kantin CHARIGNON + - Jared Farrish + - Peter Smeets (darkspartan) + - Tristan Bessoussa (sf_tristanb) + - Anne-Julia Seitz + - Rick Prent - Dawid Nowak - - Mark Spink - - Pierre Rineau - - Bogdan Scordaliu - - Atthaphon Urairat - - Mo Di (modi) - - Vladimir Melnik - Mehdi Mabrouk (mehdidev) - - Arthur Woimbée - - Daan van Renterghem + - victor-prdh + - georaldc + - Zdeněk Drahoš + - qzylalala + - nerdgod + - Tomáš Korec (tomkorec) + - Kaipi Yann + - Adrien Peyre (adpeyre) + - Andre Johnson + - Peter Trebaticky + - timesince + - jc + - Renan Taranto (renan-taranto) + - Ryan Rogers - Luis Ramón López López (lrlopez) - - Per Modin - Vadim Tyukov (vatson) - - Nowfel2501 + - Chris Shennan (chrisshennan) + - Dominic Luidold + - Jeroen de Boer + - Robert-Jan de Dreu + - Marin Bînzari (spartakusmd) + - voodooism + - Nicolas Martin (cocorambo) + - Oleg Mifle + - maxime.perrimond + - Franz Liedke (franzliedke) + - Ruslan Zavacky (ruslanzavacky) + - Thomas Beaujean + - simbera + - Jakub Vrána - Franck Ranaivo-Harisoa - - Christian Seel - - Kristen Gilden - - Paul Santus - - Julius Kiekbusch - - Nikola Svitlica (thecelavi) - - sdkawata - - Artem Oliinyk (artemoliynyk) - - Ahmed Soliman (ahmedsoliman) - - André Matthies - - Htun Htun Htet (ryanhhh91) - - Jason Schilling (chapterjason) - - Kacper Gunia (cakper) - - mark burdett - - Eric Stern - - Owen Gray (otis) - - Mara Blaga - - Tobias Weinert (tweini) - - RENAUDIN Xavier (xorrox) - - Cédric Girard - - Shyim - - downace - - Pierrick Charron - - Zdeněk Drahoš - - Jeroen - - qzylalala - - Kai Eichinger - - Bailey Parker - - Adrien Chinour - - Andrew Brown - - Juan M Martínez - - Mahmoud Mostafa (mahmoud) - - Rainrider - - Tony Vermeiren (tony) - - Artem (nexim) - - Thorsten Hallwas - - Faton (notaf) - - Yewhen Khoptynskyi (khoptynskyi) - - Chris de Kok - - Arkadiusz Kondas (itcraftsmanpl) - - nerdgod - - timesince - - Jonathan Gough - - Dilek Erkut - - Sepehr Lajevardi - - Morimoto Ryosuke - - jc - - Frédéric Bouchery (fbouchery) - - victor-prdh - - Andy Stanberry - - Flavian Sierk - - Laurent Negre (raulnet) - - Renan Taranto (renan-taranto) - - neghmurken - - Iain Cambridge - - Joe Springe - - Drew Butler - - Chris Shennan (chrisshennan) - - Thomas Beaujean - - Shane Preece (shane) + - Nicolas Schwartz (nicoschwartz) - Peter Thompson (petert82) - - Alexander McCullagh (mccullagh) - - Marin Bînzari (spartakusmd) - - Asrorbek Sultanov - - Nicolas Martin (cocorambo) - - Oleg Mifle - - maxime.perrimond - - Franz Liedke (franzliedke) + - Marco Jantke + - Jason Stephens + - Nicolas Sauveur (baishu) + - Jairo Pastor + - David Windell + - Thomas Boileau (tboileau) + - James Sansbury + - Matěj Humpál + - Rodrigo Díez Villamuera (rodrigodiez) + - helmi + - henderkes + - Дмитрий Пацура - Bernard van der Esch (adeptofvoltron) - eminjk - Dennis Fehr - - Jason Stephens + - Rini Misini - robin.de.croock - Alex Carol (picard89) - - Péter Buri (burci) + - Talel Zighni - maxperei - Lyubomir Grozdanov (lubo13) - - omerida - - Jakub Simon - - Danil Khaliullin (bifidokk) - - Yohan Giarelli (frequence-web) - - Andrew Clark (tqt_andrew_clark) - - Yoann Chocteau (kezaweb) - - Oksana Kozlova (oksanakozlova) - - Jairo Pastor - - Ionel Scutelnicu (ionelscutelnicu) - - James Sansbury - - Vladislav Nikolayev (luxemate) + - Alexandre Pavy + - Jiri Falis + - Nikola Svitlica (thecelavi) + - Artem Oliinyk (artemoliynyk) + - Kacper Gunia (cakper) + - mark burdett + - Jm Aribau (jmaribau) + - Kousuke Ebihara (co3k) + - Dmitry Simushev + - martijn + - Thomas BERTRAND (sevrahk) + - Valentin PONS (valx76) + - Tom Panier (neemzy) + - Pierre Sv (rrr63) + - Christian + - Raphael de Almeida (raphaeldealmeida) + - Romain Pierre + - Dan Ordille (dordille) + - Reda DAOUDI + - Andrew Carter (andrewcarteruk) + - Thomas Dubuffet (thomasdubuffet) + - mlpo (mlpo) + - Stephanie Trumtel (einahp) + - Serhiy Lunak (slunak) + - Pontus Mårdnäs - Philipp - LubenZA - Sagrario Meneses - - henderkes - - Rini Misini + - Mohammad Eftekhari (bluemmb) + - scourgen hung (scourgen) - BilgeXA - Matthew (mattvick) - Bhujagendra Ishaya - Marcus Stöhr (dafish) + - Stanislav Gamaiunov (happyproff) + - Ronny (big-r) + - Bruno Nogueira Nascimento Wowk + - Ivo Valchev + - Dmitriy Tkachenko (neka) + - Misha Klomp (mishaklomp) + - Eric Stern + - Schvoy Norbert (schvoy) + - Phillip Look (plook) + - Dario Savella + - Owen Gray (otis) + - stollr + - Tobias Weinert (tweini) + - RENAUDIN Xavier (xorrox) + - Thomas Ploch + - Benjamin Rosenberger + - Ruben Jansen + - Stefanos Psarras (stefanos) + - Matt Wells + - Guido Donnari - Nicolas Appriou - Cláudio Cesar - Richard Čepas - - Chansig - - soyuka - - Léo VINCENT - - Frédéric G. Marand (fgm) - - Joshua Behrens (joshuabehrens) - - Aleksandr Dankovtsev - - Mert Simsek (mrtsmsk0) - - Ari Pringle (apringle) - - Karolis - - Mohammad Ali Sarbanha (sarbanha) - - Raul Rodriguez (raul782) - - Kenjy Thiébault (kthiebault) - - PLAZANET Pierre (pedrotroller) - - Andreas + - Alessandro Tagliapietra (alex88) + - Willem Verspyck + - Mark Pedron (markpedron) + - Maciej Schmidt + - Manatsawin Hanmongkolchai - Wim Molenberghs (wimm) - - Valérian Lepeule (vlepeule) - - Alexey Berezuev + - Evgeny Efimov (edefimov) + - Jonathan (grafikart) - Dmitrii Baranov - - Daniel Tschinder - - Dalibor Karlović - - RAHUL K JHA - - Roberto Guido - - martkop26 - - Safonov Nikita (ns3777k) - - aim8604 - - Szymon Tarasiński - - Sylvain Lorinet - - SuRiKmAn - - Yann LUCAS (drixs6o9) - - Fabien D. (fabd) - - Eduardo Rocha - - Brad Bayliss - - Alexandre Pavy - - Konrad - - Aaron Scherer (aequasi) + - gndk + - dened + - Adrien Chinour - Gilles Doge (gido) - - Clément - - Stakovicz + - david-binda + - Xavier Amado (xamado) + - Dustin Wilson + - Charly Goblet (_mocodo) + - Evgeniy Tetenchuk + - Yoann MOROCUTTI + - gstapinato - Paulius Jarmalavičius (pjarmalavicius) - - Romain Jacquart (romainjacquart) + - Pierre Schmitz - jack.thomas (jackthomasatl) - - Andreas Kleemann (andesk) - - Ema Panz + - Lars Ambrosius Wallenborn (larsborn) + - Jens Schulze + - Roy-Orbison - Nico Müller (nicomllr) - Charles Sanquer (csanquer) - root - Paweł Tomulik - - Julien Boudry - - Sébastien Armand (khepin) - - Niels Robin-Aubertin - - Ibon Conesa (ibonkonesa) - - Rutger Hertogh - - David Barratt + - Ulrik McArdle - Eric Caron - - Kantin CHARIGNON - - Matthew Covey - - Bermon Clément (chou666) - - Ondřej Frei + - Marvin Bölsterli (marvinb) + - Wang Jingyu + - Jaymin G + - thecaliskan + - Tomáš Votruba + - HADJEDJ Vincent (hadjedjvincent) + - Evrard Boulou + - Swen van Zanten + - Andrew Brown + - Juan M Martínez + - inwebo veritas (inwebo) + - Laurent Bachelier (laurentb) + - Maerlyn + - alekLexis + - Bárbara Luz + - Mickaël BULIARD + - Sven Scholz + - Cayetano Soriano Gallego (neoshadybeat) + - Matteo Galli - Piotr Antosik (antek88) - - David Wolter (davewww) - - Szymon Kamiński (szk) - - Sebastian Drewer-Gutland (sdg) - - Kevin Meijer - - Yurun - - Victor Prudhomme - - Léon Gersen - - Evgeny (disparity) - - Michael J - - Oleg Krasavin (okwinza) - - Ruud Seberechts - - abluchet - - Schuyler Jager (sjager) - - Nicholas Ruunu (nicholasruunu) - - Alejandro Diaz Torres - - mlazovla - - Valentin PONS (valx76) - - Dmitry Simushev - - Jorge Vahldick (jvahldick) - - Talel Zighni - - Sortex - - enekochan (enekochan) - - Max Summe - - Bastien Picharles - - Ulrik Nielsen (mrbase) - - Karim Miladi - - Andreas Hasenack - - Storkeus - - ging-dev - - Guillaume Royer - - Jelizaveta Lemeševa (broken_core) - - Martin Pärtel - - ryunosuke - - Anthony Moutte - - Ahmad Al-Naib - - Axel Venet - - Viet Pham - - Marcello Mönkemeyer (marcello-moenkemeyer) - - Aleksey Prilipko - - Willem Verspyck - - Nicolas Séverin - - devman1917 - - Jan Vernarsky - - czachor - - Axel Venet - - Ikhsan Agustian - - Ron Gähler (t-ronx) - - Nicolás Alonso - - Tomasz (timitao) - - Benedict Massolle (bemas) - - Kevin Auivinet - - Kris Kelly - - Ross Motley (rossmotley) - - Reda DAOUDI - - Andrew Carter (andrewcarteruk) - - Tomáš Korec (tomkorec) - - Kaipi Yann - - Adrien Peyre (adpeyre) - - Andre Johnson - - Peter Trebaticky - - Thomas Dubuffet (thomasdubuffet) - - Dmitry Danilson - - Dominic Luidold - - Alexander Bauer (abauer) - - Amaury Leroux de Lens (amo__) - - Matthew Foster (mfoster) - - Mark Ogilvie - - mshavliuk - - Yendric - - bill moll - - Liverbool (liverbool) - - Taras Hinyk - - fabios - - Mike Francis - - Peter Schultz - - Aleksejs Kovalovs (aleksejs1) - - Aurélien ADAM (aadam) - - Martin Mayer (martin) - - Tyler Stroud - - ureimers - - Zan Baldwin (zanderbaldwin) - - Tom Panier (neemzy) - - Pablo Eliezer - - Christian - - Raphael de Almeida (raphaeldealmeida) - - Robert Queck - - samuel laulhau (lalop) - - oscartv - - Valentin - - Christoforos Ntafos - - Abderrahim (phydev) - - Fleuv - - Maria Grazia Patteri - - Nguyen Tuan Minh (tuanminhgp) - - Asil Barkin Elik (asilelik) - - Yurii K - - Dan Ordille (dordille) - - Gregório Bonfante Borba (bonfante) - - Máximo Cuadros (mcuadros) - - Kamil Piwowarski (cyklista) - - mlpo (mlpo) - - Stephanie Trumtel (einahp) - - Serhiy Lunak (slunak) - - Stefanos Psarras (stefanos) - - Matt Wells - - Guido Donnari - - MGDSoft - - rewrit3 - - Malcolm Fell (emarref) - - Dustin Wilson - - Charly Goblet (_mocodo) - - Peter Gnodde - - Christian López Espínola (penyaskito) - - Matthew Burns - - Ilya Chekalsky - - Florent Olivaud - - Dennis Jaschinski (d.jaschinski) - - alex - - Thomas Baccelli (atomiix) - - Igor Kokhlov (verdet) - - Thomas - - Chris Maiden (matason) - - goabonga - - Rémy LESCALLIER - - Koray Zorluoglu - - Vladislav Rastrusny (fractalizer) - - Anne-Julia Seitz - - Tomáš Votruba - - phuc vo (phucwan) - - David Lima - - Beno!t POLASZEK - - Markus Thielen - - Lajos Veres (vlajos) - - Adriaan Zonnenberg - - Steve Preston - - Alexandre Fiocre (demos77) - - Malte Schlüter - - Vallel Blanco - - Fred Cox - - Mohammad Eftekhari (bluemmb) - - Ondřej Führer - - Ivo Valchev - - julien.galenski - - Brad Treloar - - Holger Lösken - - ShiraNai7 - - Misha Klomp (mishaklomp) - - Pavol Tuka - - Schvoy Norbert (schvoy) - - Lucas Bustamante - - Daniel Konstantinov - - JK Groupe - - ivan - - stollr - - Botond Dani (picur) - - Daniel Richter (richtermeister) - - Brian Freytag - - Jeffrey Moelands (jeffreymoelands) - - gndk - - Pavel Barton - - Jonas Hünig - - Johan - - Javier Alfonso Bellota de Frutos - - Walter Doekes - - Alexander Varwijk - - david-binda - - Xavier Amado (xamado) - - Youpie - - wesign (inscrutable01) - - Volker (skydiablo) - - gitlost - - Yoann MOROCUTTI - - Adrien Moiruad - - Arend-Jan Tetteroo - - Gonzalo Míguez - - Stan Jansen (stanjan) - - Bruno Rodrigues de Araujo (brunosinister) - - abunch - - Dominik Kohler - - Michal Trojanowski - - Dominik Pesch (dombn) - - g123456789l - - Matthias Neid - - ProgMiner - - Keri Henare (kerihenare) - - Toby Griffiths (tog) - - Marcin Nowak - - Hugo Sales - - alangvazq - - Tristan Pouliquen - - Olaf Klischat - - Alexandr Samuilov - - Ariel J. Birnbaum - - Adam Klvač - - Andrzej - - Mathieu TUDISCO (mathieutu) - - Pawel Smolinski - - Daniel Mecke (daniel_mecke) - - Ivo - - Christian Eikermann - - Seyedramin Banihashemi (ramin) - - Ilia Sergunin (maranqz) - - Nicolas Macherey - - Rubén Calvo (rubencm) - - Nicholas Byfleet (nickbyfleet) - - Antanas Arvasevicius - - Rénald Casagraude (rcasagraude) - - Walther Lalk - - Johannes - - Jeroen de Graaf - - Javier - - Serhii Bondarenko - - Vaidas Lažauskas - - Kevin Frantz - - guangwu - - Hugo Posnic - - Peter Zwosta - - Simon Frost - - Zayan Goripov - - michalmarcinkowski - - Henne Van Och (hennevo) - - Christiaan Wiesenekker - - Ramon Ornelas (ramonornela) - - Florian "Ori" Neveu (fnev-eu) - - Krzysztof Przybyszewski (kprzybyszewski) - - parinz1234 - - Matt Emerson - - paullallier - - Alex Demchenko - - Lars Ambrosius Wallenborn (larsborn) - - Angel Fernando Quiroz Campos (angelfqc) - - Beth Binkovitz - - Pawel Szczepanek (pauluz) - - Harry Wiseman - - Denis Golubovskiy (bukashk0zzz) - - Jelle Bekker (jbekker) - - Raphael Hardt - - Julien BERNARD - - SanderSander - - MARYNICH Mikhail (mmarynich-ext) - - Severin Glöckle - - John Doe (theboat) - - Ulrik McArdle - - Stelian Mocanita (stelian) - - AnotherSymfonyUser (arderyp) - - michael.kubovic - - rtek - - Vladislav Krupenkin (ideea) - - Adam Kiss - - Jay Severson - - BRAMILLE Sébastien (oktapodia) - - Stefano Cappellini (stefano_cappellini) - - Kévin - - Artfaith - - Nicolas - - Menno Holtkamp - - Lin Lu - - Stuart Fyfe - - Luciano Mammino (loige) - - Lachlan Arthur - - Gerard Berengue Llobera (bere) - - Daniele Orru' (danydev) - - Simon Bouland (bouland) - - Chris - - Frederik Schmitt - - ged15 - - Albert Bakker (babbert) - - Peter Dietrich (xosofox) - - Tomaz Ahlin - - Ahto Türkson - - arduanov - - Serhii Polishchuk (spolischook) - - Viktoriia Zolotova - - Michael Gwynne - - Ivan Tse - - Marco - - Vincent - - Amine Matmati - - Tom Kaminski - - mlievertz - - Emirald Mateli - - Aarón Nieves Fernández - - Linnaea Von Lavia - - Marc Jauvin - - Jaymin G - - Jorge Martin (jorgemartind) - - thecaliskan - - Konstantin Chigakov - - Evrard Boulou - - Alex Plekhanov - - Brian Graham (incognito) - - Julien Sanchez (sumbobyboys) - - Anamarija Papić (anamarijapapic) - - es - - Lebnik - - Anton Babenko (antonbabenko) - - bahram - - Wim Hendrikx - - Arrilot - - Philippe Degeeter (pdegeeter) - - Jean-Guilhem Rouel (jean-gui) - - Ben Oman - - Alexey Popkov - - Andrew Coulton - - Jonathan Poston - - Дмитрий Пацура - - Marcus Jaschen - - Kousuke Ebihara (co3k) - - Wang Jingyu - - Giuseppe Arcuti - - Jan Pintr - - linh - - Daniel Basten (axhm3a) - - Mario Blažek (marioblazek) - - Kevin Vergauwen (innocenzo) - - benkarrer-lab - - Thomas BERTRAND (sevrahk) - - Bart Reunes (metalarend) - - Ahmed Abdou - - Bruno Baguette - Ioana Hazsda (ioana-hazsda) - - Patrick Berenschot - - Mihai Nica (redecs) - - boite - - Arrakis (arrakis) - - alekLexis - - Matteo Galli - - Ovidiu Gabriel Gireada (ovidiugireada) - - Dmitrii Lozhkin - - Penny Leach - - Antoine (antoinela_adveris) - - xdavidwu - - benatespina (benatespina) - - Carsten Nielsen (phreaknerd) - - brian978 - - Ivan Tse - - Till Hörner - - Baptiste Leduc (bleduc) - - Dennis Smink (dsmink) - - Brandon Antonio Lorenzo - - Curtis (ccorliss) - - Peter van Dommelen - - inspiran - - Nicolas Valverde - - Kevin Verschaeve (keversc) - - dlorek - - Jérôme Nadaud (jnadaud) - - j.schmitt - - Simon Ackermann - - Thomas Ferney (thomasf) - - toxxxa - - djama - - Arvids Godjuks (psihius) - - Paul Clegg (clegginabox) - - Jeremy Bush - - Philipp Hoffmann (philipphoffmann) - - Gary Houbre (thegarious) - - shdev - - Jody Mickey (jwmickey) - - František Bereň - - Yannick - - excelwebzone - - Choong Wei Tjeng (choonge) - - Bert Hekman - - Maciej Zgadzaj - - Kevin EMO - - Fraller Balázs (fracsi) - - Vincent Godé - - Jordi Llonch (jordillonch) - - Linas Ramanauskas - - Julia - - Greg Korba - - Your Name - - Ismo Vuorinen - - Stefan Koopmanschap - - Pedro Magalhães (pmmaga) - - Maxime PINEAU - - Rik van der Heijden - - Orestis - - Felipy Amorim (felipyamorim) - - Jordan Hoff - - gr1ev0us - - Tayfun Aydin - - karstennilsen - - Jonathan Hedstrom - - Steve Müller - - NothingWeAre - - Alan Scott - - Emmanuel Vella (emmanuel.vella) - - Kirk Madera - - Citia (citia) - - Oliver Eglseder - - Dan Harper - - mindaugasvcs - - Alexey Deriyenko - - Alexandre Melard - - David Ronchaud - - Artem Kolesnikov (tyomo4ka) - - Christian Schiffler - - Dariusz Czech - - Sait KURT - - adars - - Paweł Stasicki - - Nicolas ASSING (nicolasassing) - - Kamil Madejski (kmadejski) + - Bruno Ziegler (sfcoder) + - Karl Shea + - Radoslaw Kowalewski + - Victor Macko (victor_m) + - Jérôme Nadaud (jnadaud) + - Marie Minasyan (marie.minassyan) + - Ahmed HANNACHI (tiecoders) + - Philipp Hoffmann (philipphoffmann) + - psampaz (psampaz) + - Martijn Evers + - Mathias Geat + - Andy Raines + - Jody Mickey (jwmickey) + - Sebastian Drewer-Gutland (sdg) + - Victor Prudhomme + - Léon Gersen + - Evgeny (disparity) + - Michael J + - Oleg Krasavin (okwinza) + - Choong Wei Tjeng (choonge) + - Jordi Llonch (jordillonch) + - Your Name + - Baptiste Leduc (bleduc) + - dargor980 + - Jakub Simon + - Antonio Angelino + - Florian Guimier + - Alexander Menk + - Nicholas Ruunu (nicholasruunu) + - Matt Farmer + - Juan Gonzalez Montes (juanwilde) + - dogedede + - Adrian Olek (adrianolek) + - gondo (gondo) + - Dale.Nash + - phuc vo (phucwan) + - Eduard Bulava (nonanerz) + - Patrick Berenschot + - Beno!t POLASZEK + - Markus Thielen + - Lajos Veres (vlajos) + - Adriaan Zonnenberg + - Danil Khaliullin (bifidokk) + - Yohan Giarelli (frequence-web) + - Andrew Clark (tqt_andrew_clark) + - Yoann Chocteau (kezaweb) + - Oksana Kozlova (oksanakozlova) + - Dan Kadera + - matze + - Alexandre Fiocre (demos77) + - jwaguet + - mwos + - Nil Borodulia + - Laurent Legaz + - Nikita Starshinov (biji) - Gusakov Nikita (hell0w0rd) - - Ksaveras Šakys (xawiers) - - Vedran Mihočinec (v-m-i) - - MrNicodemuz - - Gunnar Lium (gunnarlium) - - Steve Hyde - - Skorney + - Jorge Vahldick (jvahldick) + - Storkeus + - Andy Stanberry + - emilienbouard (neime) + - Evert Jan Hakvoort + - François Poguet - Soha Jin - - Sebastian Schwarz - - Matthieu - - Tomas Liubinas - - kaiwa - - CDR - - Roman Igoshin (masterro) + - Vallel Blanco + - Gerry Vandermaesen (gerryvdm) - Miguel Vieira - - ConneXNL - - Jules Matsounga (hyoa) - - Nick Chiu - - Jonny Schmid (schmidjon) - - Manuele Menozzi - - Yann (yann_eugone) - - Martin Mandl (m2mtech) - - Benjamin Paap (benjaminpaap) - - calm329 - - Dave Heineman (dheineman) + - Ondřej Mirtes (mirtes) + - Daniel Richter (richtermeister) + - Brian Freytag + - Maxwell Vandervelde - Taylor Otwell - - Antoine Beyet - - Vladimir Belozyorov + - Pavel Barton + - Jonas Hünig + - Johan + - Javier Alfonso Bellota de Frutos + - Adrien Moiruad + - Arend-Jan Tetteroo + - Gonzalo Míguez + - Ionel Scutelnicu (ionelscutelnicu) + - Helmut Hummel (helhum) - Adrian - - InbarAbraham - - Ismail Özgün Turan (dadeather) - - Thomas Rothe + - cay89 + - Troy Crawford + - Anthony Moutte + - Ahmad Al-Naib + - Paul Santus + - Jeremy Pollard + - Raphael Hardt + - soyuka + - Gavin (gavin-markup) + - Frédéric G. Marand (fgm) + - Raul Rodriguez (raul782) + - koyolgecen - Vladimir Chernyshev (volch) - - Andrea Sprega (asprega) - - Albert (aprat84) - - Shaun Simmons - - Wojciech Sznapka - - Jan Marek (janmarek) - - Jeroen De Dauw (jeroendedauw) + - Mihai Nica (redecs) - Thomas Chmielowiec (chmielot) + - Kajetan Kołtuniak (kajtii) + - Aaron Piotrowski (trowski) + - Pavel Starosek (octisher) - Patrick Carlo-Hickman - - chispita + - Martins (kevin_martins) + - benatespina (benatespina) + - Vladimir Melnik + - Mark Spink + - Mo Di (modi) + - yoye + - Bruno Rodrigues de Araujo (brunosinister) + - abunch + - Plamen Mishev (pmishev) + - Michal Trojanowski + - Toby Griffiths (tog) + - Marcin Nowak + - Hugo Sales + - Andrea Quintino (dirk39) + - czachor + - Sylvain Just + - Chris Tickner + - Joas Schilling + - Arthur Woimbée + - Daan van Renterghem + - Nowfel2501 + - Ernest Hymel + - Dmitry Danilson + - alangvazq + - Mark Topper + - Olaf Klischat + - xaav + - Ariel J. Birnbaum + - Dominik Kohler + - Andrzej + - Pierre Rineau + - Simon Mönch + - Mathieu TUDISCO (mathieutu) + - Pawel Smolinski + - Julius Kiekbusch + - Ivo + - cgonzalez + - Christian Eikermann + - Zander Baldwin + - Wojciech Zimoń + - Oxan van Leeuwen + - Anatol Belski + - gedrox + - Zachary Tong (polyfractal) + - sdkawata + - Daniel Rotter (danrot) + - Sebastian Ionescu + - Ikhsan Agustian + - Kenjy Thiébault (kthiebault) + - Roeland Jago Douma + - Nicolas Macherey + - Rubén Calvo (rubencm) + - Nicholas Byfleet (nickbyfleet) + - Antanas Arvasevicius + - Rénald Casagraude (rcasagraude) + - Walther Lalk + - Kevin Frantz + - downace + - Kai Eichinger + - Tomasz (timitao) + - Daniele Cesarini (ijanki) + - Bailey Parker + - Mahmoud Mostafa (mahmoud) + - Vic D'Elfant (vicdelfant) + - Marc Lemay (flug) + - Joshua Behrens (joshuabehrens) - Andrei Mateescu - - SALMERON Valentin (vasal) + - Tony Vermeiren (tony) + - Pavel Stejskal (spajxo) + - Nicolas Appriou + - Tobias Stöckler + - ChrisC - allison guilhem - - Marin Nicolae - - Vitali Tsyrkin - - sam-bee - Andrii Serdiuk (andreyserdjuk) - - Uladzimir Tsykun - - Oleg Sedinkin (akeylimepie) - Adrian Brajkovic - - Joris Garonian (grifx) - - WoutervanderLoop.nl + - Kris Kelly + - Ross Motley (rossmotley) + - Amaury Leroux de Lens (amo__) + - Dalibor Karlović - Florian Pondepeyre - - Pchol - - Luca Genuzio (genuzio) - - Rafael Tovar - - rhel-eo - - Jack Wright - - Andrey Helldar - - mmokhi - - Simon Paarlberg (blamh) + - Roberto Guido + - Sergey Fokin (tyraelqp) - Nikita Popov (nikic) - - Daniel Kolvik (dkvk) + - Simon Frost + - Artem (nexim) + - michalmarcinkowski + - Faton (notaf) + - Christiaan Wiesenekker + - Ramon Ornelas (ramonornela) + - Alexander Bauer (abauer) + - Krzysztof Przybyszewski (kprzybyszewski) + - Yuri Karaban + - Xeno Suter + - michal + - oscartv + - Valentin + - mshavliuk + - G/ + - Maria Grazia Patteri + - zors1 + - detinkin + - Taras Hinyk + - fabios + - sez-open + - Benjamin Ellis + - Guillaume LECERF - jim - - Hein Zaw Htet™ - - Pierre Geyer (ptheg) - - steveYeah - - ergiegonzaga - - Kurt Thiemann - - avi123 + - Patrick Janzen + - Asrorbek Sultanov + - Péter Buri (burci) + - Lin Lu + - Rainrider + - omerida + - parinz1234 + - Yann LUCAS (drixs6o9) + - Daniel Kozák + - NIRAV MUKUNDBHAI PATEL (niravpatel919) - xammmue - - Nicolas Jourdan (nicolasjc) - - pizzaminded + - Vladislav Nikolayev (luxemate) + - Oleksii Bulba + - Justin Reherman (jreherman) + - Chansig + - Roman Orlov + - Stéphane Seng (stephaneseng) + - Stas Soroka (stasyan) + - Stephen Clouse - Chris Tiearney - - JakeFr - - Stephan Wentz (temp) - - César Suárez (csuarez) - - Olivier Laviale (olvlvl) - - Dariusz Ruminski - - demeritcowboy + - vltrof + - Matt Emerson + - paullallier + - Martin Eckhardt + - G.R.Dalenoort + - Geoffrey Monte (numerogeek) + - Benjamin Schultz (bschultz) + - Karolis Daužickas (kdauzickas) + - Damien Fayet (rainst0rm) + - Léo VINCENT - Shrey Puranik - - zolikonta - Radosław Benkel + - CDR + - Janusz Mocek + - Fabien D. (fabd) + - Aleksandr Dankovtsev + - Valérian Lepeule (vlepeule) - Sergii Dolgushev (sergii-swds) + - Konrad + - Aaron Scherer (aequasi) + - Clément + - Mohammad Ali Sarbanha (sarbanha) + - Sébastien Armand (khepin) + - Alexey Berezuev + - rewrit3 + - Matthew Burns + - Ilya Chekalsky + - aim8604 + - Tim van Densen + - Jelte Steijaert (jelte) + - Andreas + - Monere + - Simon Sargeant + - pkowalczyk + - Sjors Ottjes + - Myke79 + - Christoph Kappestein + - mboultoureau + - Bernd Matzner (bmatzner) + - Alex Niedre + - Adam Wójs (awojs) + - Ema Panz + - MARYNICH Mikhail (mmarynich-ext) + - shreyadenny + - Daniel Tschinder + - David Wolter (davewww) + - AnotherSymfonyUser (arderyp) - Goran Juric + - Daniel González Zaballos (dem3trio) + - Alejandro Diaz Torres + - Aleksandar Dimitrov (netbull) + - Tom Newby (tomnewbyau) + - boulei_n + - Axel Venet + - Jean-Baptiste Nahan - Ser5 + - Filipe Guerra + - Denis Klementjev (dklementjev) + - Marcello Mönkemeyer (marcello-moenkemeyer) + - Jason Schilling (chapterjason) - Alex Rothberg - - Jitendra Adhikari (adhocore) - - dinitrol - - Shane McKinley - - Wickex - - Konstantin Scheumann - - Wing - - Maxime THIRY - - Mihai Stancu + - Dan Patrick (mdpatrick) + - Sortex + - Paul Le Corre + - Mei Gwilym (meigwilym) + - Dennis Jaschinski (d.jaschinski) + - alex + - enekochan (enekochan) + - muchafm + - Michael Tibben + - Andreas Hasenack + - Jan Vernarsky + - Javier Espinosa (javespi) + - Vladislav Krupenkin (ideea) + - Adam Kiss - Matthias Derer - - Cyril HERRERA - - Adamo Crespi (aerendir) - - Boris Medvedev + - Artyum Petrov + - Diego Aguiar (mollokhan) + - Asrorbek (asrorbek) + - Jochen Bayer (jocl) + - Vincent Chalamon + - Marcin Kruk + - Tom Houdmont - Klaus Purer - - Andoni Larzabal (andonilarz) + - Nicolás Alonso + - gr8b + - Jorrit Schippers (jorrit) + - Jonathan Vollebregt + - Karim Cassam Chenaï (ka) + - Liverbool (liverbool) - Markus Staab - - Dan Brown - - Billie Thompson - - Tim Ward - - Nilmar Sanchez Muguercia - - Flohw - - Mauro Foti (skler) - - Waqas Ahmed - - LHommet Nicolas (nicolaslh) - - drublic - - Bertalan Attila - - William Pinaud (docfx) + - Aleksejs Kovalovs (aleksejs1) + - ivan + - RAHUL K JHA + - Alex Vasilchenko + - Steven Dubois + - Ramon Kleiss (akathos) + - Szymon Tarasiński + - Maxim Kolokolnikov + - Max Grigorian (maxakawizard) + - Igor Kokhlov (verdet) + - Ahto Türkson + - arduanov + - julien.galenski + - Brad Treloar + - Viktoriia Zolotova + - Michael Gwynne + - Kevin Auivinet + - Robert Queck + - Vincent + - Stefan Kruppa + - Benedict Massolle (bemas) + - Frederik Schwan + - Alexander Zogheb + - samuel laulhau (lalop) + - Fleuv + - Thomas Baccelli (atomiix) + - Matthias Neid + - Amine Matmati + - Jannik Zschiesche + - Emirald Mateli + - Aarón Nieves Fernández + - Linnaea Von Lavia + - Anamarija Papić (anamarijapapic) + - Volker (skydiablo) + - Dmitri Petmanson + - Joao Paulo V Martins (jpjoao) + - fduch (fduch) - Sjoerd Nuijten (sjoerdnuijten) - - Brian Debuire - - René Kerner - - Xeno Suter - - Mateusz Żyła (plotkabytes) - - Xavier HAUSHERR - - Antoine Bellion (abellion) - PatrickRedStar - - Raphaëll Roussel - - Ettore Del Negro + - patrickmaynard + - Frederic Godfrin + - Arkadiusz Rzadkowolski (flies) - Ellie Schaffer + - bahram + - Arrilot - jamogon - - Gunther Konig - - Pierre LEJEUNE (darkanakin41) + - Martin Auswöger - Damian (baum) + - Ikko Ashimine + - Florent Olivaud + - Tyler Stroud + - ureimers + - Anthony Ferrara + - Marco Pfeiffer + - Valentin Barbu (jimie) + - gechetspr + - Hadrien Cren (hcren) + - Bertalan Attila + - Keri Henare (kerihenare) + - Dmitry (staratel) + - Nico Hiort af Ornäs + - Alexandr Samuilov + - Edwin Hageman + - Anton Zagorskii + - Jure (zamzung) + - Emmanuel Dreyfus - Dominic Tubach + - Evgeny Anisiforov + - Artyom Protaskin + - Andras Debreczeni + - Jordi Rejas + - Josef Cech + - Klaas Cuvelier (kcuvelier) + - craigmarvelley + - Tournoud (damientournoud) - Richard Quadling + - Jose Manuel Gonzalez (jgonzalez) + - JustDylan23 + - Sepehr Lajevardi + - Robert Meijers + - Mara Blaga + - Adrien Foulon + - Mert Simsek (mrtsmsk0) + - Ari Pringle (apringle) + - Karolis + - Bogdan Scordaliu + - Pavel Golovin (pgolovin) + - Tony Arcangelini + - John Nickell (jrnickell) + - Max Summe + - Bastien Picharles + - Paul Andrieux + - Karim Miladi + - Maxime AILLOUD (mailloud) + - Mark Ogilvie + - Julien Bianchi (jubianchi) + - Yendric + - bill moll + - Oleksii Svitiashchuk + - Rares Vlaseanu (raresvla) + - Alan Scott + - ivelin vasilev + - Anton Babenko (antonbabenko) + - Kevin Verschaeve (keversc) + - dlorek + - Philippe Degeeter (pdegeeter) + - j.schmitt + - Jan Pech (pechynho) + - Thomas Ferney (thomasf) + - toxxxa + - Chris Jones (leek) + - Bartłomiej Zając + - ShiraNai7 + - Ben Oman + - Pavol Tuka + - Sven Fabricius + - Arkadiusz Kondas (itcraftsmanpl) + - JK Groupe + - Johannes + - Samy D (dinduks) + - Adam Klvač + - Danil + - Prasetyo Wicaksono (jowy) + - Boris Grishenko (arczinosek) + - Jeroen de Graaf + - Ettore Del Negro + - Wojciech Skorodecki - Lance Chen - - sabruss + - Gunther Konig + - Pierre LEJEUNE (darkanakin41) + - Bogdan Rancichi (devck) + - Alex Olmos (alexolmos) + - ondrowan + - Max Voloshin (maxvoloshin) - Sami Mussbach - - vdauchy - - Yannick + - Tim Ward + - Romain Jacquart (romainjacquart) - Timon van der Vorm - - Victor - EdgarPE - - Sven Fabricius - - Samy D (dinduks) + - Phobetor - 蝦米 + - gitlost + - Andrew Coulton + - Dominik Pesch (dombn) + - Henne Van Och (hennevo) + - Eric J. Duran + - ProgMiner + - Bart Reunes (metalarend) - Kai Eichinger - Rudy Onfroy - Nicolas Roudaire - Oleg Golovakhin (doc_tr) - rkerner - - Wojciech Skorodecki - - Bogdan Rancichi (devck) - - Alex Olmos (alexolmos) - - Robert Meijers - - Jon Cave - - Phobetor - - sauliusnord - - Oleksii Svitiashchuk - - fbuchlak - - V1nicius00 - - Wahyu Kristianto (kristories) - - Ladislav Tánczos - - Matt Brunt - otsch - - Andrea Giannantonio - - Miłosz Guglas (miloszowi) - - Alexandre Segura - - Şəhriyar İmanov (shehriyari) - - Peter Bex - - Àlex Fiestas - - Damian Sromek - - Benoit Garret - - Foxprodev - - Erwan Nader (ernadoo) + - Andreas Kleemann (andesk) - tsilefy - - Thomas Bibb - - SenTisso - - Alexander Janssen (tnajanssen) - - dsech - - Jenne van der Meer - Falco Nogatz + - Alex Demchenko + - Pawel Szczepanek (pauluz) + - Jelle Kapitein + - bokonet + - Tristan Pouliquen - Alexandre Jardin (alexandre.jardin) - - Mikko Pesari - - Clément LEFEBVRE (nemoneph) - - Boullé William (williamboulle) - - Jan Hort - - Tom Corrigan (tomcorrigan) + - Charles-Henri Bruyand + - 🦅KoNekoD + - Steeve Titeca (stiteca) - Johannes - - Aaron Stephens (astephens) - - seho-nl - - Thomas Counsell - - Viktor Bajraktar (njutn95) - - Ben Johnson - - Adam Prickett - - Makdessi Alex - - Dmitry Korotovsky - - Volodymyr Kupriienko (greeflas) - - Pierre-Chanel Gauthier (kmecnin) + - baron (bastien) + - Ondřej Führer + - Vedran Mihočinec (v-m-i) + - MrNicodemuz + - sabruss + - Dylan + - Nick Stemerdink - Samy Mahmoudi - - Oscar Esteve (oesteve) - - alifanau - - Wojciech Błoszyk (wbloszyk) - - Kevin Weber - - Marcus - - Laurent Clouet - - RichardGuilland - - Floran Brutel (notFloran) (floran) - - Georg Ringer (georgringer) - - Vasily Khayrulin (sirian) - - wivaku - - Toro Hill - - Ruud Arentsen - - jack.shpartko - - Nicolas Eeckeloo (neeckeloo) - - Neil Katin - - Rémi Blaise - - Bart Brouwer (bartbrouwer) - - rchoquet - - Pascal Woerde (pascalwoerde) - - none (nelexa) - - Paul Seiffert (seiffert) - - Juraj Surman - - Andrea Giuliano (shark) - - Mikkel Paulson - - ju1ius - - Orban Florin (forban) - - Marcos Quesada (marcos_quesada) - - Ener-Getick - - Dan Finnie - - omniError - - Jānis Lukss - - Javan Eskander - - Joe - - Vladimir Sadicov (xtech) - - Quentin Moreau (sheitak) - - Marko Vušak - - Christophe Meneses (c77men) - - Antoine Leblanc - - cilefen (cilefen) - - Daniel Iwaniec - - Jontsa - - Rares Vlaseanu (raresvla) - - Bernhard Rusch - Juan Mrad - Dmytro Pigin (dotty) - Viacheslav Sychov - - Artiom + - Jeffrey Moelands (jeffreymoelands) - Grégoire Hébert (gregoirehebert) - Mas Iting - Greg Szczotka (greg606) - - AlbinoDrought - - Zoran Makrevski (zmakrevski) - - Ramon Cuñat - - Erwin Houtsma - - aetxebeste - - Markkus Millend - - Buster Neece - - Thomas Decaux - - Martynas Narbutas - - Mickaël BULIARD - - Rosio (ben-rosio) - - Laurent Legaz - - Marion Hurteau (marionleherisson) - - Tugba Celebioglu - - Danijel Obradović - - Urban Suppiger - - Hoffmann András + - alifanau + - Wojciech Błoszyk (wbloszyk) + - Sorin Pop (sorinpop) + - Richard Trebichavský - George Dietrich - Yury (daffox) - - M.Mahdi Mahmoodian - - Arend Hummeling + - Ruud Arentsen + - Jay Severson - Krzysztof Pyrkosz - - Sergiy Sokolenko - - Jules Lamur - - Mark van Duijker - - alefranz - - Jorge P. Hernandez Lalcebo - - Alexander Kurilo (kamazee) - - Dušan Kasan (dudo1904) - - sal-car - - Thibaut Cholley - - Arend Hummeling - - Siragusa (asiragusa) - - Chris Jones (leek) - - Bartłomiej Zając - - Danil - Christian Kolb - Houssem - - Martijn Boers (plebian) - - Tomáš Ludvik - - Michael Dawart (mdawart) + - Kévin + - Nicolas Eeckeloo (neeckeloo) + - ju1ius + - ConneXNL + - Jules Matsounga (hyoa) + - Nick Chiu + - Jonny Schmid (schmidjon) + - Manuele Menozzi + - Yann (yann_eugone) + - Martin Mandl (m2mtech) - Eviljeks - smokeybear87 - Michael van Tricht - Masao Maeda (brtriver) - Success Go - - Florian Heller - - Prasetyo Wicaksono (jowy) - - Boris Grishenko (arczinosek) - - alireza - - Eric Krona - - Joan Cruz - - Sylvain METAYER - - Ciaran McNulty (ciaranmcnulty) - - DaikiOnodera - - Grayson Koonce + - Taylan Kasap + - Maciej Zgadzaj + - Stuart Fyfe + - Fraller Balázs (fracsi) + - Vincent Godé - Raphael Davaillaud - Soner Sayakci - - Yohann Tilotti + - dima-gr - Pieter - - Gennadi Janzen - - Martins (kevin_martins) - - Sobhan Sharifi (50bhan) - - Sander van der Vlugt (stranding) - - Sergio Santoro - - Igor Timoshenko (igor.timoshenko) - - Jelle Kapitein - - bokonet - - VojtaB - - tilaven - - nuncanada - - Jean Ragouin - - Jan Christoph Beyer - - Vicky Hagemeister - - Charles-Henri Bruyand - Luis Galeas - dbrekelmans - Maxim Semkin - - Ahmed Abdulrahman - - znerol - - Damir Mitrović - - Robert Campbell - - Jörn Lang - - Marcus Stöhr - - Ruben Kruiswijk - - Ilya Bulakh - - 🦅KoNekoD - - Steeve Titeca (stiteca) - - Dylan - - Michel Krenz - - Alberto Aldegheri - - Sorin Pop (sorinpop) - - Richard Trebichavský - - Anna Filina (afilina) - - Andrei Igna - - Quentin Favrie - - Richard Heine - - Giorgio Premi - - Marek Víger (freezy) - - Till Krüss - - Florent Cailhol - - Ariful Alam - - Raphaël Davaillaud - - Timothy Anido (xanido) - - Nathaniel Catchpole - - Alexandru Năstase - - Ash014 - - Aryel Tupinamba (dfkimera) - - Rafał Toboła - - Paul Matthews - - TheMhv - - Lukas Kaltenbach - - Felix Eymonot (hyanda) - - Tijs Verkoyen - - Malte Wunsch (maltewunsch) - - Gaylord Poillon (gaylord_p) - - Steve Müller + - Stefan Koopmanschap + - Pedro Magalhães (pmmaga) + - Yannick + - Julien Boudry + - ttomor + - David Barratt + - Benjamin Paap (benjaminpaap) + - Vitalii + - Dave Heineman (dheineman) + - linh + - Maxime PINEAU + - Rik van der Heijden + - Lukas Kaltenbach + - JakeFr + - Matthew Covey + - Robert Campbell + - Jörn Lang + - Bermon Clément (chou666) + - Ruben Kruiswijk + - Ilya Bulakh + - Giorgio Premi + - Marek Víger (freezy) + - Orban Florin (forban) + - John Doe (theboat) + - Ariful Alam - david perez (davidpv) - Christian Rishøj - Yannick Warnier (ywarnier) - - Christoph Vincent Schaefer (cvschaefer) + - Serhii Polishchuk (spolischook) + - Luciano Mammino (loige) + - Marco + - Gerard Berengue Llobera (bere) + - mlievertz - Pablo Maria Martelletti (pmartelletti) - - Zoli Szabó (zoliszabo) - - Valentin VALCIU - - dantleech - - Ninos - - Fernando Henrique - - Sylvain Fabre (sylvain-fabre-assoconnect) - - Patrick Daley (padrig) - - elattariyassine - - Norman Soetbeer - - Josef Hlavatý - - Thomas Citharel (tcit) - - urban - - Belhassen - - Mlanawo MBECHEZI - - andreyserdjuk - - Dmitrii Fedorenko (dmifedorenko) - - Hayk Zakaryan - - tamirvs - - Brian Corrigan - - Alexandru Bucur - - Illia Sakovich - - Lauris Binde (laurisb) - - darkweak - - Nicolae Serban + - Quentin Moreau (sheitak) + - Jeremy Benoist + - Bernhard Rusch - Timothée BARRAY - The Whole Life to Learn - Andreas Allacher - Jeroen Bouwmans - - Staormin - - Merijn Wijngaard - - Boris Betzholz - - Sajad Torkamani - - Robin Kanters (anddarerobin) - - Daniel Bannert - - Dominik Schwind (dominikschwind) - - ZiYao54 - - Matthew Donadio - - Konstantin Bogomolov - - Karim - - ttomor - - shreyadenny - - Guillaume BRETOU (guiguiboy) - - Alan ZARLI - - Mehrdad + - Àlex Fiestas + - Rémy LESCALLIER - creiner - Haritz Iturbe (hizai) - - Tammy D - GuillaumeVerdon - - Alexandre GESLIN + - Wim Hendrikx - Tim Porter - - DcgRG + - Jonathan Poston - Steve Marvell - - Alfonso Fernández García + - Erwin Houtsma - Shamimul Alam - - Alexis MARQUIS + - aetxebeste + - root + - Alex Vo (votanlean) + - Daniele Orru' (danydev) + - Marc Jauvin + - Simon Bouland (bouland) + - Chris + - Guillaume BRETOU (guiguiboy) + - Marion Hurteau (marionleherisson) - RTUnreal - - Michaël Thieulin (mthieulin) + - Matthieu Prat - Peter Culka - Bernat Llibre Martín (bernatllibre) - - Jörg Rühl - - Icode4Food (icode4food) - - Jeremy David (jeremy.david) - - Ali Sol - - adam-mospan - - Alex Vo (votanlean) + - Tugba Celebioglu + - SOEDJEDE Felix (fsoedjede) + - Jochen Mandl + - Urban Suppiger + - Frederik Schmitt + - g123456789l + - M.Mahdi Mahmoodian + - Jorge Martin (jorgemartind) + - Ondřej Frei + - Konstantin Chigakov + - Arrakis (arrakis) + - xdavidwu - vladyslavstartsev - Chihiro Adachi (chihiro-adachi) - Antonio Peric-Mazar (antonioperic) + - Artem Lopata + - Marvin Petker + - Dmitriy Derepko + - Christopher Georg (sky-chris) + - peter + - Szymon Kamiński (szk) + - brian978 + - Kevin Meijer + - Jan Emrich + - Ruud Seberechts + - Billy Scheufler + - Frank Jogeleit + - Matthias Perret (mp3000mp) + - Attila Bukor (r1pp3rj4ck) + - Conrad Kleinespel (conradk) + - abluchet + - Dennis Tobar + - Jan Marek (janmarek) + - Jeroen De Dauw (jeroendedauw) + - Irmantas Šiupšinskas (irmantas) + - Stewart Malik + - AnrDaemon + - Toro Hill + - Bastien Clément (bastienclement) + - Mark van Duijker + - Gabriel Solomon (gabrielsolomon) + - Maciej Paprocki (maciekpaprocki) + - Jonas Claes + - Guillermo Gisinger (t3chn0r) + - Lorenzo Adinolfi (loru88) + - Will Rowe + - Koray Zorluoglu + - Pchol + - Jontsa + - Zan Baldwin (zanderbaldwin) + - Brieuc Thomas + - André Laugks + - Florian "Ori" Neveu (fnev-eu) + - Tristan Kretzer + - Alex Plekhanov + - Brian Graham (incognito) + - rchoquet + - David Lima + - Mephistofeles + - Malte Schlüter + - Helmer Aaviksoo + - Miloš Milutinović + - Roromix + - Jorge P. Hernandez Lalcebo + - Alexander Kurilo (kamazee) + - Julien Sanchez (sumbobyboys) + - es + - Giuseppe Arcuti + - Jan Pintr + - Adam Bramley + - Dušan Kasan (dudo1904) + - Thibaut Cholley + - Phil Davis + - developer-av + - Danijel Obradović + - Tomáš Ludvik + - Ian Phillips + - Petr Jaroš (petajaros) + - Yuriy Potemkin + - Pierre Tondereau + - Vincent Pabst + - Johannes + - Michael Dawart (mdawart) + - Citia (citia) + - Kevin EMO + - Dan Harper + - mindaugasvcs + - NothingWeAre + - Florian Heller + - Daniel Kolvik (dkvk) + - alireza + - Hein Zaw Htet™ + - Pierre Geyer (ptheg) + - steveYeah + - Oliver Eglseder + - Kurt Thiemann + - avi123 + - Marcel Pociot (mpociot) + - Ivan Tse + - Alexandre Melard + - Schuyler Jager (sjager) + - Artem Kolesnikov (tyomo4ka) + - Christian Schiffler + - Dariusz Czech + - David Ronchaud + - DcgRG + - Dmitrii Lozhkin + - Steve Preston + - Fred Cox + - Antoine Bellion (abellion) + - Raphaëll Roussel + - vdauchy + - Miłosz Guglas (miloszowi) + - Foxprodev + - Alexander Janssen (tnajanssen) + - Till Hörner + - Peter van Dommelen + - Mehrdad + - dsech + - Michael Hüneburg + - Igor Tarasov (polosatus) + - heccjj + - Joris Garonian (grifx) + - Ciaran McNulty (ciaranmcnulty) + - Kevin Mian Kraiker + - dinitrol + - andreyserdjuk + - Dmitrii Fedorenko (dmifedorenko) + - Igor Timoshenko (igor.timoshenko) + - tilaven + - Gunnar Lium (gunnarlium) + - Steve Hyde + - Ksaveras Šakys (xawiers) + - Pierre Tachoire + - Skorney + - Matthieu + - kaiwa + - Sebastian Schwarz + - Boris Betzholz + - Alan Chen + - Roman Igoshin (masterro) + - Vicky Hagemeister + - Damir Mitrović + - Jon Cave + - Kevin Vergauwen (innocenzo) + - Ahmed Abdou + - Marcus Stöhr + - Stephan Wentz (temp) + - Alfonso Fernández García + - Antoine Beyet + - Dariusz Ruminski + - demeritcowboy + - djama + - Matthew Donadio + - Konstantin Bogomolov - Alain Flaus (halundra) - - Kélian Bousquet (kells) - - Armando + - Michel Krenz - kernig - Claus Due (namelesscoder) - Adrien Gallou (agallou) - - error56 - - Vincent Chalnot + - Alberto Aldegheri + - NorthBlue333 - tatankat + - Gennadi Janzen + - adhamiamirhossein + - InbarAbraham + - Nicolas Valverde + - Rikijs Murgs + - Simone Ruggieri + - zolikonta + - Till Krüss + - Raphaël Davaillaud - Tomanhez - - Romain Pierre + - Shaun Simmons - goohib - - phc - - SOEDJEDE Felix (fsoedjede) - - Christopher Georg (sky-chris) - - peter - - Jérémy CROMBEZ (jeremy) - - insekticid - - Pavel Golovin (pgolovin) - - alexpods - - Jochen Mandl + - Thomas Rothe + - Timothy Anido (xanido) + - Romeo + - ergiegonzaga + - pizzaminded + - Wojciech Sznapka - Vladimir Sazhin - Evgeny Z (meze) - Ismail Asci (ismailasci) - Rachid Hammaoui (makmaoui) - - klemens - - Quique Porta (quiqueporta) - - Shude - - Sebastian Utz - - Attila Bukor (r1pp3rj4ck) - - Conrad Kleinespel (conradk) - - taiiiraaa - - Gennadi McKelvey (gennadigennadigennadi) - - Dennis Tobar + - Malte Wunsch (maltewunsch) + - Jitendra Adhikari (adhocore) + - chispita - Philipp Strube + - Sylvain Fabre (sylvain-fabre-assoconnect) + - Patrick Daley (padrig) + - elattariyassine + - Norman Soetbeer + - sam-bee + - urban + - sauliusnord + - Andreas Streichardt + - Hayk Zakaryan + - neodevcode - nietonfir - tpetry - Angel Koilov (po_taka) - - Marvin Petker - - Peter van Dommelen - - Artem Lopata - - Dmitriy Derepko - - kshida - - Michael Hüneburg - - Daniel Bartoníček + - Illia Sakovich + - Alan ZARLI + - Zayan Goripov + - Aleksey Prilipko - Bálint Szekeres - Benoit Leveque - - Irmantas Šiupšinskas (irmantas) - - Jeremiah VALERIE - - Cedric Kastner (nurtext) - - Benoit Mallo - - Jan Emrich - - tante kinast (tante) - - Billy Scheufler - - den den (dionisvl3) - - Jean-François Morin-Abdullah - - Stewart Malik - - AnrDaemon - - Lorenzo Adinolfi (loru88) - - Fabian Haase - - Will Rowe - Matej Žilák (teo_sk) - - ibasaw - - Brieuc Thomas - - André Laugks - - Ivan Yivoff - - Adam Bramley - - Raito Akehanareru (raito) - - Pierre Schmitz - - Bastien Clément (bastienclement) - - G/ - - Patrick Janzen - - Jelte Steijaert (jelte) - - Phil Davis - - developer-av + - Alexis MARQUIS + - César Suárez (csuarez) + - Ali Sol + - Mantas Urnieža + - darkweak + - Götz Gottwald + - Kélian Bousquet (kells) + - AntoineDly + - Marin Nicolae + - Vitali Tsyrkin + - Christian Seel + - Armando + - Uladzimir Tsykun + - Oleg Sedinkin (akeylimepie) + - error56 + - Daniel Konstantinov + - WoutervanderLoop.nl - andreybolonin1989@gmail.com - - Aurélien MARTIN + - Cyril HERRERA - fmarchalemisys - - Bram Van der Sype (brammm) + - Andrey Helldar + - Dan Brown + - Simon Paarlberg (blamh) + - kshida + - Andrew Zhilin (zhil) + - Julien ARBEY + - Grégoire Rabasse + - damaya + - mikocevar + - Jeremiah VALERIE + - Benoit Mallo + - Andrey Ryaguzov + - tante kinast (tante) + - Nicolae Serban + - Flohw + - Petar Marjanovic + - Konstantin Scheumann + - Wing + - Maxime THIRY + - Mihai Stancu + - stefan.r + - Mauro Foti (skler) + - Adamo Crespi (aerendir) + - LHommet Nicolas (nicolaslh) + - Wickex + - Vašek Purchart (vasek-purchart) + - cmfcmf + - Stelian Mocanita (stelian) + - Nicolas Jourdan (nicolasjc) + - Albert Bakker (babbert) + - Ryan Linnit + - Ángel Guzmán Maeso (shakaran) + - Wissame MEKHILEF + - Sjoerd Adema + - Rudolf Ratusiński + - Ovidiu Gabriel Gireada (ovidiugireada) + - Marcin Twardowski + - Penny Leach + - Antoine (antoinela_adveris) + - Şəhriyar İmanov (shehriyari) + - Alexander Varwijk + - Jordi Kroon + - Fabien Perroquin + - AbdElKader Bouadjadja + - Martin Komischke + - Thomas Counsell + - Adria Lopez (adlpz) + - Adiel Cristo (arcristo) + - Yura Uvarov (zim32) + - Nathanael d. Noblet + - Maxcastel + - Benoit Garret + - Kevin Weber + - Erwan Nader (ernadoo) + - Simon Jamain + - Dan Finnie + - Jan Hort + - Tom Corrigan (tomcorrigan) + - michael.kubovic + - Tomaz Ahlin + - Tom Kaminski + - Joe + - Nathanaël Martel (nathanaelmartel) + - Alexis MARQUIS + - Tarjei Huse (symfony_cloud) + - Andriy + - Marko Vušak + - Benjamin BOUDIER + - Daniel Basten (axhm3a) + - Bruno Baguette + - Mario Blažek (marioblazek) + - Ronny López (ronnylt) + - Marcos Labad + - Axel Venet + - Pablo Eliezer + - BrokenSourceCode + - Artiom + - Viktor Bajraktar (njutn95) + - Adam Prickett + - Makdessi Alex + - Dmitry Korotovsky + - Volodymyr Kupriienko (greeflas) + - Lucas Bustamante + - Constantine Shtompel + - Martin Schophaus (m_schophaus_adcada) + - William Pinaud (docfx) + - Peter van Dommelen + - Gennadi McKelvey (gennadigennadigennadi) + - Brian Debuire + - René Kerner + - Markus Staab + - Bart Wach + - sualko + - Muharrem Demirci (mdemirci) + - Rich Sage + - Stan Jansen (stanjan) + - Kovacs Nicolas + - Lachlan Arthur + - ElisDN + - Jiri Korenek + - Arend Hummeling + - ged15 + - Jan Eichhorn (exeu) + - Daniel Mecke (daniel_mecke) + - Seyedramin Banihashemi (ramin) + - Pierre-Chanel Gauthier (kmecnin) + - Ilia Sergunin (maranqz) + - wivaku + - Andreas Allacher + - alefranz + - sal-car + - Aaron Somi + - Boris Medvedev + - Serhii Bondarenko + - Jordan Hoff + - Andoni Larzabal (andonilarz) + - Hugo Posnic + - Martijn Boers (plebian) + - Billie Thompson + - Peter Zwosta + - Tom Maguire + - Agustin Gomes + - Emmanuelpcg + - Wouter Diesveld + - Wahyu Kristianto (kristories) + - Ladislav Tánczos + - Ismo Vuorinen + - karstennilsen + - Nilmar Sanchez Muguercia + - Yohann Tilotti + - MGatner + - Waqas Ahmed + - VojtaB + - Floran Brutel (notFloran) (floran) + - Vasily Khayrulin (sirian) + - Ramon Cuñat + - Joachim Krempel (jkrempel) + - Marcus Jaschen + - Markkus Millend + - benkarrer-lab + - Dennis Smink (dsmink) + - Arvids Godjuks (psihius) + - Jörg Rühl + - Icode4Food (icode4food) + - nuncanada + - David Brooks + - Brandon Antonio Lorenzo + - Curtis (ccorliss) + - Paul Clegg (clegginabox) + - jack.shpartko + - Audain + - Neil Katin + - Rémi Blaise + - Bart Brouwer (bartbrouwer) + - Ahmed Abdulrahman + - Kirk Madera + - Bruno MATEU + - Brad Bayliss + - Stakovicz + - J Bruni + - Rutger Hertogh + - botbotbot + - Sait KURT + - Geoffrey Pécro (gpekz) + - insekticid + - alexpods + - Nouhail AL FIDI (alfidi) + - drublic + - adars + - znerol + - Pascal Woerde (pascalwoerde) + - none (nelexa) + - Paul Seiffert (seiffert) + - Juraj Surman + - calm329 + - Anna Filina (afilina) + - Christophe Meneses (c77men) + - Antoine Leblanc + - Andrei Igna + - Daniel Iwaniec + - Pierre Rebeilleau (pierrereb) + - Julien Pauli + - Vladimir Belozyorov + - Tammy D + - Richard Heine + - Stephen Lewis (tehanomalousone) + - Denys Voronin (hurricane) + - Florent Cailhol + - Rosio (ben-rosio) + - Nathaniel Catchpole + - Albert (aprat84) + - Ahmed Soliman (ahmedsoliman) + - Martynas Sudintas (martiis) + - inspiran + - Aryel Tupinamba (dfkimera) + - Elias Häußler + - Andrea Giannantonio + - Mateusz Żyła (plotkabytes) + - Christoph Vincent Schaefer (cvschaefer) + - Laurent Bardin + - Aaron Stephens (astephens) + - tamirvs + - Belhassen + - Arend Hummeling + - Siragusa (asiragusa) + - Anna Damm + - Mlanawo MBECHEZI + - dakur + - Joel Lusavuvu (enigma97) + - Paul LE CORRE + - Peter Bouwdewijn + - Jean-Christophe Cuvelier [Artack] + - AUDUL + - Keith Maika + - Kubicki Kamil (kubik) + - Matheus Gontijo + - Matthias Meyer + - Sander Coolen (scoolen) + - Kevin Jansen + - Nicolas Fabre (nfabre) + - adnen chouibi + - Raul Garcia Canet (juagarc4) + - Bradley Zeggelaar + - Jakub Kisielewski + - fabi + - Safonov Nikita (ns3777k) + - Mikhail Prosalov (mprosalov) + - Mikkel Paulson + - Sobhan Sharifi (50bhan) + - Lucas Matte + - Radosław Kowalewski + - Thibaut Arnoud (thibautarnoud) + - Mdsujansarkar + - Thomas Dutrion (theocrite) + - Nicolas Séverin + - Marc J. Schmidt (marcjs) + - jdcook - Mohamed Karnichi (amiral) + - Cas - caalholm - - jdcook + - Samael tomas - popnikos - PabloKowalczyk - Brandon Kelly (brandonkelly) - VolCh - - Monere + - Victor + - Uwe Kleinmann + - David Legatt (dlegatt) + - ddebree - Marek Šimeček (mssimi) - Temuri Takalandze (abgeo) - Sander Goossens (sandergo90) - - djordy - - Marcin Kruk + - Guilain (guilain_sylapps) - David Soms - Marc Duboc (icemad) - - Andrew Zhilin (zhil) - - Julien ARBEY - - Marc J. Schmidt (marcjs) - - Thomas Dutrion (theocrite) + - fbuchlak + - V1nicius00 + - tomasz-kusy + - pf - Pete Mitchell (peterjmit) - Philipp Fritsche - Albert Prat - Dominik Piekarski (dompie) - nuryagdy mustapayev (nueron) - - AUDUL + - Walter Dal Mut (wdalmut) + - Harold Iedema + - djordy - Ernesto Domato - Michael Squires + - Marien Fressinaud - Vincent MOULENE (vints24) - Łukasz Chruściel (lchrusciel) - kaywalker - - Grégoire Rabasse + - Alexandre Segura - Craig Menning (cmenning) - pborreli - Philipp Kretzschmar - Gerard - Adam Katz - Benny Born - - Jean-Christophe Cuvelier [Artack] - - RevZer0 (rav) + - Romain Dorgueil + - andrey-tech - Gyula Szucs + - Damian Sromek - Guillaume Lajarige (molkobain) - - Sandro Hopf (senaria) + - Ryan Rud - Joeri Verdeyen (jverdeyen) - Michel Bardelmeijer - Laurent G. (laurentg) - fruty - lol768 - - Omar Yepez (oyepez003) + - Junaid Farooq (junaidfarooq) - Abdouni Karim (abdounikarim) - - Vladislav Vlastovskiy (vlastv) + - Luis Pabon (luispabon) - Grzegorz Łukaszewicz (newicz) - Trevor N. Suarez (rican7) - Julien Menth (cfjulien) - Billie Thompson - - Joachim Krempel (jkrempel) - - Hryhorii Hrebiniuk - - Ian Phillips + - Thomas Bibb - Pieter Jordaan - Jérémie Broutier - - Petr Jaroš (petajaros) + - SenTisso - Robert Korulczyk - - Johan Wilfer (johanwilfer) + - Markus Ramšak - Dan Blows - Haikiri - Christian Weiske - Claudiu Cristea - - Yuriy Potemkin + - Alexandre GESLIN - Tomas Javaisis - Johan de Ruijter - Bart Ruysseveldt - Balázs Benyó (duplabe) - - Lucas Matte + - Filippos Karailanidis - Abdouarrahmane FOUAD (fabdouarrahmane) - Sebastian Landwehr (dword123) - - Mikkel Paulson - - damaya + - Rafał Muszyński (rafmus90) + - Ben Johnson - Dario Guarracino - - Mikhail Prosalov (mprosalov) + - Camille Dejoye (cdejoye) - Fabian Kropfhamer (fabiank) - - mikocevar - - Petar Marjanovic - - stefan.r + - den den (dionisvl3) + - Sander van der Vlugt (stranding) + - Sergio Santoro - Ashura - Mathieu Ledru (matyo91) - Valérian Galliat - - fabi + - Reece Fowell (reecefowell) - Jérémy (libertjeremy) + - John Espiritu (johnillo) - Abdelilah Jabri - - Jakub Kisielewski - - Bradley Zeggelaar + - Julien Manganne (juuuuuu) + - Javier Núñez Berrocoso (javiernuber) - Ralf Kühnel (ralfkuehnel) - Berat Doğan - Ricardo de Vries (ricardodevries) - - Vašek Purchart (vasek-purchart) - - Jérémy Jourdin (jjk801) + - Mati Kochen (mtk) + - Peter Potrowl - Oussama Elgoumri - Juan Traverso - Mike Gladysch @@ -3816,212 +3850,215 @@ The Symfony Connect username in parenthesis allows to get more information - dropfen - Marcin Chwedziak - Gert de Pagter - - Vladimir Pakhomchik + - František Maša - Thibault G - Povilas S. (povilas) - Gordienko Vladislav - Amirreza Shafaat (amirrezashafaat) - - Cas van Dongen - - Darius Leskauskas (darles) - - Hallison Boaventura (hallisonboaventura) - - cmfcmf + - Michal Kurzeja (mkurzeja) + - Pierre Gasté (pierre_g) + - HMAZonderland - Thanos Polymeneas (thanos) - Michael Hudson-Doyle - - Vincent Vermeulen - - Paul LE CORRE + - Hryhorii Hrebiniuk + - Jérémy Jourdin (jjk801) - akimsko - - Joel Lusavuvu (enigma97) + - Vladimir Pakhomchik - Alexis BOYER - Alexander Menk - tsufeki - - Matthias Meyer - - Kevin Jansen + - RevZer0 (rav) + - Andreas Frömer - joris de wit (jdewit) - Andrejs Leonovs - Sander Hagen - Marc Torres + - Jean Ragouin + - Till Klampaeckel (till) + - Jan Christoph Beyer + - Jenne van der Meer + - carlos-ea + - Muhammad Elhwawshy + - twifty + - AlberT - MatTheCat - - Marvin Butkereit - anna-lena.waltinger - rogamoore - Maxime Corteel (mcorteel) - Enrico - andreabreu98 - - adnen chouibi + - Richard Hodgson - Leonid Terentyev - - Gabriel Solomon (gabrielsolomon) + - Alexey Vlasov - David Grüner (vworldat) - Egor Gorbachev - - Raul Garcia Canet (juagarc4) - - Maciej Paprocki (maciekpaprocki) - - Till Klampaeckel (till) - - Taylan Kasap - - David Brooks - - Radosław Kowalewski + - David Gorges (davidgorges) + - Sergey Fedotov + - Vincent Bouzeran + - Mynyx + - Jan Vernarsky - Stefan Oderbolz - - Bruno MATEU + - Mikko Pesari - Zakaria AMMOURA (zakariaamm) - - Gavin Staniforth - - Aleksei Lebedev - - Thibaut Arnoud (thibautarnoud) + - e-ivanov + - Clément LEFEBVRE (nemoneph) + - Houziaux mike - Eduardo Conceição - - Pierre Tondereau + - Oscar Esteve (oesteve) - Max Beutel - - Cas - - Samael tomas - - Sorin Gitlan (forapathy) - - tamar peled - - everyx - - parhs - - Flinsch - - tomasz-kusy - - mieszko4 - - Will Donohoe + - Gavin Staniforth + - Matt Drollette (mdrollette) - Neophy7e - - pf - - Walter Dal Mut (wdalmut) - - HMAZonderland + - David Otton + - A. Pauly + - Benjamin Pick - Gordienko Vladislav - - Marien Fressinaud + - Juan Miguel Besada Vidal (soutlink) - Simon Neidhold - - Romain Dorgueil + - Lars Moelleken - Sean Templeton - - Johannes + - mrossard - Steffen Keuper - Walid BOUGHDIRI (walidboughdiri) - tadas - - botbotbot + - Jeremy David (jeremy.david) - Eduard Morcinek - - Ryan Linnit + - Marcus - Nikita Sklyarov - - Ángel Guzmán Maeso (shakaran) - - andrey-tech - - Julien Manganne (juuuuuu) - - carlos-ea + - Georg Ringer (georgringer) + - Maxime P - Vladislav Iurciuc + - Andrea Giuliano (shark) - Andrew Tch - Mickael Perraud - - Ryan Rud + - ddegentesh - Geoff - - Junaid Farooq (junaidfarooq) - - Luis Pabon (luispabon) - - Rudolf Ratusiński - - Markus Ramšak - - Filippos Karailanidis - - Andrea Ruggiero (pupax) - - fh-github@fholzhauer.de - - AbdElKader Bouadjadja + - Shude + - Dawid Sajdak + - Luis Muñoz + - Kévin Gomez (kevin) + - Alex Nostadt + - Robert Kopera + - Verlhac Gaëtan (viviengaetan) + - szymek + - Dennis Haarbrink - rvoisin - - twifty - - Rafał Muszyński (rafmus90) - - Peter Potrowl + - MightyBranch + - Michael + - Sander Marechal - Alexander Pasichnik (alex_brizzz) - Kamil Szalewski (szal1k) - - Camille Dejoye (cdejoye) + - Jakub Janata (janatjak) - Mehdi Achour (machour) - Andrey Chernykh - Kérian MONTES-MORIN (kerianmm) + - Alessandra Lai + - Hugo Fonseca (fonsecas72) + - Julian Krzefski + - Gabi Udrescu + - Gerd Christian Kunze (derdu) + - Ross Tuck - BenjaminBeck + - Andrew Marcinkevičius (ifdattic) - n-aleha - - Luke Towers - - Julius Beckmann (h4cc) - - Peter Bouwdewijn - tuqqu - - László GÖRÖG + - Mikkel Paulson - Valery Maslov (coderberg) + - Courcier Marvin (helyakin) + - Ulugbek Miniyarov + - David Soria Parra + - ghazy ben ahmed - Damien Harper (damien.harper) - - Reece Fowell (reecefowell) - - Clement Herreman (clemherreman) + - pritasil - Kevin Dew + - m.chwedziak + - SALMERON Valentin (vasal) + - Clement Herreman (clemherreman) - Rowan Manning - - Javier Núñez Berrocoso (javiernuber) - - Alex Teterin (errogaht) - - Maxim Kolokolnikov + - dantleech - Wouter Ras - - adhamiamirhossein - - David Legatt (dlegatt) - - ddebree - Jesper Noordsij - - František Maša - - Michal Kurzeja (mkurzeja) + - Jakub Sacha + - Ashura - Igor Plantaš - - Wouter de Wild + - 2manypeople - Tobias Feijten (tobias93) - - Pierre Gasté (pierre_g) + - Jacek Kobus (jackks) + - Marcos Quesada (marcos_quesada) + - Alexey Popkov + - Giovanni Albero (johntree) + - Emre Akinci (emre) + - André Laugks + - upchuk + - Thibaut Salanon + - GK-302 + - GagnarTest (gagnartest) - stloyd - Ian Carroll - Jaap van Otterdijk (jaapio) - Iwan van Staveren (istaveren) - - Andreas Frömer + - Cas van Dongen - Benjamin RICHARD - - Harold Iedema - - Adria Lopez (adlpz) - - Keith Maika - - John Espiritu (johnillo) - - Sander Coolen (scoolen) - - Adiel Cristo (arcristo) + - Nei Rauni Santos (nrauni) + - Steve Frécinaux + - Ener-Getick - Christian Stocker - - Babichev Maxim (rez1dent3) - - AlberT + - Mykola Zyk + - Julius Beckmann (h4cc) + - mantulo + - Dalibor Karlović + - adam-mospan + - GurvanVgx + - Hans Höchtl (hhoechtl) + - fh-github@fholzhauer.de - Simone Fumagalli (hpatoio) - Freek Van der Herten (freekmurze) - - Richard Hodgson + - Andrea Ruggiero (pupax) - valmonzo - - Sergey Fedotov + - George Giannoulopoulos - Erika Heidi Reinaldo (erikaheidi) - Muhammad Aakash - - Mynyx - - Jan Vernarsky - - Nicolas Fabre (nfabre) - - e-ivanov - - mantulo - - Houziaux mike - - Matheus Gontijo - - Vladimir Vasilev (bobahvas) + - Markus + - omniError + - EXT - THERAGE Kevin + - Javier Ledezma + - Przemysław Piechota (kibao) - Flo Gleixner (redflo) - Alessio Baglio (ioalessio) - - mousezheng + - Michael Thieulin - wesleyh - florian-michael-mast - Chris McGehee - - Matt Drollette (mdrollette) - - David Otton + - Frank Neff (fneff) + - pawel-lewtak - Piet Steinhart - Christopher Parotat - Arman - Benjamin Laugueux - Žan V. Dragan - - Yura Uvarov (zim32) + - Jānis Lukss - Vladimir Mantulo (mantulo) - - Jannik Zschiesche - - JustDylan23 - - Verlhac Gaëtan (viviengaetan) - - Adrien Foulon + - Javan Eskander + - Vincent Chalnot - Pablo Borowicz - Emilie Lorenzo - Samuel Gordalina (gordalina) - Mike Milano (mmilano) - Ganesh Chandrasekaran (gxc4795) - - A. Pauly - - Tony Arcangelini + - Dan Ionut Dumitriu (danionut90) + - Vladimir Sadicov (xtech) - Julius (sakalys) - - Juan Miguel Besada Vidal (soutlink) + - skalpa - Diego Sapriza - - Tomas Kmieliauskas - - Laurent Bardin - - Nei Rauni Santos (nrauni) - - Steve Frécinaux - - Rikijs Murgs - - Lars Moelleken + - klemens + - Daniel Bartoníček + - Andrew (drew) - Abdelhakim ABOULHAJ - Robert Meijers - agaktr - Muhammed Akbulut - - szymek - - Dennis Haarbrink - - Maxime P - Brooks Boyd - - ddegentesh + - Hallison Boaventura (hallisonboaventura) - joris - Matthias Bilger - Nathan DIdier (icz) @@ -4029,129 +4066,93 @@ The Symfony Connect username in parenthesis allows to get more information - David de Boer (ddeboer) - youssef saoubou - Lesueurs Frédéric (fredlesueurs) - - Dawid Sajdak + - Vincent Vermeulen - Mathieu MARCHOIS (mmar) - Matteo Giachino (matteosister) - - Luis Muñoz - - MightyBranch - - Michael - - Courcier Marvin (helyakin) + - ChS - Pavel.Batanov - - Kévin Gomez (kevin) + - Ken Marfilla (marfillaster) - zorn - - Hugo Fonseca (fonsecas72) - Ismail Turan - - Alex Nostadt - - Kim Laï Trinh - - Xavier RENAUDIN + - Julien Moulin (lizjulien) + - André Filipe Gonçalves Neves (seven) + - MusikAnimal - Albin Kerouaton - - Sander Marechal - - Jakub Sacha + - Iliya Miroslavov Iliev (i.miroslavov) + - Signor Pedro - Raphaël Droz - Ilia Lazarev (ilzrv) - Peter Gribanov - Tito Costa - - Jakub Janata (janatjak) - - Alessandra Lai - - Julian Krzefski - - Gabi Udrescu + - Alex Teterin (errogaht) + - Pierre Grimaud (pgrimaud) + - Stefan Hüsges (tronsha) + - Quentin Favrie + - Patricia - Sergei Gorjunov + - Moritz Borgmann (mborgmann) + - Vivien + - Claas Augner + - Ferran Vidal - Pierre-Olivier Vares (povares) - Gilbertsoft - - ghazy ben ahmed + - Amine Yakoubi - Antanas Arvasevicius - Ha Phan (haphan) + - Lesnykh Ilia + - Cedric Kastner (nurtext) + - jean pasqualini (darkilliant) + - Taras Girnyk + - Jeremiah VALERIE - Eddy - Alexander Onatskiy - efeen - - pritasil + - timaschew - Andrea Civita - - dantleech - - David Gorges (davidgorges) + - Michael Steininger - Renato Mendes Figueiredo + - Kévin Gonella + - Frank Dekker + - SAY-5 + - Alexandru Năstase + - Michael Telgmann - Bram Tweedegolf (bram_tweedegolf) - - Robert Kopera - - Vincent Bouzeran - - Ashura - Carlos Ortega Huetos - - Alexey Popkov - - Emre Akinci (emre) + - ADmad + - Steffen Persch (n3o77) - Rafał + - Vladislav (simpson) + - Vyacheslav Slinko + - Benjamin Dos Santos - temperatur - - André Laugks + - Edvinas Klovas - Remi Collet - - Jonathan (grafikart) + - Ash014 - Sam Ward - qsz - luffy1727 - - Jm Aribau (jmaribau) + - Aurélien MARTIN - Ben Gamra Housseine (hbgamra) - Tim Strehle - Rémi Faivre (rfv) - Derek Bonner - Claude Dioudonnat - - GagnarTest (gagnartest) + - Tobias Genberg (lorceroth) - Giuseppe Petraroli (gpetraroli) - withbest - - George Giannoulopoulos - - Markus - - EXT - THERAGE Kevin + - changmin.keum - Bizley + - Konrad Mohrfeldt + - Pascal Hofmann + - parhs - Alan Bondarchuk - Philip Frank - - J Bruni - - Martin Komischke + - AlbinoDrought + - Zoran Makrevski (zmakrevski) - Oriol Mangas Abellan (oriolman) - Harald Tollefsen - Maks Rafalko (bornfree) - Oliver Klee - - Frank Neff (fneff) + - Peter Jaap Blaakmeer - Monet Emilien - - Gerd Christian Kunze (derdu) - - pawel-lewtak - - Ross Tuck - - Andreas Streichardt - - Dan Ionut Dumitriu (danionut90) - - Ulugbek Miniyarov - - skalpa - - Andrew (drew) - - upchuk - - Thibaut Salanon - - GurvanVgx - MaPePeR - - Siebe Vanden Eynden - - ChS - - Diego Campoy - - Pierre Sv (rrr63) - - neodevcode - - Ken Marfilla (marfillaster) - - David Soria Parra - - Julien Moulin (lizjulien) - - Jacek Kobus (jackks) - - Thomas Ploch - - André Filipe Gonçalves Neves (seven) - - Giovanni Albero (johntree) - - GK-302 - - Dalibor Karlović - - Roland Franssen :) - - Hans Höchtl (hhoechtl) - - Mykola Zyk - - tinect (tinect) - - Nathan Sepulveda - - MusikAnimal - - robmro27 - - Patricia - - hjkl - - Tatsuya Tsuruoka - - Mantas Urnieža - - Iliya Miroslavov Iliev (i.miroslavov) - - Signor Pedro - - enomotodev - - Javier Ledezma - - Przemysław Piechota (kibao) - - Lesnykh Ilia - - Sébastien HOUZE - - Patrick Kuijvenhoven - - Frank Schulze (xit) - - Ignacio Alveal - - Pierre Grimaud (pgrimaud) diff --git a/src/Symfony/Bridge/Monolog/Command/ServerLogCommand.php b/src/Symfony/Bridge/Monolog/Command/ServerLogCommand.php index 3d824acd4d006..8e1c6542295c5 100644 --- a/src/Symfony/Bridge/Monolog/Command/ServerLogCommand.php +++ b/src/Symfony/Bridge/Monolog/Command/ServerLogCommand.php @@ -26,6 +26,8 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\ExpressionLanguage\ExpressionLanguage; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Cloner\Stub; /** * @author Grégoire Pineau @@ -62,7 +64,7 @@ protected function configure() } $this - ->addOption('host', null, InputOption::VALUE_REQUIRED, 'The server host', '0.0.0.0:9911') + ->addOption('host', null, InputOption::VALUE_REQUIRED, 'The server host', '127.0.0.1:9911') ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The line format', ConsoleFormatter::SIMPLE_FORMAT) ->addOption('date-format', null, InputOption::VALUE_REQUIRED, 'The date format', ConsoleFormatter::SIMPLE_DATE) ->addOption('filter', null, InputOption::VALUE_REQUIRED, 'An expression to filter log. Example: "level > 200 or channel in [\'app\', \'doctrine\']"') @@ -110,13 +112,18 @@ protected function execute(InputInterface $input, OutputInterface $output): int } foreach ($this->getLogs($socket) as $clientId => $message) { - $record = unserialize(base64_decode($message)); + $record = @unserialize(base64_decode($message), [ + 'allowed_classes' => [Data::class, Stub::class], + ]); - // Impossible to decode the message, give up. - if (false === $record) { + if (!\is_array($record)) { continue; } + if (isset($record['datetime']) && \is_string($record['datetime'])) { + $record['datetime'] = \DateTimeImmutable::createFromFormat('Y-m-d\TH:i:s.uP', $record['datetime']) ?: $record['datetime']; + } + if ($filter && !$this->el->evaluate($filter, $record)) { continue; } diff --git a/src/Symfony/Bridge/Monolog/Handler/ServerLogHandler.php b/src/Symfony/Bridge/Monolog/Handler/ServerLogHandler.php index ba81a7d45b470..1da6d2655e767 100644 --- a/src/Symfony/Bridge/Monolog/Handler/ServerLogHandler.php +++ b/src/Symfony/Bridge/Monolog/Handler/ServerLogHandler.php @@ -151,6 +151,10 @@ private function formatRecord(array|LogRecord $record): string } } + if (isset($recordFormatted['datetime']) && $recordFormatted['datetime'] instanceof \DateTimeInterface) { + $recordFormatted['datetime'] = $recordFormatted['datetime']->format('Y-m-d\TH:i:s.uP'); + } + return base64_encode(serialize($recordFormatted))."\n"; } } diff --git a/src/Symfony/Bridge/Monolog/Tests/Formatter/ConsoleFormatterTest.php b/src/Symfony/Bridge/Monolog/Tests/Formatter/ConsoleFormatterTest.php index 35179662e54e9..4234ef1e613d2 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Formatter/ConsoleFormatterTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Formatter/ConsoleFormatterTest.php @@ -16,6 +16,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Bridge\Monolog\Formatter\ConsoleFormatter; use Symfony\Bridge\Monolog\Tests\RecordFactory; +use Symfony\Component\VarDumper\Cloner\VarCloner; class ConsoleFormatterTest extends TestCase { @@ -59,4 +60,31 @@ public static function providerFormatTests(): array return $tests; } + + public function testPlaceholderInMessageWithDataContext() + { + $formatter = new ConsoleFormatter(['colors' => false]); + + // LogRecord::$context must be an array, so the Data object is nested inside it + $record = RecordFactory::create(message: 'Hello {user}', context: ['user' => (new VarCloner())->cloneVar('alice')]); + + self::assertStringContainsString('Hello alice', $formatter->format($record)); + + if (Logger::API < 3) { + $context = (new VarCloner())->cloneVar(['user' => 'alice']); + $formatter = new ConsoleFormatter(['colors' => false]); + + $output = $formatter->format([ + 'message' => 'Hello {user}', + 'context' => $context, + 'level' => Logger::WARNING, + 'level_name' => Logger::getLevelName(Logger::WARNING), + 'channel' => 'test', + 'datetime' => '2019-01-01T00:42:00+00:00', + 'extra' => [], + ]); + + self::assertStringContainsString('Hello alice', $output); + } + } } diff --git a/src/Symfony/Bridge/Monolog/Tests/Handler/ServerLogHandlerTest.php b/src/Symfony/Bridge/Monolog/Tests/Handler/ServerLogHandlerTest.php index 5b11bfd7909d1..14b2ef7a01397 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Handler/ServerLogHandlerTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Handler/ServerLogHandlerTest.php @@ -19,6 +19,7 @@ use Symfony\Bridge\Monolog\Handler\ServerLogHandler; use Symfony\Bridge\Monolog\Tests\RecordFactory; use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Cloner\Stub; /** * Tests the ServerLogHandler. @@ -80,12 +81,20 @@ public function testWritingAndFormatting() $message = fgets($stream); fclose($stream); - $record = unserialize(base64_decode($message)); + $record = unserialize(base64_decode($message), [ + 'allowed_classes' => [Data::class, Stub::class], + ]); $this->assertIsArray($record); $this->assertArrayHasKey('message', $record); $this->assertEquals('My info message', $record['message']); + $this->assertArrayHasKey('datetime', $record); + $this->assertIsString($record['datetime']); + $datetime = \DateTimeImmutable::createFromFormat('Y-m-d\TH:i:s.uP', $record['datetime']); + $this->assertInstanceOf(\DateTimeImmutable::class, $datetime); + $this->assertSame('2013-05-29 16:21:54', $datetime->format('Y-m-d H:i:s')); + $this->assertArrayHasKey('extra', $record); $this->assertInstanceOf(Data::class, $record['extra']); $extra = $record['extra']->getValue(true); diff --git a/src/Symfony/Bridge/Twig/Extension/CodeExtension.php b/src/Symfony/Bridge/Twig/Extension/CodeExtension.php index e0e6c8b8d6101..c153de4479acf 100644 --- a/src/Symfony/Bridge/Twig/Extension/CodeExtension.php +++ b/src/Symfony/Bridge/Twig/Extension/CodeExtension.php @@ -128,7 +128,7 @@ public function fileExcerpt(string $file, int $line, int $srcContext = 3): ?stri $contents = file_get_contents($file); if (!str_contains($contents, 'charset)); if (0 > $srcContext) { $srcContext = \count($lines); diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/CodeExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/CodeExtensionTest.php index cb29f4ea1072c..2212e91fc1faa 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/CodeExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/CodeExtensionTest.php @@ -224,6 +224,17 @@ public static function fileExcerptIntegrationProvider() ]; } + public function testFileExcerptEscapesNonPhpContents() + { + $file = \dirname(__DIR__).\DIRECTORY_SEPARATOR.'Fixtures'.\DIRECTORY_SEPARATOR.'xss.html'; + + $html = $this->getExtension()->fileExcerpt($file, 1); + + $this->assertStringNotContainsString(' +& "quoted" diff --git a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php index b2fa950387c2c..9d4ecaf7dc862 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php @@ -307,6 +307,34 @@ public function testClearPrefix() $this->assertTrue($cache->hasItem('barfoo')); } + /** + * @dataProvider provideInvalidPrefixes + */ + public function testClearWithInvalidPrefix(string $prefix) + { + if (isset($this->skippedTests[__FUNCTION__])) { + $this->markTestSkipped($this->skippedTests[__FUNCTION__]); + } + + $cache = $this->createCachePool(0, __FUNCTION__); + $cache->clear(); + + $cache->save($cache->getItem('foobar')->set(1)); + + $this->assertFalse($cache->clear($prefix)); + $this->assertTrue($cache->hasItem('foobar')); + } + + public static function provideInvalidPrefixes(): iterable + { + yield 'single quote' => ["foo' OR 1=1; --"]; + yield 'percent wildcard' => ['foo%']; + yield 'space' => ['foo bar']; + yield 'null byte' => ["foo\0bar"]; + yield 'backslash' => ['foo\\bar']; + yield 'slash' => ['foo/bar']; + } + public function testWeirdDataMatchingMetadataWrappedValues() { if (isset($this->skippedTests[__FUNCTION__])) { diff --git a/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php index 8f586ba8aa873..52f8e5df9c4df 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/ArrayAdapterTest.php @@ -24,6 +24,7 @@ class ArrayAdapterTest extends AdapterTestCase 'testGetMetadata' => 'ArrayAdapter does not keep metadata.', 'testDeferredSaveWithoutCommit' => 'Assumes a shared cache which ArrayAdapter is not.', 'testSaveWithoutExpire' => 'Assumes a shared cache which ArrayAdapter is not.', + 'testClearWithInvalidPrefix' => 'ArrayAdapter does not validate the prefix.', ]; public function createCachePool(int $defaultLifetime = 0): CacheItemPoolInterface diff --git a/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseBucketAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseBucketAdapterTest.php index 3e5569e3c070e..14ccedb40ff36 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseBucketAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseBucketAdapterTest.php @@ -27,6 +27,7 @@ class CouchbaseBucketAdapterTest extends AdapterTestCase { protected $skippedTests = [ 'testClearPrefix' => 'Couchbase cannot clear by prefix', + 'testClearWithInvalidPrefix' => 'Couchbase cannot clear by prefix', ]; protected static \CouchbaseBucket $client; diff --git a/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseCollectionAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseCollectionAdapterTest.php index 32b1ad01f1456..fd47c0399100b 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseCollectionAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/CouchbaseCollectionAdapterTest.php @@ -28,6 +28,7 @@ class CouchbaseCollectionAdapterTest extends AdapterTestCase { protected $skippedTests = [ 'testClearPrefix' => 'Couchbase cannot clear by prefix', + 'testClearWithInvalidPrefix' => 'Couchbase cannot clear by prefix', ]; protected static Collection $client; diff --git a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php index 8ea8e368fb5d4..8e2f136e289c9 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php @@ -25,6 +25,7 @@ class MemcachedAdapterTest extends AdapterTestCase 'testHasItemReturnsFalseWhenDeferredItemIsExpired' => 'Testing expiration slows down the test suite', 'testDefaultLifeTime' => 'Testing expiration slows down the test suite', 'testClearPrefix' => 'Memcached cannot clear by prefix', + 'testClearWithInvalidPrefix' => 'Memcached cannot clear by prefix', ]; protected static \Memcached $client; diff --git a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php index ada3149d63d3c..51bff14fa2ce4 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/PhpArrayAdapterTest.php @@ -58,6 +58,7 @@ class PhpArrayAdapterTest extends AdapterTestCase 'testDefaultLifeTime' => 'PhpArrayAdapter does not allow configuring a default lifetime.', 'testPrune' => 'PhpArrayAdapter just proxies', + 'testClearWithInvalidPrefix' => 'PhpArrayAdapter does not validate the prefix.', ]; protected static string $file; diff --git a/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php index 765dd7565dc76..9e3be694fec50 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/ProxyAdapterTest.php @@ -27,6 +27,7 @@ class ProxyAdapterTest extends AdapterTestCase 'testDeferredSaveWithoutCommit' => 'Assumes a shared cache which ArrayAdapter is not.', 'testSaveWithoutExpire' => 'Assumes a shared cache which ArrayAdapter is not.', 'testPrune' => 'ProxyAdapter just proxies', + 'testClearWithInvalidPrefix' => 'Inner ArrayAdapter does not validate the prefix.', ]; public function createCachePool(int $defaultLifetime = 0, ?string $testMethod = null): CacheItemPoolInterface diff --git a/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php b/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php index c5b5e4a91af44..8ede50fe3fe44 100644 --- a/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php +++ b/src/Symfony/Component/Cache/Traits/AbstractAdapterTrait.php @@ -125,6 +125,10 @@ public function clear(string $prefix = ''): bool $this->namespaceVersion = $namespaceVersion; $this->ids = []; } + } elseif (preg_match('#[^-+.A-Za-z0-9]#', $prefix)) { + CacheItem::log($this->logger, 'Failed to clear the cache: Namespace-prefix contains invalid characters.', ['cache-adapter' => get_debug_type($this)]); + + return false; } else { $namespaceToClear = $this->namespace.$prefix; } diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php index 4e966cc4ca62b..9dea7f16add6e 100644 --- a/src/Symfony/Component/DomCrawler/Crawler.php +++ b/src/Symfony/Component/DomCrawler/Crawler.php @@ -225,7 +225,6 @@ public function addXmlContent(string $content, string $charset = 'UTF-8', int $o $internalErrors = libxml_use_internal_errors(true); $dom = new \DOMDocument('1.0', $charset); - $dom->validateOnParse = true; if ('' !== trim($content)) { @$dom->loadXML($content, $options); diff --git a/src/Symfony/Component/DomCrawler/Field/ChoiceFormField.php b/src/Symfony/Component/DomCrawler/Field/ChoiceFormField.php index 02285730eda6e..588a8efb677d7 100644 --- a/src/Symfony/Component/DomCrawler/Field/ChoiceFormField.php +++ b/src/Symfony/Component/DomCrawler/Field/ChoiceFormField.php @@ -163,7 +163,11 @@ public function addChoice(\DOMElement $node): void $this->options[] = $option; if ($node->hasAttribute('checked')) { - $this->value = $option['value']; + if ($this->multiple) { + $this->value[] = $option['value']; + } else { + $this->value = $option['value']; + } } } diff --git a/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php b/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php index 9c956ac56e8bd..a57cc0772916e 100644 --- a/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php +++ b/src/Symfony/Component/DomCrawler/Tests/AbstractCrawlerTestCase.php @@ -143,6 +143,18 @@ public function testAddXmlContent() $this->assertEquals('foo', $crawler->filterXPath('//div')->attr('class'), '->addXmlContent() adds nodes from an XML string'); } + public function testAddXmlContentDoesNotExpandExternalEntities() + { + $crawler = $this->createCrawler(); + $crawler->addXmlContent( + '' + .']>' + .'&xxe;' + ); + + $this->assertSame('', $crawler->text()); + } + public function testAddXmlContentCharset() { $crawler = $this->createCrawler(); diff --git a/src/Symfony/Component/DomCrawler/Tests/Field/ChoiceFormFieldTest.php b/src/Symfony/Component/DomCrawler/Tests/Field/ChoiceFormFieldTest.php index 5de407344d2f8..8380d19a6c218 100644 --- a/src/Symfony/Component/DomCrawler/Tests/Field/ChoiceFormFieldTest.php +++ b/src/Symfony/Component/DomCrawler/Tests/Field/ChoiceFormFieldTest.php @@ -128,6 +128,22 @@ public function testSelectIsDisabled() $this->assertTrue($field->isDisabled(), '->isDisabled() returns true for selects with a disabled attribute'); } + public function testAddChoiceOnMultipleSelectKeepsExistingValues() + { + $node = $this->createSelectNode(['foo' => true, 'bar' => false], ['multiple' => 'multiple']); + $field = new ChoiceFormField($node); + + $this->assertEquals(['foo'], $field->getValue()); + + $document = new \DOMDocument(); + $newOption = $document->createElement('option', 'baz'); + $newOption->setAttribute('value', 'baz'); + $newOption->setAttribute('checked', 'checked'); + $field->addChoice($newOption); + + $this->assertEquals(['foo', 'baz'], $field->getValue()); + } + public function testMultipleSelects() { $node = $this->createSelectNode(['foo' => false, 'bar' => false], ['multiple' => 'multiple']); diff --git a/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerAllTest.php b/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerAllTest.php index 46a72f3012c82..2ee7b9d867ba5 100644 --- a/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerAllTest.php +++ b/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerAllTest.php @@ -149,7 +149,7 @@ public static function provideSanitizeBody() ], [ 'Lorem ipsum', - 'Lorem ipsum', + 'Lorem ipsum', ], [ 'Test', diff --git a/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php b/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php index ae7b5a2582864..c6f007f4607d6 100644 --- a/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php +++ b/src/Symfony/Component/HtmlSanitizer/Tests/HtmlSanitizerCustomTest.php @@ -323,6 +323,24 @@ public function testAllowLinksHosts() ); } + public function testAreaUsesLinkPolicy() + { + $config = (new HtmlSanitizerConfig()) + ->allowElement('area', ['href']) + ->allowLinkHosts(['trusted.com']) + ; + + $this->assertSame( + '', + $this->sanitize($config, '') + ); + + $this->assertSame( + '', + $this->sanitize($config, '') + ); + } + public function testAllowLinksRelative() { $config = (new HtmlSanitizerConfig()) @@ -405,6 +423,86 @@ public function testAllowMediasRelative() ); } + public function testActionAttributeIsSanitized() + { + $config = (new HtmlSanitizerConfig()) + ->allowElement('form', ['action']) + ; + + $this->assertSame( + '
Hello world
', + $this->sanitize($config, '
Hello world
') + ); + + $this->assertSame( + '
Hello world
', + $this->sanitize($config, '
Hello world
') + ); + + $this->assertSame( + '
Hello world
', + $this->sanitize($config, '
Hello world
') + ); + } + + public function testFormactionAttributeIsSanitized() + { + $config = (new HtmlSanitizerConfig()) + ->allowElement('button', ['formaction']) + ->allowElement('input', ['type', 'formaction']) + ; + + $this->assertSame( + '', + $this->sanitize($config, '') + ); + + $this->assertSame( + '', + $this->sanitize($config, '') + ); + + $this->assertSame( + '', + $this->sanitize($config, '') + ); + } + + public function testPosterAttributeIsSanitized() + { + $config = (new HtmlSanitizerConfig()) + ->allowElement('video', ['poster']) + ; + + $this->assertSame( + '', + $this->sanitize($config, '') + ); + + $this->assertSame( + '', + $this->sanitize($config, '') + ); + } + + public function testCiteAttributeIsSanitized() + { + $config = (new HtmlSanitizerConfig()) + ->allowElement('blockquote', ['cite']) + ->allowElement('q', ['cite']) + ; + + $this->assertSame( + '
Hello world
', + $this->sanitize($config, '
Hello world
') + ); + + $this->assertSame( + 'Hello world', + $this->sanitize($config, 'Hello world') + ); + } + public function testCustomAttributeSanitizer() { $config = (new HtmlSanitizerConfig()) diff --git a/src/Symfony/Component/HtmlSanitizer/Tests/TextSanitizer/UrlSanitizerTest.php b/src/Symfony/Component/HtmlSanitizer/Tests/TextSanitizer/UrlSanitizerTest.php index 391895024e456..dddd8590a5f68 100644 --- a/src/Symfony/Component/HtmlSanitizer/Tests/TextSanitizer/UrlSanitizerTest.php +++ b/src/Symfony/Component/HtmlSanitizer/Tests/TextSanitizer/UrlSanitizerTest.php @@ -283,6 +283,42 @@ public static function provideSanitize(): iterable 'expected' => 'https://trusted.com/link.php', ]; + yield [ + 'input' => 'https://evil\\@trusted.com/', + 'allowedSchemes' => ['https'], + 'allowedHosts' => ['trusted.com'], + 'forceHttps' => false, + 'allowRelative' => false, + 'expected' => null, + ]; + + yield [ + 'input' => 'https:/evil.com/', + 'allowedSchemes' => ['https'], + 'allowedHosts' => ['trusted.com'], + 'forceHttps' => false, + 'allowRelative' => true, + 'expected' => null, + ]; + + yield [ + 'input' => 'https:///evil.com/', + 'allowedSchemes' => ['https'], + 'allowedHosts' => ['trusted.com'], + 'forceHttps' => false, + 'allowRelative' => true, + 'expected' => null, + ]; + + yield [ + 'input' => 'https:\\evil.com', + 'allowedSchemes' => ['https'], + 'allowedHosts' => ['trusted.com'], + 'forceHttps' => false, + 'allowRelative' => true, + 'expected' => null, + ]; + // Allow relative yield [ 'input' => '/link.php', @@ -369,7 +405,7 @@ public static function provideParse(): iterable " :foo.com \n" => null, ' foo.com ' => null, 'a: foo.com' => null, - 'http://f:21/ b ? d # e ' => null, + 'http://f:21/ b ? d # e ' => ['scheme' => 'http', 'host' => 'f'], 'lolscheme:x x#x x' => null, 'http://f:/c' => ['scheme' => 'http', 'host' => 'f'], 'http://f:0/c' => ['scheme' => 'http', 'host' => 'f'], @@ -443,7 +479,7 @@ public static function provideParse(): iterable 'javascript:example.com/' => ['scheme' => 'javascript', 'host' => null], 'mailto:example.com/' => ['scheme' => 'mailto', 'host' => null], '/a/b/c' => ['scheme' => null, 'host' => null], - '/a/ /c' => null, + '/a/ /c' => ['scheme' => null, 'host' => null], '/a%2fc' => ['scheme' => null, 'host' => null], '/a/%2f/c' => ['scheme' => null, 'host' => null], '#β' => ['scheme' => null, 'host' => null], @@ -506,7 +542,7 @@ public static function provideParse(): iterable "http://example.com/\u{feff}/foo" => ['scheme' => 'http', 'host' => 'example.com'], "http://example.com\u{002f}\u{202e}\u{002f}\u{0066}\u{006f}\u{006f}\u{002f}\u{202d}\u{002f}\u{0062}\u{0061}\u{0072}\u{0027}\u{0020}" => null, 'http://www.google.com/foo?bar=baz#' => ['scheme' => 'http', 'host' => 'www.google.com'], - 'http://www.google.com/foo?bar=baz# »' => null, + 'http://www.google.com/foo?bar=baz# »' => ['scheme' => 'http', 'host' => 'www.google.com'], 'data:test# »' => null, 'http://www.google.com' => ['scheme' => 'http', 'host' => 'www.google.com'], 'http://192.0x00A80001' => ['scheme' => 'http', 'host' => '192.0x00A80001'], @@ -810,6 +846,22 @@ public static function provideParse(): iterable 'a\\/\\/' => ['scheme' => null, 'host' => null], 'test-a-colon.html' => ['scheme' => null, 'host' => null], 'test-a-colon-b.html' => ['scheme' => null, 'host' => null], + 'https://example.com/path with space' => ['scheme' => 'https', 'host' => 'example.com'], + 'https://example.com:80/path with space' => ['scheme' => 'https', 'host' => 'example.com'], + 'example.com/path with space' => ['scheme' => null, 'host' => null], + 'https://user@example.com/path with space' => ['scheme' => 'https', 'host' => 'example.com'], + 'https://user with space@www.example.com/path with space' => null, + 'https://example.com?query=with space' => ['scheme' => 'https', 'host' => 'example.com'], + '//example.com/path with space' => ['scheme' => null, 'host' => 'example.com'], + '/file with space.html' => ['scheme' => null, 'host' => null], + 'file with space.html' => ['scheme' => null, 'host' => null], + 'mailto:foo bar@example.com' => null, + 'https://[::1]/path with space' => ['scheme' => 'https', 'host' => '[::1]'], + "http://example.com/foo\u{202E}bar" => null, + "http://example.com/foo\u{202D}bar with space" => null, + "http://example.com/\u{2066}bar with space" => null, + "http://example.com/\u{2069}bar" => null, + "http://example.com\u{202E}/foo" => null, ]; foreach ($urls as $url => $expected) { diff --git a/src/Symfony/Component/HtmlSanitizer/TextSanitizer/UrlSanitizer.php b/src/Symfony/Component/HtmlSanitizer/TextSanitizer/UrlSanitizer.php index 6ebfee8e8f2d9..331e0147e5eca 100644 --- a/src/Symfony/Component/HtmlSanitizer/TextSanitizer/UrlSanitizer.php +++ b/src/Symfony/Component/HtmlSanitizer/TextSanitizer/UrlSanitizer.php @@ -35,6 +35,10 @@ public static function sanitize(?string $input, ?array $allowedSchemes = null, b return null; } + if (false !== strpbrk($input, '\\') || preg_match('~^(?:https?|ftp|wss?):(/[^/]|///)~i', $input)) { + return null; + } + $url = self::parse($input); // Malformed URL @@ -94,12 +98,43 @@ public static function parse(string $url): ?array } try { - $parsedUrl = UriString::parse($url); + // Reject explicit-direction BiDi formatting characters: they have no + // legitimate place in a URL and enable visual spoofing of the rendered + // href when the URL is later embedded in HTML. + if (preg_match('/[\x{202A}-\x{202E}\x{2066}-\x{2069}]/u', $url)) { + return null; + } + + // Browsers tolerate spaces inside path/query/fragment by transparently + // percent-encoding them. Mirror that behavior, but never inside the + // scheme or authority (where spaces are illegal); the whitespace check + // below rejects any space that didn't fit in the encoded slice. + if (str_contains($url, ' ')) { + if (str_starts_with($url, ' ')) { + return null; + } + + if (false !== $i = strpos($url, '://')) { + $i += 3 + strcspn($url, '/?#', $i + 3); + } elseif (str_starts_with($url, '//')) { + $i = 2 + strcspn($url, '/?#', 2); + } elseif (preg_match('#^[a-z][a-z0-9+.\-]*:#i', $url)) { + // Hostless scheme (data:, mailto:, …): leave the URL untouched + // and let the whitespace check reject it. + $i = \strlen($url); + } else { + $i = 0; + } + + $url = substr($url, 0, $i).str_replace(' ', '%20', substr($url, $i)); + } if (preg_match('/\s/', $url)) { return null; } + $parsedUrl = UriString::parse($url); + if (isset($parsedUrl['host']) && self::decodeUnreservedCharacters($parsedUrl['host']) !== $parsedUrl['host']) { return null; } diff --git a/src/Symfony/Component/HtmlSanitizer/Visitor/AttributeSanitizer/UrlAttributeSanitizer.php b/src/Symfony/Component/HtmlSanitizer/Visitor/AttributeSanitizer/UrlAttributeSanitizer.php index a3dbf2f098663..7a4b5d44a689c 100644 --- a/src/Symfony/Component/HtmlSanitizer/Visitor/AttributeSanitizer/UrlAttributeSanitizer.php +++ b/src/Symfony/Component/HtmlSanitizer/Visitor/AttributeSanitizer/UrlAttributeSanitizer.php @@ -27,12 +27,12 @@ public function getSupportedElements(): ?array public function getSupportedAttributes(): ?array { - return ['src', 'href', 'lowsrc', 'background', 'ping']; + return ['src', 'href', 'lowsrc', 'background', 'ping', 'action', 'formaction', 'poster', 'cite']; } public function sanitizeAttribute(string $element, string $attribute, string $value, HtmlSanitizerConfig $config): ?string { - if ('a' === $element) { + if (\in_array($element, ['a', 'area'], true) || \in_array($attribute, ['action', 'formaction', 'cite'], true)) { return UrlSanitizer::sanitize( $value, $config->getAllowedLinkSchemes(), diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 2c3af1ae5c339..117e0c8f16867 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -836,10 +836,6 @@ public function getClientIps(): array * being the original client, and each successive proxy that passed the request * adding the IP address where it received the request from. * - * If your reverse proxy uses a different header name than "X-Forwarded-For", - * ("Client-Ip" for instance), configure it via the $trustedHeaderSet - * argument of the Request::setTrustedProxies() method instead. - * * @see getClientIps() * @see https://wikipedia.org/wiki/X-Forwarded-For */ diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestValueResolver.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestValueResolver.php index 6347f70196681..ef3cc831ea101 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestValueResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/RequestValueResolver.php @@ -35,6 +35,15 @@ public function supports(Request $request, ArgumentMetadata $argument): bool public function resolve(Request $request, ArgumentMetadata $argument): array { - return Request::class === $argument->getType() || is_subclass_of($argument->getType(), Request::class) ? [$request] : []; + $type = $argument->getType(); + if (Request::class !== $type && !is_subclass_of($type, Request::class)) { + return []; + } + + if ($request->attributes->has($argument->getName())) { + return []; + } + + return [$request]; } } diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/SessionValueResolver.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/SessionValueResolver.php index c8e7575d5397a..45d8b1fa844e9 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/SessionValueResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/SessionValueResolver.php @@ -54,6 +54,10 @@ public function resolve(Request $request, ArgumentMetadata $argument): array return []; } + if ($request->attributes->has($argument->getName())) { + return []; + } + return $request->getSession() instanceof $type ? [$request->getSession()] : []; } } diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index 56d5261ec8545..00e574a7c02b3 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -77,11 +77,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static array $freshCache = []; - public const VERSION = '6.4.39'; - public const VERSION_ID = 60439; + public const VERSION = '6.4.40'; + public const VERSION_ID = 60440; public const MAJOR_VERSION = 6; public const MINOR_VERSION = 4; - public const RELEASE_VERSION = 39; + public const RELEASE_VERSION = 40; public const EXTRA_VERSION = ''; public const END_OF_MAINTENANCE = '11/2026'; diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestValueResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestValueResolverTest.php new file mode 100644 index 0000000000000..fb584a6ccf0ce --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestValueResolverTest.php @@ -0,0 +1,70 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver; +use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; +use Symfony\Component\HttpKernel\Tests\Fixtures\Controller\ExtendingRequest; + +class RequestValueResolverTest extends TestCase +{ + public function testResolveReturnsMainRequest() + { + $resolver = new RequestValueResolver(); + $request = Request::create('/'); + $metadata = new ArgumentMetadata('request', Request::class, false, false, null); + + $this->assertSame([$request], $resolver->resolve($request, $metadata)); + } + + public function testResolveSkipsUnrelatedTypes() + { + $resolver = new RequestValueResolver(); + $request = Request::create('/'); + $metadata = new ArgumentMetadata('foo', \stdClass::class, false, false, null); + + $this->assertSame([], $resolver->resolve($request, $metadata)); + } + + public function testResolveSupportsExtendingRequest() + { + $resolver = new RequestValueResolver(); + $request = new ExtendingRequest(); + $metadata = new ArgumentMetadata('request', ExtendingRequest::class, false, false, null); + + $this->assertSame([$request], $resolver->resolve($request, $metadata)); + } + + public function testResolveDefersWhenMatchingNamedAttributeExists() + { + $resolver = new RequestValueResolver(); + $request = Request::create('/'); + $request->attributes->set('request', Request::create('/other')); + + $metadata = new ArgumentMetadata('request', Request::class, false, false, null); + + $this->assertSame([], $resolver->resolve($request, $metadata)); + } + + public function testResolveIgnoresUnrelatedAttributeName() + { + $resolver = new RequestValueResolver(); + $request = Request::create('/'); + $request->attributes->set('foo', Request::create('/other')); + + $metadata = new ArgumentMetadata('request', Request::class, false, false, null); + + $this->assertSame([$request], $resolver->resolve($request, $metadata)); + } +} diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/SessionValueResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/SessionValueResolverTest.php new file mode 100644 index 0000000000000..a8da04b44453f --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/SessionValueResolverTest.php @@ -0,0 +1,70 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; +use Symfony\Component\HttpKernel\Controller\ArgumentResolver\SessionValueResolver; +use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; + +class SessionValueResolverTest extends TestCase +{ + public function testResolveReturnsSession() + { + $resolver = new SessionValueResolver(); + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/'); + $request->setSession($session); + + $metadata = new ArgumentMetadata('session', SessionInterface::class, false, false, null); + + $this->assertSame([$session], $resolver->resolve($request, $metadata)); + } + + public function testResolveSkipsWhenNoSession() + { + $resolver = new SessionValueResolver(); + $request = Request::create('/'); + + $metadata = new ArgumentMetadata('session', SessionInterface::class, false, false, null); + + $this->assertSame([], $resolver->resolve($request, $metadata)); + } + + public function testResolveSkipsUnrelatedTypes() + { + $resolver = new SessionValueResolver(); + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/'); + $request->setSession($session); + + $metadata = new ArgumentMetadata('foo', \stdClass::class, false, false, null); + + $this->assertSame([], $resolver->resolve($request, $metadata)); + } + + public function testResolveDefersWhenMatchingNamedAttributeExists() + { + $resolver = new SessionValueResolver(); + $session = new Session(new MockArraySessionStorage()); + $request = Request::create('/'); + $request->setSession($session); + $request->attributes->set('session', new Session(new MockArraySessionStorage())); + + $metadata = new ArgumentMetadata('session', SessionInterface::class, false, false, null); + + $this->assertSame([], $resolver->resolve($request, $metadata)); + } +} diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Webhook/MailjetRequestParserTest.php b/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Webhook/MailjetRequestParserTest.php index 6001db4e90e9e..0b77795b61dda 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Webhook/MailjetRequestParserTest.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/Tests/Webhook/MailjetRequestParserTest.php @@ -11,9 +11,11 @@ namespace Symfony\Component\Mailer\Bridge\Mailjet\Tests\Webhook; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Mailer\Bridge\Mailjet\RemoteEvent\MailjetPayloadConverter; use Symfony\Component\Mailer\Bridge\Mailjet\Webhook\MailjetRequestParser; use Symfony\Component\Webhook\Client\RequestParserInterface; +use Symfony\Component\Webhook\Exception\RejectWebhookException; use Symfony\Component\Webhook\Test\AbstractRequestParserTestCase; class MailjetRequestParserTest extends AbstractRequestParserTestCase @@ -22,4 +24,44 @@ protected function createRequestParser(): RequestParserInterface { return new MailjetRequestParser(new MailjetPayloadConverter()); } + + protected function getSecret(): string + { + return ':top-secret'; + } + + protected function createRequest(string $payload): Request + { + return Request::create('/', 'POST', [], [], [], [ + 'Content-Type' => 'application/json', + 'HTTP_Authorization' => 'Basic '.base64_encode(':top-secret'), + ], $payload); + } + + public function testRejectMissingCredentials() + { + $parser = new MailjetRequestParser(new MailjetPayloadConverter()); + $payload = file_get_contents(__DIR__.'/Fixtures/sent.json'); + $request = Request::create('/', 'POST', [], [], [], [ + 'Content-Type' => 'application/json', + ], $payload); + + $this->expectException(RejectWebhookException::class); + $this->expectExceptionMessage('Invalid credentials.'); + $parser->parse($request, ':top-secret'); + } + + public function testRejectWrongSecret() + { + $parser = new MailjetRequestParser(new MailjetPayloadConverter()); + $payload = file_get_contents(__DIR__.'/Fixtures/sent.json'); + $request = Request::create('/', 'POST', [], [], [], [ + 'Content-Type' => 'application/json', + 'HTTP_Authorization' => 'Basic '.base64_encode(':wrong-secret'), + ], $payload); + + $this->expectException(RejectWebhookException::class); + $this->expectExceptionMessage('Invalid credentials.'); + $parser->parse($request, ':top-secret'); + } } diff --git a/src/Symfony/Component/Mailer/Bridge/Mailjet/Webhook/MailjetRequestParser.php b/src/Symfony/Component/Mailer/Bridge/Mailjet/Webhook/MailjetRequestParser.php index 31d8f9243ecf7..c77e87a406131 100644 --- a/src/Symfony/Component/Mailer/Bridge/Mailjet/Webhook/MailjetRequestParser.php +++ b/src/Symfony/Component/Mailer/Bridge/Mailjet/Webhook/MailjetRequestParser.php @@ -39,6 +39,10 @@ protected function getRequestMatcher(): RequestMatcherInterface protected function doParse(Request $request, #[\SensitiveParameter] string $secret): ?AbstractMailerEvent { + if ($secret && !hash_equals('Basic '.base64_encode($secret), $request->headers->get('Authorization', ''))) { + throw new RejectWebhookException(403, 'Invalid credentials.'); + } + try { return $this->converter->convert($request->toArray()); } catch (ParseException $e) { diff --git a/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php b/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php index 057f9c5e69c5e..cf7e9d806830e 100644 --- a/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php +++ b/src/Symfony/Component/Mailer/Tests/Transport/SendmailTransportTest.php @@ -67,7 +67,7 @@ public function testToIsUsedWhenRecipientsAreNotSet() $sendmailTransport = new SendmailTransport(self::FAKE_SENDMAIL); $sendmailTransport->send($mail, $envelope); - $this->assertStringEqualsFile($this->argsPath, __DIR__.'/Fixtures/fake-sendmail.php -ffrom@mail.com to@mail.com'); + $this->assertStringEqualsFile($this->argsPath, __DIR__.'/Fixtures/fake-sendmail.php -ffrom@mail.com -- to@mail.com'); } public function testRecipientsAreUsedWhenSet() @@ -79,7 +79,7 @@ public function testRecipientsAreUsedWhenSet() $sendmailTransport = new SendmailTransport(self::FAKE_SENDMAIL); $sendmailTransport->send($mail, $envelope); - $this->assertStringEqualsFile($this->argsPath, __DIR__.'/Fixtures/fake-sendmail.php -ffrom@mail.com recipient@mail.com'); + $this->assertStringEqualsFile($this->argsPath, __DIR__.'/Fixtures/fake-sendmail.php -ffrom@mail.com -- recipient@mail.com'); } public function testThrowsTransportExceptionOnFailure() diff --git a/src/Symfony/Component/Mailer/Transport/SendmailTransport.php b/src/Symfony/Component/Mailer/Transport/SendmailTransport.php index 45cf503e162b2..48960df0fa63a 100644 --- a/src/Symfony/Component/Mailer/Transport/SendmailTransport.php +++ b/src/Symfony/Component/Mailer/Transport/SendmailTransport.php @@ -107,6 +107,9 @@ protected function doSend(SentMessage $message): void $chunks = AbstractStream::replace("\n.", "\n..", $chunks); } + if ($recipients) { + $command .= ' --'; + } foreach ($recipients as $recipient) { $command .= ' '.escapeshellarg($recipient->getEncodedAddress()); } diff --git a/src/Symfony/Component/Mime/Address.php b/src/Symfony/Component/Mime/Address.php index a78b64321d7fb..1805f119b0f20 100644 --- a/src/Symfony/Component/Mime/Address.php +++ b/src/Symfony/Component/Mime/Address.php @@ -50,6 +50,10 @@ public function __construct(string $address, string $name = '') $this->address = trim($address); $this->name = trim(str_replace(["\n", "\r"], '', $name)); + if (preg_match('/[\x00-\x1F\x7F]/', $this->address)) { + throw new InvalidArgumentException('Email address contains control characters.'); + } + if (!self::$validator->isValid($this->address, class_exists(MessageIDValidation::class) ? new MessageIDValidation() : new RFCValidation())) { throw new RfcComplianceException(\sprintf('Email "%s" does not comply with addr-spec of RFC 2822.', $address)); } diff --git a/src/Symfony/Component/Mime/Tests/AddressTest.php b/src/Symfony/Component/Mime/Tests/AddressTest.php index baef170efc4f6..e76205066dcea 100644 --- a/src/Symfony/Component/Mime/Tests/AddressTest.php +++ b/src/Symfony/Component/Mime/Tests/AddressTest.php @@ -38,6 +38,26 @@ public function testConstructorWithInvalidAddress() new Address('fab pot@symfony.com'); } + /** + * @dataProvider provideAddressesWithControlCharacters + */ + public function testConstructorRejectsControlCharactersInAddress(string $address) + { + $this->expectException(InvalidArgumentException::class); + new Address($address); + } + + public static function provideAddressesWithControlCharacters(): iterable + { + yield 'CRLF in quoted-string' => ["\"x\r\nBcc: attacker@evil\"@example.com"]; + yield 'CR only' => ["foo\r@example.com"]; + yield 'LF only' => ["foo\n@example.com"]; + yield 'NUL byte' => ["foo\x00@example.com"]; + yield 'HTAB' => ["foo\t@example.com"]; + yield 'DEL (0x7F)' => ["foo\x7F@example.com"]; + yield 'control char in domain' => ["foo@example\x01.com"]; + } + public function testCreate() { $this->assertSame($a = new Address('fabien@symfony.com'), Address::create($a)); diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/Webhook/TwilioRequestParserTest.php b/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/Webhook/TwilioRequestParserTest.php index 8a9d2ed78a37c..f0cf2bfffad5e 100644 --- a/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/Webhook/TwilioRequestParserTest.php +++ b/src/Symfony/Component/Notifier/Bridge/Twilio/Tests/Webhook/TwilioRequestParserTest.php @@ -14,6 +14,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Notifier\Bridge\Twilio\Webhook\TwilioRequestParser; use Symfony\Component\Webhook\Client\RequestParserInterface; +use Symfony\Component\Webhook\Exception\RejectWebhookException; use Symfony\Component\Webhook\Test\AbstractRequestParserTestCase; class TwilioRequestParserTest extends AbstractRequestParserTestCase @@ -36,4 +37,86 @@ protected static function getFixtureExtension(): string { return 'txt'; } + + public function testValidSignatureIsAccepted() + { + $secret = 's3cret-token'; + $params = [ + 'MessageSid' => 'SM1234', + 'MessageStatus' => 'delivered', + 'To' => '+15555550100', + ]; + $url = 'https://example.com/webhook'; + $signature = $this->computeTwilioSignature($url, $params, $secret); + + $request = Request::create($url, 'POST', $params, [], [], [ + 'Content-Type' => 'application/x-www-form-urlencoded', + 'HTTP_X-Twilio-Signature' => $signature, + ]); + + $event = (new TwilioRequestParser())->parse($request, $secret); + $this->assertNotNull($event); + $this->assertSame('SM1234', $event->getId()); + } + + public function testMissingSignatureHeaderIsRejected() + { + $request = Request::create('https://example.com/webhook', 'POST', [ + 'MessageSid' => 'SM1234', + 'MessageStatus' => 'delivered', + 'To' => '+15555550100', + ], [], [], [ + 'Content-Type' => 'application/x-www-form-urlencoded', + ]); + + $this->expectException(RejectWebhookException::class); + (new TwilioRequestParser())->parse($request, 's3cret-token'); + } + + public function testBadSignatureIsRejected() + { + $request = Request::create('https://example.com/webhook', 'POST', [ + 'MessageSid' => 'SM1234', + 'MessageStatus' => 'delivered', + 'To' => '+15555550100', + ], [], [], [ + 'Content-Type' => 'application/x-www-form-urlencoded', + 'HTTP_X-Twilio-Signature' => base64_encode('not-the-right-mac'), + ]); + + $this->expectException(RejectWebhookException::class); + (new TwilioRequestParser())->parse($request, 's3cret-token'); + } + + public function testJsonContentTypeIsRejected() + { + $request = Request::create( + 'https://example.com/webhook', + 'POST', + [], + [], + [], + ['Content-Type' => 'application/json'], + json_encode([ + 'MessageSid' => 'SM1234', + 'MessageStatus' => 'delivered', + 'To' => '+15555550100', + ]) + ); + + $this->expectException(RejectWebhookException::class); + $this->expectExceptionMessage('Payload is malformed.'); + (new TwilioRequestParser())->parse($request, 's3cret-token'); + } + + private function computeTwilioSignature(string $url, array $params, string $secret): string + { + ksort($params); + $data = $url; + foreach ($params as $k => $v) { + $data .= $k.$v; + } + + return base64_encode(hash_hmac('sha1', $data, $secret, true)); + } } diff --git a/src/Symfony/Component/Notifier/Bridge/Twilio/Webhook/TwilioRequestParser.php b/src/Symfony/Component/Notifier/Bridge/Twilio/Webhook/TwilioRequestParser.php index 84d8f2ee744f9..267b1702e47f4 100644 --- a/src/Symfony/Component/Notifier/Bridge/Twilio/Webhook/TwilioRequestParser.php +++ b/src/Symfony/Component/Notifier/Bridge/Twilio/Webhook/TwilioRequestParser.php @@ -38,6 +38,10 @@ protected function doParse(Request $request, #[\SensitiveParameter] string $secr throw new RejectWebhookException(406, 'Payload is malformed.'); } + if ('' !== $secret) { + $this->verifySignature($request, $payload, $secret); + } + $name = match ($payload['MessageStatus']) { 'delivered' => SmsEvent::DELIVERED, 'failed' => SmsEvent::FAILED, @@ -50,7 +54,7 @@ protected function doParse(Request $request, #[\SensitiveParameter] string $secr 'receiving' => null, 'received' => null, 'scheduled' => null, - default => throw new RejectWebhookException(406, \sprintf('Unsupported event "%s".', $payload['event'])), + default => throw new RejectWebhookException(406, \sprintf('Unsupported event "%s".', $payload['MessageStatus'])), }; if (!$name) { return null; @@ -60,4 +64,30 @@ protected function doParse(Request $request, #[\SensitiveParameter] string $secr return $event; } + + /** + * Validates the X-Twilio-Signature header against the documented scheme: + * HMAC-SHA1 over the full request URL concatenated with the POST parameters + * sorted alphabetically by key (key1.value1.key2.value2...), then base64-encoded. + * + * @see https://www.twilio.com/docs/usage/webhooks/webhooks-security + */ + private function verifySignature(Request $request, array $payload, #[\SensitiveParameter] string $secret): void + { + if (!$signature = $request->headers->get('X-Twilio-Signature')) { + throw new RejectWebhookException(406, 'Missing signature header.'); + } + + ksort($payload); + $data = $request->getUri(); + foreach ($payload as $key => $value) { + $data .= $key.$value; + } + + $expected = base64_encode(hash_hmac('sha1', $data, $secret, true)); + + if (!hash_equals($expected, $signature)) { + throw new RejectWebhookException(406, 'Signature is invalid.'); + } + } } diff --git a/src/Symfony/Component/Routing/Generator/UrlGenerator.php b/src/Symfony/Component/Routing/Generator/UrlGenerator.php index 754cf5e8687cc..98d502db51e21 100644 --- a/src/Symfony/Component/Routing/Generator/UrlGenerator.php +++ b/src/Symfony/Component/Routing/Generator/UrlGenerator.php @@ -177,7 +177,7 @@ protected function doGenerate(array $variables, array $defaults, array $requirem if (!$optional || $important || !\array_key_exists($varName, $defaults) || (null !== $mergedParams[$varName] && (string) $mergedParams[$varName] !== (string) $defaults[$varName])) { // check requirement (while ignoring look-around patterns) - if (null !== $this->strictRequirements && !preg_match('#^'.preg_replace('/\(\?(?:=|<=|!|strictRequirements && !preg_match('#^(?:'.preg_replace('/\(\?(?:=|<=|!|strictRequirements) { throw new InvalidParameterException(strtr($message, ['{parameter}' => $varName, '{route}' => $name, '{expected}' => $token[2], '{given}' => $mergedParams[$varName]])); } @@ -230,7 +230,7 @@ protected function doGenerate(array $variables, array $defaults, array $requirem foreach ($hostTokens as $token) { if ('variable' === $token[0]) { // check requirement (while ignoring look-around patterns) - if (null !== $this->strictRequirements && !preg_match('#^'.preg_replace('/\(\?(?:=|<=|!|strictRequirements && !preg_match('#^(?:'.preg_replace('/\(\?(?:=|<=|!|strictRequirements) { throw new InvalidParameterException(strtr($message, ['{parameter}' => $token[3], '{route}' => $name, '{expected}' => $token[2], '{given}' => $mergedParams[$token[3]]])); } diff --git a/src/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php b/src/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php index 733239d6f3f54..b1b6373821fca 100644 --- a/src/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php +++ b/src/Symfony/Component/Routing/Tests/Generator/UrlGeneratorTest.php @@ -366,6 +366,14 @@ public function testGenerateForRouteWithInvalidParameter() $this->getGenerator($routes)->generate('test', ['foo' => '0'], UrlGeneratorInterface::ABSOLUTE_URL); } + public function testGenerateForRouteWithAlternationRequirementRejectsSubstringMatch() + { + $routes = $this->getRoutes('test', new Route('/{_locale}/blog', [], ['_locale' => 'en|fr|vi|de'])); + + $this->expectException(InvalidParameterException::class); + $this->getGenerator($routes)->generate('test', ['_locale' => '/evil.com']); + } + public function testGenerateForRouteWithInvalidOptionalParameterNonStrict() { $routes = $this->getRoutes('test', new Route('/testing/{foo}', ['foo' => '1'], ['foo' => 'd+'])); diff --git a/src/Symfony/Component/Runtime/SymfonyRuntime.php b/src/Symfony/Component/Runtime/SymfonyRuntime.php index a6e1cba733f6e..acc1a38d7b4a8 100644 --- a/src/Symfony/Component/Runtime/SymfonyRuntime.php +++ b/src/Symfony/Component/Runtime/SymfonyRuntime.php @@ -96,7 +96,7 @@ public function __construct(array $options = []) if (isset($options['env'])) { $_SERVER[$envKey] = $options['env']; - } elseif (empty($_GET) && isset($_SERVER['argv']) && class_exists(ArgvInput::class)) { + } elseif (!isset($_SERVER['QUERY_STRING']) && isset($_SERVER['argv']) && class_exists(ArgvInput::class)) { $this->options = $options; $this->getInput(); } @@ -208,7 +208,7 @@ protected static function register(GenericRuntime $runtime): GenericRuntime private function getInput(): ArgvInput { - if (!empty($_GET) && filter_var(\ini_get('register_argc_argv'), \FILTER_VALIDATE_BOOL)) { + if (isset($_SERVER['QUERY_STRING']) && filter_var(\ini_get('register_argc_argv'), \FILTER_VALIDATE_BOOL)) { throw new \Exception('CLI applications cannot be run safely on non-CLI SAPIs with register_argc_argv=On.'); } diff --git a/src/Symfony/Component/Runtime/Tests/phpt/kernel_query_string_argv_bypass.phpt b/src/Symfony/Component/Runtime/Tests/phpt/kernel_query_string_argv_bypass.phpt new file mode 100644 index 0000000000000..975145d4c4b5d --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/kernel_query_string_argv_bypass.phpt @@ -0,0 +1,21 @@ +--TEST-- +Test that argv is ignored on web requests even when $_GET parses empty (QUERY_STRING gap) +--INI-- +display_errors=1 +register_argc_argv=1 +--FILE-- + +--EXPECTF-- +OK Kernel (env=dev) foo_bar diff --git a/src/Symfony/Component/Runtime/Tests/phpt/kernel_register_argc_argv.phpt b/src/Symfony/Component/Runtime/Tests/phpt/kernel_register_argc_argv.phpt index 4da82d2ac6408..3f6b5a57640d1 100644 --- a/src/Symfony/Component/Runtime/Tests/phpt/kernel_register_argc_argv.phpt +++ b/src/Symfony/Component/Runtime/Tests/phpt/kernel_register_argc_argv.phpt @@ -8,6 +8,7 @@ register_argc_argv=1 // emulating PHP behavior with register_argc_argv=1 $_GET['-e_test'] = ''; +$_SERVER['QUERY_STRING'] = '-e_test='; $_SERVER['argc'] = 1; $_SERVER['argv'] = [' ', '-e', 'test']; diff --git a/src/Symfony/Component/Security/Http/AccessToken/Oidc/OidcTokenHandler.php b/src/Symfony/Component/Security/Http/AccessToken/Oidc/OidcTokenHandler.php index f125eb5701b6a..b86a8f1d2cfd2 100644 --- a/src/Symfony/Component/Security/Http/AccessToken/Oidc/OidcTokenHandler.php +++ b/src/Symfony/Component/Security/Http/AccessToken/Oidc/OidcTokenHandler.php @@ -85,7 +85,7 @@ public function getUserBadgeFrom(string $accessToken): UserBadge ]; $claimCheckerManager = new ClaimCheckerManager($checkers); // if this check fails, an InvalidClaimException is thrown - $claimCheckerManager->check($claims); + $claimCheckerManager->check($claims, ['iat', 'exp', 'aud', 'iss']); if (empty($claims[$this->claim])) { throw new MissingClaimException(\sprintf('"%s" claim not found.', $this->claim)); diff --git a/src/Symfony/Component/Security/Http/Authenticator/X509Authenticator.php b/src/Symfony/Component/Security/Http/Authenticator/X509Authenticator.php index ed2d686cd846d..f2161b3bb57a1 100644 --- a/src/Symfony/Component/Security/Http/Authenticator/X509Authenticator.php +++ b/src/Symfony/Component/Security/Http/Authenticator/X509Authenticator.php @@ -48,7 +48,13 @@ protected function extractUsername(Request $request): string $username = $request->server->get($this->userKey); } elseif ( $request->server->has($this->credentialsKey) - && preg_match('#'.preg_quote($this->credentialUserIdentifier, '#').'=([^,/]++)#', $request->server->get($this->credentialsKey), $matches) + && preg_match( + 'emailAddress' === $this->credentialUserIdentifier + ? '#(?:^|[,/])\s*(?:emailAddress|1\.2\.840\.113549\.1\.9\.1)=([^,/@]++@[^,/]++)#' + : '#(?:^|[,/])\s*'.preg_quote($this->credentialUserIdentifier, '#').'=([^,/]++)#', + $request->server->get($this->credentialsKey), + $matches, + ) ) { $username = trim($matches[1]); } diff --git a/src/Symfony/Component/Security/Http/Tests/AccessToken/Oidc/OidcTokenHandlerTest.php b/src/Symfony/Component/Security/Http/Tests/AccessToken/Oidc/OidcTokenHandlerTest.php index 30a85f3ea6829..91f5d7770329a 100644 --- a/src/Symfony/Component/Security/Http/Tests/AccessToken/Oidc/OidcTokenHandlerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/AccessToken/Oidc/OidcTokenHandlerTest.php @@ -98,10 +98,8 @@ public function testThrowsAnErrorIfTokenIsInvalid(string $token) public static function getInvalidTokens(): iterable { - // Invalid token - yield ['invalid']; - // Token is expired - yield [ + yield 'Invalid token' => ['invalid']; + yield 'Token is expired' => [ self::buildJWS(json_encode([ 'iat' => time() - 3600, 'nbf' => time() - 3600, @@ -112,8 +110,7 @@ public static function getInvalidTokens(): iterable 'email' => 'foo@example.com', ])), ]; - // Invalid audience - yield [ + yield 'Invalid audience' => [ self::buildJWS(json_encode([ 'iat' => time(), 'nbf' => time(), @@ -124,6 +121,42 @@ public static function getInvalidTokens(): iterable 'email' => 'foo@example.com', ])), ]; + yield 'Missing "aud" claim' => [ + self::buildJWS(json_encode([ + 'iat' => time(), + 'nbf' => time(), + 'exp' => time() + 3600, + 'iss' => 'https://www.example.com', + 'sub' => 'e21bf182-1538-406e-8ccb-e25a17aba39f', + ])), + ]; + yield 'Missing "iss" claim' => [ + self::buildJWS(json_encode([ + 'iat' => time(), + 'nbf' => time(), + 'exp' => time() + 3600, + 'aud' => self::AUDIENCE, + 'sub' => 'e21bf182-1538-406e-8ccb-e25a17aba39f', + ])), + ]; + yield 'Missing "exp" claim' => [ + self::buildJWS(json_encode([ + 'iat' => time(), + 'nbf' => time(), + 'iss' => 'https://www.example.com', + 'aud' => self::AUDIENCE, + 'sub' => 'e21bf182-1538-406e-8ccb-e25a17aba39f', + ])), + ]; + yield 'Missing "iat" claim' => [ + self::buildJWS(json_encode([ + 'nbf' => time(), + 'exp' => time() + 3600, + 'iss' => 'https://www.example.com', + 'aud' => self::AUDIENCE, + 'sub' => 'e21bf182-1538-406e-8ccb-e25a17aba39f', + ])), + ]; } public function testThrowsAnErrorIfUserPropertyIsMissing() diff --git a/src/Symfony/Component/Security/Http/Tests/Authenticator/X509AuthenticatorTest.php b/src/Symfony/Component/Security/Http/Tests/Authenticator/X509AuthenticatorTest.php index afc6335d2635b..50e89a1efea97 100644 --- a/src/Symfony/Component/Security/Http/Tests/Authenticator/X509AuthenticatorTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Authenticator/X509AuthenticatorTest.php @@ -81,6 +81,26 @@ public static function provideServerVarsNoUser() yield ['cert+something@example.com', 'emailAddress=cert+something@example.com,CN=Sample certificate DN']; yield ['cert+something@example.com', 'emailAddress=cert+something@example.com']; yield ['firstname.lastname@mycompany.co.uk', 'emailAddress=firstname.lastname@mycompany.co.uk,CN=Firstname.Lastname,OU=london,OU=company design and engineering,OU=Issuer London,OU=Roaming,OU=Interactive,OU=Users,OU=Standard,OU=Business,DC=england,DC=core,DC=company,DC=co,DC=uk']; + yield ['cert@example.com', '1.2.840.113549.1.9.1=cert@example.com,CN=Sample certificate DN']; + yield ['cert@example.com', 'CN=Sample certificate DN/1.2.840.113549.1.9.1=cert@example.com']; + } + + /** + * @dataProvider provideSpoofedDns + */ + public function testAuthenticationRejectsSpoofedEmailInDn(string $dn) + { + $request = $this->createRequest(['SSL_CLIENT_S_DN' => $dn]); + + $this->assertFalse($this->authenticator->supports($request)); + } + + public static function provideSpoofedDns() + { + yield ['CN=emailAddress=admin@target.example,O=Attacker Corp']; + yield ['CN=foo,OU=emailAddress=admin@target.example,O=Attacker']; + yield ['CN=1.2.840.113549.1.9.1=admin@target.example,O=Attacker Corp']; + yield ['CN=foo,OU=1.2.840.113549.1.9.1=admin@target.example,O=Attacker']; } public function testSupportNoData() diff --git a/src/Symfony/Component/Yaml/CHANGELOG.md b/src/Symfony/Component/Yaml/CHANGELOG.md index 0c2021f48b2ef..61ac370ecaf1c 100644 --- a/src/Symfony/Component/Yaml/CHANGELOG.md +++ b/src/Symfony/Component/Yaml/CHANGELOG.md @@ -20,6 +20,9 @@ CHANGELOG 5.4 --- + * Add a `$maxNestingLevel` argument to `Parser::__construct()`, `Yaml::parse()` and `Yaml::parseFile()` to bound recursion depth (default 128) + * Add a `$maxAliasesForCollections` argument to `Parser::__construct()`, `Yaml::parse()` and `Yaml::parseFile()` to bound alias expansion of collection values (default 128) + * Add `Yaml::PARSE_EXCEPTION_ON_ALIAS` to reject YAML aliases while parsing untrusted input * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml` option to exclude one or more specific files from multiple file list * Allow negatable for the parse tags option with `--no-parse-tags` diff --git a/src/Symfony/Component/Yaml/Inline.php b/src/Symfony/Component/Yaml/Inline.php index e8e7a04f3e3a1..08730aafd453b 100644 --- a/src/Symfony/Component/Yaml/Inline.php +++ b/src/Symfony/Component/Yaml/Inline.php @@ -55,9 +55,10 @@ public static function initialize(int $flags, ?int $parsedLineNumber = null, ?st * * @throws ParseException */ - public static function parse(string $value, int $flags = 0, array &$references = []): mixed + public static function parse(string $value, int $flags = 0, array &$references = [], ?ParserState $state = null): mixed { self::initialize($flags); + $state ??= new ParserState(); $value = trim($value); @@ -66,18 +67,19 @@ public static function parse(string $value, int $flags = 0, array &$references = } $i = 0; + $isQuoted = null; $tag = self::parseTag($value, $i, $flags); switch ($value[$i]) { case '[': - $result = self::parseSequence($value, $flags, $i, $references); + $result = self::parseSequence($state, $value, $flags, $i, $references); ++$i; break; case '{': - $result = self::parseMapping($value, $flags, $i, $references); + $result = self::parseMapping($state, $value, $flags, $i, $references); ++$i; break; default: - $result = self::parseScalar($value, $flags, null, $i, true, $references); + $result = self::parseScalar($value, $flags, null, $i, true, $references, $isQuoted, $state); } // some comments are allowed at the end @@ -267,7 +269,7 @@ private static function dumpNull(int $flags): string * * @throws ParseException When malformed inline YAML string is parsed */ - public static function parseScalar(string $scalar, int $flags = 0, ?array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], ?bool &$isQuoted = null): mixed + public static function parseScalar(string $scalar, int $flags = 0, ?array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], ?bool &$isQuoted = null, ?ParserState $state = null): mixed { if (\in_array($scalar[$i], ['"', "'"], true)) { // quoted scalar @@ -309,7 +311,8 @@ public static function parseScalar(string $scalar, int $flags = 0, ?array $delim } if ($evaluate) { - $output = self::evaluateScalar($output, $flags, $references, $isQuoted); + $state ??= new ParserState(); + $output = self::evaluateScalar($state, $output, $flags, $references, $isQuoted); } } @@ -346,96 +349,102 @@ private static function parseQuotedScalar(string $scalar, int &$i = 0): string * * @throws ParseException When malformed inline YAML string is parsed */ - private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array + private static function parseSequence(ParserState $state, string $sequence, int $flags, int &$i = 0, array &$references = []): array { + $state->enterNestingLevel(self::$parsedLineNumber + 1, null, self::$parsedFilename); + $output = []; $len = \strlen($sequence); ++$i; - // [foo, bar, ...] - $lastToken = null; - while ($i < $len) { - if (']' === $sequence[$i]) { - return $output; - } - if (',' === $sequence[$i] || ' ' === $sequence[$i]) { - if (',' === $sequence[$i] && (null === $lastToken || 'separator' === $lastToken)) { - $output[] = null; - } elseif (',' === $sequence[$i]) { - $lastToken = 'separator'; + try { + // [foo, bar, ...] + $lastToken = null; + while ($i < $len) { + if (']' === $sequence[$i]) { + return $output; } + if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + if (',' === $sequence[$i] && (null === $lastToken || 'separator' === $lastToken)) { + $output[] = null; + } elseif (',' === $sequence[$i]) { + $lastToken = 'separator'; + } - ++$i; - - continue; - } + ++$i; - $tag = self::parseTag($sequence, $i, $flags); - switch ($sequence[$i]) { - case '[': - // nested sequence - $value = self::parseSequence($sequence, $flags, $i, $references); - break; - case '{': - // nested mapping - $value = self::parseMapping($sequence, $flags, $i, $references); - break; - default: - $hasAnchorAtStart = null === $tag && isset($sequence[$i]) && '&' === $sequence[$i]; - $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted); - - // the value can be an array if a reference has been resolved to an array var - if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) { - // embedded mapping? - $j = $i; - $mappingValue = $value; - $mappingException = null; - do { - try { - $pos = 0; - $value = self::parseMapping('{'.$mappingValue.'}', $flags, $pos, $references); - $i = $j; - $mappingException = null; - break; - } catch (ParseException $exception) { - $mappingException = $exception; - if ($j >= $len) { - break; - } + continue; + } - $mappingValue .= $sequence[$j++]; - if ($j >= $len) { + $tag = self::parseTag($sequence, $i, $flags); + switch ($sequence[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($state, $sequence, $flags, $i, $references); + break; + case '{': + // nested mapping + $value = self::parseMapping($state, $sequence, $flags, $i, $references); + break; + default: + $hasAnchorAtStart = null === $tag && isset($sequence[$i]) && '&' === $sequence[$i]; + $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted, $state); + + // the value can be an array if a reference has been resolved to an array var + if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) { + // embedded mapping? + $j = $i; + $mappingValue = $value; + $mappingException = null; + do { + try { + $pos = 0; + $value = self::parseMapping($state, '{'.$mappingValue.'}', $flags, $pos, $references); + $i = $j; + $mappingException = null; break; + } catch (ParseException $exception) { + $mappingException = $exception; + if ($j >= $len) { + break; + } + + $mappingValue .= $sequence[$j++]; + if ($j >= $len) { + break; + } + + $mappingValue .= self::parseScalar($sequence, $flags, [',', ']'], $j, null === $tag, $references); } + } while ($j < $len); - $mappingValue .= self::parseScalar($sequence, $flags, [',', ']'], $j, null === $tag, $references); + if ($mappingException) { + throw $mappingException; } - } while ($j < $len); + } - if ($mappingException) { - throw $mappingException; + if ($hasAnchorAtStart && !$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { + $value = '' === $matches['value'] ? null : $matches['value']; + $references[$matches['ref']] = $value; } - } - if ($hasAnchorAtStart && !$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { - $value = '' === $matches['value'] ? null : $matches['value']; - $references[$matches['ref']] = $value; - } + --$i; + } - --$i; - } + if (null !== $tag && '' !== $tag) { + $value = new TaggedValue($tag, $value); + } - if (null !== $tag && '' !== $tag) { - $value = new TaggedValue($tag, $value); - } + $output[] = $value; - $output[] = $value; + $lastToken = 'value'; + ++$i; + } - $lastToken = 'value'; - ++$i; + throw new ParseException(\sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } finally { + $state->leaveNestingLevel(); } - - throw new ParseException(\sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); } /** @@ -443,144 +452,150 @@ private static function parseSequence(string $sequence, int $flags, int &$i = 0, * * @throws ParseException When malformed inline YAML string is parsed */ - private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass + private static function parseMapping(ParserState $state, string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass { + $state->enterNestingLevel(self::$parsedLineNumber + 1, null, self::$parsedFilename); + $output = []; $len = \strlen($mapping); ++$i; $allowOverwrite = false; - // {foo: bar, bar:foo, ...} - while ($i < $len) { - switch ($mapping[$i]) { - case ' ': - case ',': - case "\n": - ++$i; - continue 2; - case '}': - if (self::$objectForMap) { - return (object) $output; - } + try { + // {foo: bar, bar:foo, ...} + while ($i < $len) { + switch ($mapping[$i]) { + case ' ': + case ',': + case "\n": + ++$i; + continue 2; + case '}': + if (self::$objectForMap) { + return (object) $output; + } - return $output; - } + return $output; + } - // key - $offsetBeforeKeyParsing = $i; - $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); - $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false); + // key + $offsetBeforeKeyParsing = $i; + $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); + $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false); - if ($offsetBeforeKeyParsing === $i) { - throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); - } + if ($offsetBeforeKeyParsing === $i) { + throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); + } - if ('!php/const' === $key || '!php/enum' === $key) { - $key .= ' '.self::parseScalar($mapping, $flags, ['(?leaveNestingLevel(); + } } /** @@ -588,7 +603,7 @@ private static function parseMapping(string $mapping, int $flags, int &$i = 0, a * * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved */ - private static function evaluateScalar(string $scalar, int $flags, array &$references = [], ?bool &$isQuotedString = null): mixed + private static function evaluateScalar(ParserState $state, string $scalar, int $flags, array &$references = [], ?bool &$isQuotedString = null): mixed { $isQuotedString = false; $scalar = trim($scalar); @@ -609,6 +624,8 @@ private static function evaluateScalar(string $scalar, int $flags, array &$refer throw new ParseException(\sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); } + $state->countAlias($references[$value], self::$parsedLineNumber + 1, null, self::$parsedFilename); + return $references[$value]; } diff --git a/src/Symfony/Component/Yaml/Parser.php b/src/Symfony/Component/Yaml/Parser.php index 744181f7342e5..c3432a094a123 100644 --- a/src/Symfony/Component/Yaml/Parser.php +++ b/src/Symfony/Component/Yaml/Parser.php @@ -26,6 +26,8 @@ class Parser public const TAG_PATTERN = '(?P![\w!.\/:-]+)'; public const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; public const REFERENCE_PATTERN = '#^&(?P[^ ]++) *+(?P.*)#u'; + public const DEFAULT_MAX_NESTING_LEVEL = 128; + public const DEFAULT_MAX_ALIASES_FOR_COLLECTIONS = 128; private ?string $filename = null; private int $offset = 0; @@ -38,6 +40,21 @@ class Parser private array $skippedLineNumbers = []; private array $locallySkippedLineNumbers = []; private array $refsBeingParsed = []; + private ?ParserState $state = null; + + public function __construct(int $maxNestingLevel = self::DEFAULT_MAX_NESTING_LEVEL, int $maxAliasesForCollections = self::DEFAULT_MAX_ALIASES_FOR_COLLECTIONS) + { + if ($maxNestingLevel < 1) { + throw new \InvalidArgumentException('The maximum nesting depth must be greater than 0.'); + } + + if ($maxAliasesForCollections < 0) { + throw new \InvalidArgumentException('The maximum number of collection aliases must be greater than or equal to 0.'); + } + + $this->getState()->maxNestingLevel = $maxNestingLevel; + $this->getState()->maxAliasesForCollections = $maxAliasesForCollections; + } /** * Parses a YAML file into a PHP value. @@ -81,6 +98,9 @@ public function parse(string $value, int $flags = 0): mixed } $this->refs = []; + $state = $this->getState(); + $state->reset(); + $state->aliasesEnabled = 0 === (Yaml::PARSE_EXCEPTION_ON_ALIAS & $flags); try { $data = $this->doParse($value, $flags); @@ -94,11 +114,17 @@ public function parse(string $value, int $flags = 0): mixed $this->skippedLineNumbers = []; $this->locallySkippedLineNumbers = []; $this->totalNumberOfLines = null; + $state->reset(); } return $data; } + private function getState(): ParserState + { + return $this->state ?? $this->state = new ParserState(); + } + private function doParse(string $value, int $flags): mixed { $this->currentLineNb = -1; @@ -243,6 +269,8 @@ private function doParse(string $value, int $flags): mixed $refValue = $this->refs[$refName]; + $this->getState()->countAlias($refValue, $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) { $refValue = (array) $refValue; } @@ -357,7 +385,7 @@ private function doParse(string $value, int $flags): mixed } try { - return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs); + return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs, $this->state); } catch (ParseException $e) { $e->setParsedLine($this->getRealCurrentLineNb() + 1); $e->setSnippet($this->currentLine); @@ -370,7 +398,7 @@ private function doParse(string $value, int $flags): mixed } try { - $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs); + $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs, $this->state); while ($this->moveToNextLine()) { if (!$this->isCurrentLineEmpty()) { @@ -391,7 +419,7 @@ private function doParse(string $value, int $flags): mixed } try { - $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs); + $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs, $this->state); while ($this->moveToNextLine()) { if (!$this->isCurrentLineEmpty()) { @@ -419,7 +447,7 @@ private function doParse(string $value, int $flags): mixed // 1-liner optionally followed by newline(s) if (\is_string($value) && $this->lines[0] === trim($value)) { try { - $value = Inline::parse($this->lines[0], $flags, $this->refs); + $value = Inline::parse($this->lines[0], $flags, $this->refs, $this->state); } catch (ParseException $e) { $e->setParsedLine($this->getRealCurrentLineNb() + 1); $e->setSnippet($this->currentLine); @@ -475,7 +503,7 @@ private function doParse(string $value, int $flags): mixed } try { - return Inline::parse(trim($value)); + return Inline::parse(trim($value), 0, $this->refs, $this->state); } catch (ParseException) { // fall-through to the ParseException thrown below } @@ -520,8 +548,15 @@ private function parseBlock(int $offset, string $yaml, int $flags): mixed $parser->skippedLineNumbers = $skippedLineNumbers; $parser->refs = &$this->refs; $parser->refsBeingParsed = $this->refsBeingParsed; + $parser->state = $this->state; + + $this->getState()->enterNestingLevel($offset + 1, $this->currentLine, $this->filename); - return $parser->doParse($yaml, $flags); + try { + return $parser->doParse($yaml, $flags); + } finally { + $this->getState()->leaveNestingLevel(); + } } /** @@ -717,6 +752,8 @@ private function parseValue(string $value, int $flags, string $context): mixed throw new ParseException(\sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); } + $this->getState()->countAlias($this->refs[$value], $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + return $this->refs[$value]; } @@ -740,18 +777,18 @@ private function parseValue(string $value, int $flags, string $context): mixed if ('' !== $value && '{' === $value[0]) { $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs); + return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs, $this->state); } elseif ('' !== $value && '[' === $value[0]) { $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs); + return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs, $this->state); } switch ($value[0] ?? '') { case '"': case "'": $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); - $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs); + $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs, $this->state); if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) { throw new ParseException(\sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor))); @@ -795,7 +832,7 @@ private function parseValue(string $value, int $flags, string $context): mixed Inline::$parsedLineNumber = $this->getRealCurrentLineNb(); - $parsedValue = Inline::parse($value, $flags, $this->refs); + $parsedValue = Inline::parse($value, $flags, $this->refs, $this->state); if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && str_contains($parsedValue, ': ')) { throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename); @@ -984,11 +1021,11 @@ private function cleanup(string $value): string // strip YAML header $count = 0; - $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count); + $value = preg_replace('#^%YAML[: ][\d.]++[^\n]*+\n#u', '', $value, -1, $count); $this->offset += $count; // remove leading comments - $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); + $trimmedValue = preg_replace('#^(?:\#[^\n]*+\n)++#', '', $value, -1, $count); if (1 === $count) { // items have been removed, update the offset $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); @@ -996,14 +1033,14 @@ private function cleanup(string $value): string } // remove start of the document marker (---) - $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); + $trimmedValue = preg_replace('#^---[^\n]*+\n#', '', $value, -1, $count); if (1 === $count) { // items have been removed, update the offset $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); $value = $trimmedValue; // remove end of the document marker (...) - $value = preg_replace('#\.\.\.\s*$#', '', $value); + $value = preg_replace('#\.\.\.[ \t]*+$#', '', $value); } return $value; diff --git a/src/Symfony/Component/Yaml/ParserState.php b/src/Symfony/Component/Yaml/ParserState.php new file mode 100644 index 0000000000000..2f05c886b97d6 --- /dev/null +++ b/src/Symfony/Component/Yaml/ParserState.php @@ -0,0 +1,69 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * @internal + */ +final class ParserState +{ + public int $maxNestingLevel = Parser::DEFAULT_MAX_NESTING_LEVEL; + public int $currentNestingLevel = 0; + public int $maxAliasesForCollections = Parser::DEFAULT_MAX_ALIASES_FOR_COLLECTIONS; + public int $collectionAliasCount = 0; + public bool $aliasesEnabled = true; + + public function reset(): void + { + $this->currentNestingLevel = 0; + $this->collectionAliasCount = 0; + $this->aliasesEnabled = true; + } + + public function enterNestingLevel(int $line, ?string $snippet, ?string $filename): void + { + if (++$this->currentNestingLevel > $this->maxNestingLevel) { + --$this->currentNestingLevel; + + throw new ParseException(\sprintf('Maximum nesting depth of %d exceeded.', $this->maxNestingLevel), $line, $snippet, $filename); + } + } + + public function leaveNestingLevel(): void + { + if ($this->currentNestingLevel > 0) { + --$this->currentNestingLevel; + } + } + + public function countAlias(mixed $refValue, int $line, ?string $snippet, ?string $filename): void + { + if (!$this->aliasesEnabled) { + throw new ParseException('Aliases are disabled.', $line, $snippet, $filename); + } + + if ($refValue instanceof TaggedValue) { + $refValue = $refValue->getValue(); + } + + if (!\is_array($refValue) && !$refValue instanceof \stdClass) { + return; + } + + if (++$this->collectionAliasCount > $this->maxAliasesForCollections) { + throw new ParseException(\sprintf('Maximum number of collection aliases (%d) exceeded. This limit can be increased via the Parser constructor.', $this->maxAliasesForCollections), $line, $snippet, $filename); + } + } +} diff --git a/src/Symfony/Component/Yaml/Tests/ParserTest.php b/src/Symfony/Component/Yaml/Tests/ParserTest.php index 01f37fd399488..272ae3c29c915 100644 --- a/src/Symfony/Component/Yaml/Tests/ParserTest.php +++ b/src/Symfony/Component/Yaml/Tests/ParserTest.php @@ -3226,6 +3226,130 @@ public function testSkipBlankLines() $this->assertSame(['foo' => [null]], (new Parser())->parse("foo:\n-\n\n")); } + public function testParseRejectsDocumentsThatExceedTheDefaultNestingDepth() + { + $this->expectException(ParseException::class); + $this->expectExceptionMessage('Maximum nesting depth'); + + $yaml = "root:\n"; + for ($i = 1; $i <= Parser::DEFAULT_MAX_NESTING_LEVEL + 1; ++$i) { + $yaml .= str_repeat(' ', $i).sprintf("level%d:\n", $i); + } + + $this->parser->parse($yaml); + } + + public function testParseRejectsDocumentsThatExceedTheConfiguredCollectionAliasLimit() + { + $parser = new Parser(Parser::DEFAULT_MAX_NESTING_LEVEL, 5); + + $this->expectException(ParseException::class); + $this->expectExceptionMessage('Maximum number of collection aliases'); + + $yaml = <<parse($yaml); + } + + public function testParseCountsTaggedValueCollectionAliases() + { + $parser = new Parser(Parser::DEFAULT_MAX_NESTING_LEVEL, 2); + + $this->expectException(ParseException::class); + $this->expectExceptionMessage('Maximum number of collection aliases'); + + $yaml = <<parse($yaml, Yaml::PARSE_CUSTOM_TAGS); + } + + public function testParseAcceptsScalarAliasesWithoutCountingThem() + { + $parser = new Parser(Parser::DEFAULT_MAX_NESTING_LEVEL, 1); + + $yaml = <<parse($yaml); + + $this->assertSame('scalar_value', $result['a']); + $this->assertSame('scalar_value', $result['d']); + } + + public function testParseAcceptsLargeCollectionAliasedOnce() + { + $items = implode(', ', array_map(function ($i) { return "item$i"; }, range(1, 500))); + $yaml = <<parser->parse($yaml); + + $this->assertCount(500, $result['a']); + } + + public function testParseRejectsBlockAliasesWhenDisabled() + { + $this->expectException(ParseException::class); + $this->expectExceptionMessage('Aliases are disabled'); + + $yaml = <<parser->parse($yaml, Yaml::PARSE_EXCEPTION_ON_ALIAS); + } + + public function testParseRejectsInlineAliasesWhenDisabled() + { + $this->expectException(ParseException::class); + $this->expectExceptionMessage('Aliases are disabled'); + + $yaml = <<parser->parse($yaml, Yaml::PARSE_EXCEPTION_ON_ALIAS); + } + + public function testParseHandlesLargeYamlHeaders() + { + $yaml = "%YAML:".str_repeat('1', 100000)."\nfoo: bar\n"; + + $this->assertSame(['foo' => 'bar'], $this->parser->parse($yaml)); + } + + public function testParseHandlesLargeLeadingComments() + { + $yaml = '#'.str_repeat('comment', 20000)."\nfoo: bar\n"; + + $this->assertSame(['foo' => 'bar'], $this->parser->parse($yaml)); + } + + public function testParseHandlesLargeDocumentMarkers() + { + $yaml = '--- '.str_repeat('header', 20000)."\nfoo: bar\n... "; + + $this->assertSame(['foo' => 'bar'], $this->parser->parse($yaml)); + } + private function assertSameData($expected, $actual) { $this->assertEquals($expected, $actual); diff --git a/src/Symfony/Component/Yaml/Tests/YamlTest.php b/src/Symfony/Component/Yaml/Tests/YamlTest.php index 151b5b9deb824..d04d2d1472387 100644 --- a/src/Symfony/Component/Yaml/Tests/YamlTest.php +++ b/src/Symfony/Component/Yaml/Tests/YamlTest.php @@ -12,6 +12,8 @@ namespace Symfony\Component\Yaml\Tests; use PHPUnit\Framework\TestCase; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Parser; use Symfony\Component\Yaml\Yaml; class YamlTest extends TestCase @@ -37,4 +39,34 @@ public function testNegativeIndentationThrowsException() $this->expectExceptionMessage('The indentation must be greater than zero'); Yaml::dump(['lorem' => 'ipsum', 'dolor' => 'sit'], 2, -4); } + + public function testParseAllowsConfiguringTheMaximumNestingLevel() + { + $yaml = "root:\n child:\n grandchild:\n greatgrandchild: value\n"; + + $this->expectException(ParseException::class); + $this->expectExceptionMessage('Maximum nesting depth of 2 exceeded'); + + Yaml::parse($yaml, 0, 2); + } + + public function testParseFileAllowsConfiguringTheMaximumCollectionAliasCount() + { + $file = tempnam(sys_get_temp_dir(), 'yaml_'); + + file_put_contents($file, <<expectException(ParseException::class); + $this->expectExceptionMessage('Maximum number of collection aliases (0) exceeded.'); + + try { + Yaml::parseFile($file, 0, Parser::DEFAULT_MAX_NESTING_LEVEL, 0); + } finally { + unlink($file); + } + } } diff --git a/src/Symfony/Component/Yaml/Yaml.php b/src/Symfony/Component/Yaml/Yaml.php index e2d2af731083d..b6dce0d4ee199 100644 --- a/src/Symfony/Component/Yaml/Yaml.php +++ b/src/Symfony/Component/Yaml/Yaml.php @@ -35,6 +35,7 @@ class Yaml public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; public const DUMP_NULL_AS_TILDE = 2048; public const DUMP_NUMERIC_KEY_AS_STRING = 4096; + public const PARSE_EXCEPTION_ON_ALIAS = 8192; /** * Parses a YAML file into a PHP value. @@ -44,14 +45,16 @@ class Yaml * $array = Yaml::parseFile('config.yml'); * print_r($array); * - * @param string $filename The path to the YAML file to be parsed - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param int $maxNestingLevel The maximum nesting depth for nested YAML blocks + * @param int $maxAliasesForCollections The maximum number of collection aliases to resolve * * @throws ParseException If the file could not be read or the YAML is not valid */ - public static function parseFile(string $filename, int $flags = 0): mixed + public static function parseFile(string $filename, int $flags = 0, int $maxNestingLevel = Parser::DEFAULT_MAX_NESTING_LEVEL, int $maxAliasesForCollections = Parser::DEFAULT_MAX_ALIASES_FOR_COLLECTIONS): mixed { - $yaml = new Parser(); + $yaml = new Parser($maxNestingLevel, $maxAliasesForCollections); return $yaml->parseFile($filename, $flags); } @@ -65,14 +68,16 @@ public static function parseFile(string $filename, int $flags = 0): mixed * print_r($array); * * - * @param string $input A string containing YAML - * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param string $input A string containing YAML + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param int $maxNestingLevel The maximum nesting depth for nested YAML blocks + * @param int $maxAliasesForCollections The maximum number of collection aliases to resolve * * @throws ParseException If the YAML is not valid */ - public static function parse(string $input, int $flags = 0): mixed + public static function parse(string $input, int $flags = 0, int $maxNestingLevel = Parser::DEFAULT_MAX_NESTING_LEVEL, int $maxAliasesForCollections = Parser::DEFAULT_MAX_ALIASES_FOR_COLLECTIONS): mixed { - $yaml = new Parser(); + $yaml = new Parser($maxNestingLevel, $maxAliasesForCollections); return $yaml->parse($input, $flags); }