Domanda

Tenendo presente le risposte a una domanda su un più sicuro libreria di formattazione per C, mi chiedo se esiste una libreria di formattazione C sicura?

Quello che voglio dire è:

  • non è possibile abbinare la stringa di formato agli argomenti
  • non è possibile arrestarsi in modo anomalo passando il tipo sbagliato
  • non ci sono aspetti dipendenti dalla piattaforma

Non rispondere alla Microsoft Safe String Library o librerie che sono meno non sicure ma non sono del tutto sicure, poiché ne sono a conoscenza e non soddisfano i requisiti di sicurezza totale.

Grazie in anticipo

È stato utile?

Soluzione

Stai scrivendo in C. C non è sicuro. Non è possibile evitare comportamenti indefiniti se si passa un int* anziché un char*. & Quot non esiste; non è possibile & Quot; se le variabili non sono staticamente controllate / contrassegnate per il controllo di runtime.

Se hai qualcosa che produce avvisi, è già abbastanza buono ...

Se davvero hai bisogno di o vuoi sicurezza, potresti dare un'occhiata a ciclone (dialetto C), o alcune lingue completamente diverse.

Altri suggerimenti

  

non è possibile abbinare la stringa di formato agli argomenti

Se vuoi una stringa di formato, senza il supporto di un compilatore speciale non puoi praticamente farlo. Detto questo, potresti avere una libreria di formattazione sicura in C se rinunci alla stringa di formato. Non ne sono a conoscenza, ma non sarei sorpreso se esistessero.

Uno potrebbe avere un'interfaccia come:

typedef ... FORMATTER;

FORMATTER create_formatter();
int fmt_add_string_default(FORMATTER f, const char *s);
int fmt_add_string(FORMATTER f, const char *s, int maxlength, const char fill, enum fmt_alignment align);
...
int fmt_add_decimal_default(FORMATTER f, int d);
... // you get the idea
int fmt_write_result(FORMATTER f, char *out, int out_length);
void destroy_formatter(FORMATTER f);

Qualcosa del genere sarebbe perfettamente sicuro, se un po 'prolisso.

No, perché qualunque " sicurezza " si introduce può essere dominato dalla lingua. È come costruire il tuo castello sulla sabbia - non importa quanto sia buono il castello, può ancora essere fatto cadere se riesci a scavare la sabbia da sotto.

Non esiste alcun meccanismo in C per applicare specifici tipi di parametri, né dovrebbe esserci.

Se le persone non usano i tuoi strumenti come dovrebbero, questo è il loro problema, secondo me. Non dovresti fornire software ai bambini di tre anni: si prevede che abbiano un po 'di intelligenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top