[C#] Paramètre validateImageData et Image.FromStream ()



Answers

En parcourant le réflecteur à l'intérieur, vous verrez que par défaut .NET appelle toujours une API native dans les bibliothèques GDI + nommées GdipImageForceValidation (en passant true pour le paramètre validateImageData). Je ne peux pas trouver beaucoup sur l' API native dans MSDN , seulement cela , qui ne nous dit pas plus que le nom de la fonction elle-même. Cependant, il semble que cette méthode provoque une dégradation des performances basée sur le post de Justin Roger sur le chargement des images le plus rapidement possible via .NET. Il est également intuitif de s'attendre à ce que toute étape de «validation» enlève des performances.

Cependant, si vous spécifiez false pour le paramètre validateImageData, .NET déclenchera explicitement une demande de sécurité de code non gérée , ce qui signifie que les auteurs du framework ont ​​décidé qu'il était nécessaire de forcer la validation de l'image pour garantir la sécurité du code managé. faites confiance aux données que l'appelant dit représenter une image. Ainsi, si la spécification de flate pour validateImageData peut augmenter les performances, dans un contexte de sécurité de confiance inférieure à la confiance totale , il peut générer une exception, et vous feriez mieux d'approuver les données que vous pensez être une image.

Question

Je suis préoccupé par le troisième paramètre de cette surcharge, validateImageData. La documentation n'explique pas grand-chose à ce sujet, elle indique seulement qu'elle permet de valider les données d'image mais pas de détails, que fait-on exactement pour valider les données d'image?

public static Image FromStream (
    Stream stream,
    bool useEmbeddedColorManagement,
    bool validateImageData
)

Je veux l'utiliser dans une application web, donc, je veux savoir ce qui se passe exactement si je mets validateImageData à true, je veux être sûr que ce que l'utilisateur télécharge est une image valide, est-il recommandé de définir validateImageData à true ou est-ce suffisant pour attraper l'exception si on est jeté? En outre, la définition de validateImageData sur true peut-elle affecter la performance de quelque façon que ce soit? (les utilisateurs peuvent télécharger des images jusqu'à 250k)

Merci




Pourquoi ne pas simplement essayer de voir ce qui se passe avec cet ensemble de drapeaux et non défini?

Dans les deux cas, vous devriez gérer toutes les exceptions qui pourraient être levées.




Links