Generate a dictionary of OIDs for fuzzers
authorRichard Levitte <levitte@openssl.org>
Tue, 31 Oct 2017 19:06:39 +0000 (20:06 +0100)
committerRichard Levitte <levitte@openssl.org>
Tue, 31 Oct 2017 19:08:48 +0000 (20:08 +0100)
It turns out that (some?) fuzzers can read a dictionary of OIDs,
so we generate one as part of the usual 'make update'.

Fixes #4615

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
(Merged from https://github.com/openssl/openssl/pull/4637)

Configurations/unix-Makefile.tmpl
fuzz/mkfuzzoids.pl [new file with mode: 0755]

index c9553cf6f731c74e962a20ad7def0ee2c5c1d4b3..617d3b91fbfd9ea7ee719ba1571298d9da71365d 100644 (file)
@@ -612,7 +612,7 @@ uninstall_html_docs:
 update: generate errors ordinals
 
 generate: generate_apps generate_crypto_bn generate_crypto_objects \
-          generate_crypto_conf generate_crypto_asn1
+          generate_crypto_conf generate_crypto_asn1 generate_fuzz_oids
 
 doc-nits:
        (cd $(SRCDIR); $(PERL) util/find-doc-nits -n -p ) >doc-nits
@@ -653,6 +653,11 @@ generate_crypto_asn1:
        ( cd $(SRCDIR); $(PERL) crypto/asn1/charmap.pl \
                                > crypto/asn1/charmap.h )
 
+generate_fuzz_oids:
+       ( cd $(SRCDIR); $(PERL) fuzz/mkfuzzoids.pl \
+                               crypto/objects/obj_dat.h \
+                               > fuzz/oids.txt )
+
 # Set to -force to force a rebuild
 ERROR_REBUILD=
 errors:
diff --git a/fuzz/mkfuzzoids.pl b/fuzz/mkfuzzoids.pl
new file mode 100755 (executable)
index 0000000..4bf97bc
--- /dev/null
@@ -0,0 +1,27 @@
+#! /usr/bin/env perl
+# Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the OpenSSL license (the "License").  You may not use
+# this file except in compliance with the License.  You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
+my $obj_dat_h = $ARGV[0];
+
+open IN, '<', $obj_dat_h
+    || die "Couldn't open $obj_dat_h : $!\n";
+
+while(<IN>) {
+    s|\R$||;                    # Better chomp
+
+    next unless m|^\s+((0x[0-9A-F][0-9A-F],)*)\s+/\*\s\[\s*\d+\]\s(OBJ_\w+)\s\*/$|;
+
+    my $OID = $1;
+    my $OBJname = $3;
+
+    $OID =~ s|0x|\\x|g;
+    $OID =~ s|,||g;
+
+    print "$OBJname=\"$OID\"\n";
+}
+close IN;