IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèque standard C Discussion :

les fonctions obsolètes et non secure


Sujet :

Bibliothèque standard C

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 102
    Points : 153
    Points
    153
    Par défaut les fonctions obsolètes et non secure
    Bonjour !

    je fais une recherche sur les fonctions qu'il ne faut plus utiliser en C (notamment dans les systèmes qui doive être secure) dues à leur manque de vérifications.

    je suis tombé sur cette page:
    https://www.securecoding.cert.org/co...cent+functions

    et la un grand tableau avec les fonctions recommandées. Je me dis cool..
    mais la je vois que certaines fonctions recommandées ne sont même pas standardisées et il manque pour moi pas mal de fonctions comme strlcpy(), strlcat() enfin bon les strl*()...

    Je voulais savoir ce que vous pensiez de ce tableau. Je me dis que c'est un CERT donc à priori c'est vérifié et ultra vérifié. mais par exemple sur tous les sites que je vois, ils disent que pour strcpy() il faut le remplacer par strncpy() voir strlcpy() (notamment avec le \0 qui n'est pas toujours mis à la fin avec strncpy()) et dans ce tableau ils évoquent stpcpy() qui m'étais inconnu jusqu'ici.

    alors je tiens à dire que je ne suis pas un développeur confirmé

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Citation Envoyé par Trankille Voir le message
    mais la je vois que certaines fonctions recommandées ne sont même pas standardisées et il manque pour moi pas mal de fonctions comme strlcpy(), strlcat() enfin bon les strl*()...
    Je ne connaissais meme pas ces fonctions et pour cause, elles ne sont pas standards !!!
    Sinon, je n'utilse pas assez ces fonctions pour donner un avis pertinent.

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Trankille Voir le message
    je suis tombé sur cette page:
    https://www.securecoding.cert.org/co...cent+functions

    et la un grand tableau avec les fonctions recommandées. Je me dis cool..
    Ces fonctions ne sont disponibles qu'en environnement Microsoft, elles ne sont pas normalisées. Pour les fonctions "secure" (avec xxx_s), Microsoft a déjà fait la demande pour les intégrer dans la norme mais pour le moment, elles restent tout simplement des fonctions spécifiques de leur bibliothèque de fonctions C.

    Citation Envoyé par Trankille Voir le message
    mais la je vois que certaines fonctions recommandées ne sont même pas standardisées et il manque pour moi pas mal de fonctions comme strlcpy(), strlcat() enfin bon les strl*()...
    Les fonctions strl* elles non plus ne sont pas normalisées. Ce sont juste des fonctions que l'on retrouve chez certaines distributions Unix/Linux.

    Citation Envoyé par Trankille Voir le message
    sur tous les sites que je vois, ils disent que pour strcpy() il faut le remplacer par strncpy() voir strlcpy() (notamment avec le \0 qui n'est pas toujours mis à la fin avec strncpy()) et dans ce tableau ils évoquent stpcpy() qui m'étais inconnu jusqu'ici.
    Moi je dis que ça dépend de ce que l'on veut. Si j'ai une chaîne que je dois copier dans un buffer mais que le buffer n'est malheureusement pas assez grand, que dois-je faire : copier ce que je peux (solution strncpy, strlcpy, strcpy_s, etc.) ou bien laisser tomber ? Ca dépend de l'application mais en tout cas, dans 100% des programmes que j'ai écrits jusqu'ici, j'étais amené à abandonner l'opération pour insuffisance de mémoire.

    Cf la FAQ pour en savoir plus sur la norme du C.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    merci pour les réponses !

    Citation Envoyé par Melem Voir le message
    Ca dépend de l'application mais en tout cas, dans 100% des programmes que j'ai écrits jusqu'ici, j'étais amené à abandonner l'opération pour insuffisance de mémoire.
    quelle méthode as tu utilisé alors pour copier une chaine dans un buffer ? tu réécris toi même la copie ?

    edit: en fait ce qu'il me faudrait, c'est une méthode qui soit sécurisée. C'est à dire une méthode qui doit être utilisée dans un environnement sensible.
    je pensais que le strncpy() avec une vérification du caractère de fin de chaine était suffisant.

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    quelle méthode as tu utilisé alors pour copier une chaine dans un buffer ? tu réécris toi même la copie ?
    Si je ne connais pas la longueur de la chaîne à copier, oui. C'est en moyenne plus rapide qu'un strncpy car on ne copie que ce qu'on a besoin de copier mais ça m'arrive aussi d'utiliser strncpy. Dans ce cas tu vérifies la présence du '\0' comme tu l'as dit pour savoir si la chaîne a été complètement ou partiellement copiée. Si je connais déjà la taille de la chaîne à copier, j'utilise directement strcpy.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/12/2014, 16h48
  2. Réponses: 2
    Dernier message: 15/09/2014, 11h51
  3. Réponses: 2
    Dernier message: 16/04/2008, 22h58
  4. Le linker ignore les fonctions non implémentées
    Par Rodrigue dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/03/2005, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo