Qu'est-ce que l'alternative sûre à la fonction realpath()?
Je suis en train de travailler sur un programme qui utilise la fonction realpath() pour obtenir le chemin absolu d'un fichier. Malheureusement, cette fonction prend un tampon de chaîne qui devrait être si grand qu'il est assez grand et qui n'est pas en sécurité lorsque cette application est de courir à travers de multiples plates-formes. Est-il sûr de la version de cette fonction qui permet d'éviter le débordement de la mémoire tampon peut-être en utilisant l'allocation dynamique de la mémoire?
OriginalL'auteur dromodel | 2010-11-05
Vous devez vous connecter pour publier un commentaire.
Voir ici pour plus d'informations sur la sécurité et une utilisation portable de
realpath
:http://www.opengroup.org/onlinepubs/9699919799/functions/realpath.html
Fondamentalement, les normes modernes vous permettent de passer un pointeur NULL, et
realpath
va allouer un tampon de la longueur appropriée. Si vous voulez être transférables à d'anciens systèmes qui ne prennent pas en charge cette norme, il suffit de cocher#ifdef PATH_MAX
et l'utilisation d'une mémoire tampon à taille fixe de longueurPATH_MAX
. Autant que je sache, il n'existe pas de systèmes hérités qui manque une constantePATH_MAX
mais qui ne prennent pas en charge les arguments NULL pourrealpath
.OriginalL'auteur
À partir de la page de manuel:
Donc il semble que tu peux faire ça:
bon point, je n'étais pas au courant qu'détail particulier est relativement nouveau.
OriginalL'auteur
Il existe un moyen de faire la même chose dans les Stimuler à l'aide de boost::filesystem:
Il y a QT façon de le faire (got du ici):
Il est un peu compliqué la mise en œuvre de la fonction realpath en C++. Ne dites rien à ce sujet de la sécurité, mais il devrait permettre de chemin avec une longueur de plus de
PATH_MAX
. Va tester au plus vite.absolutePath
n'est pas visible de l'extérieurtry/catch
OriginalL'auteur