Generate a dictionary of OIDs for fuzzers 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)
diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index c9553cf..617d3b9 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl
@@ -612,7 +612,7 @@ 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 @@ ( 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 index 0000000..4bf97bc --- /dev/null +++ b/fuzz/mkfuzzoids.pl
@@ -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;