etc.git


etc

~ scripts and random things
git clone https://github.com/djnnvx/etc.git
log | files | refs | archive

fuzz_ocsp.c (1119B)

      1 /*
      2  * OCSP response parsing: dirmngr fetches these over HTTP, so it is a remote
      3  * attacker-controlled path. ksba_ocsp_parse_response takes a raw buffer and
      4  * parses eagerly (ocsp.c + time.c); the accessors drain the remainder.
      5  */
      6 #include "harness.h"
      7 
      8 static int fuzz_one(const uint8_t *data, size_t size)
      9 {
     10     ksba_ocsp_t ocsp;
     11     ksba_ocsp_response_status_t rstatus;
     12 
     13     if (ksba_ocsp_new(&ocsp))
     14         return 0;
     15 
     16     if (!ksba_ocsp_parse_response(ocsp, data, size, &rstatus)) {
     17         char *name = NULL;
     18         ksba_sexp_t kid = NULL;
     19         ksba_isotime_t produced_at;
     20         int i;
     21 
     22         if (!ksba_ocsp_get_responder_id(ocsp, &name, &kid)) {
     23             ksba_free(name);
     24             ksba_free(kid);
     25         }
     26         ksba_free(ksba_ocsp_get_sig_val(ocsp, produced_at));
     27         (void)ksba_ocsp_get_digest_algo(ocsp);           /* const, do not free */
     28 
     29         for (i = 0; i < KSBA_FUZZ_MAXITER; i++) {
     30             ksba_cert_t c = ksba_ocsp_get_cert(ocsp, i);
     31             if (!c)
     32                 break;
     33             ksba_cert_release(c);
     34         }
     35     }
     36 
     37     ksba_ocsp_release(ocsp);
     38     return 0;
     39 }