- options = arguments.extract_options!+ options = if arguments.length > attribute_names.size+ arguments.extract_options!+ else+ {}+ end
Les fonctions find_by_* peuvent recevoir au minimum deux arguments (mais n'en requièrent qu'un au minimum), par exemple find_by_name peut recevoir deux arguments, le nom recherché et des options : find_by_name('Linus', :limit => 1) ou un seul argument : find_by_name('Linus').
Le problème est que si on ne donne que les options comme argument : find_by_name(:limit => 1) ça fonctionne quand même, du coup le patch n'extrait les options que si il y a les autres arguments passés.
arguments.length retourne le nombre d'argument donnés (facile). attribute_names.size retourne le nombre d'attributs de la recherche (find_by_name => 1, find_by_name_and_karma => 2)
Donc pour traduire le code : arguments.length > attribute_names.size : si le nombre d'arguments donnés est strictement supérieur au nombre d'attributs de la recherche alors on extrait les options (sinon, pas d'options).
"Never trust a statistic you haven't faked yourself."
[^] # Re: Comment fonctionne le patch 3.2
Posté par Oles . En réponse à la dépêche Injection SQL sur toutes les versions de Ruby on Rails. Évalué à 6.
Les fonctions
find_by_*peuvent recevoir au minimum deux arguments (mais n'en requièrent qu'un au minimum), par exemplefind_by_namepeut recevoir deux arguments, le nom recherché et des options :find_by_name('Linus', :limit => 1)ou un seul argument :find_by_name('Linus').Le problème est que si on ne donne que les options comme argument :
find_by_name(:limit => 1)ça fonctionne quand même, du coup le patch n'extrait les options que si il y a les autres arguments passés.arguments.lengthretourne le nombre d'argument donnés (facile).attribute_names.sizeretourne le nombre d'attributs de la recherche (find_by_name=> 1,find_by_name_and_karma=> 2)Donc pour traduire le code :
arguments.length > attribute_names.size: si le nombre d'arguments donnés est strictement supérieur au nombre d'attributs de la recherche alors on extrait les options (sinon, pas d'options)."Never trust a statistic you haven't faked yourself."