From: Matt Caswell Date: Wed, 30 Sep 2015 13:06:14 +0000 (+0100) Subject: Add a test for duplicated ordinals X-Git-Tag: OpenSSL_1_1_0-pre1~484 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5530d5187c77877b610b11c4aadedd7107386afa;p=openssl Add a test for duplicated ordinals Occaisionally we have had problems where there are duplicated ordinals in libeay.num or ssleay.num. This adds a test for this issue. Reviewed-by: Richard Levitte --- diff --git a/test/recipes/90-test_ordinals.t b/test/recipes/90-test_ordinals.t new file mode 100755 index 0000000000..3e28641813 --- /dev/null +++ b/test/recipes/90-test_ordinals.t @@ -0,0 +1,104 @@ +#!/usr/bin/perl +# Written by Matt Caswell for the OpenSSL project. +# ==================================================================== +# Copyright (c) 1998-2015 The OpenSSL Project. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# 3. All advertising materials mentioning features or use of this +# software must display the following acknowledgment: +# "This product includes software developed by the OpenSSL Project +# for use in the OpenSSL Toolkit. (http://www.openssl.org/)" +# +# 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to +# endorse or promote products derived from this software without +# prior written permission. For written permission, please contact +# openssl-core@openssl.org. +# +# 5. Products derived from this software may not be called "OpenSSL" +# nor may "OpenSSL" appear in their names without prior written +# permission of the OpenSSL Project. +# +# 6. Redistributions of any form whatsoever must retain the following +# acknowledgment: +# "This product includes software developed by the OpenSSL Project +# for use in the OpenSSL Toolkit (http://www.openssl.org/)" +# +# THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +# OF THE POSSIBILITY OF SUCH DAMAGE. +# ==================================================================== +# +# This product includes cryptographic software written by Eric Young +# (eay@cryptsoft.com). This product includes software written by Tim +# Hudson (tjh@cryptsoft.com). + +use strict; +use OpenSSL::Test qw/:DEFAULT top_file/; + +setup("test_ordinals"); + +plan tests => 2; + +ok(testordinals(top_file("util", "libeay.num")), "Test libeay.num"); +ok(testordinals(top_file("util", "ssleay.num")), "Test ssleay.num"); + +sub testordinals +{ + my $filename = shift; + my $cnt = 0; + my $ret = 1; + my $qualifier = ""; + my $newqual; + my $lastfunc = ""; + + open(my $fh, '<', $filename); + while (my $line = <$fh>) { + my @tokens = split(/( |\t|:)+/, $line); + #Check the line looks sane + if ($#tokens < 8 || $#tokens > 10) { + print STDERR "Invalid line:\n$line\n"; + $ret = 0; + last; + } + if ($tokens[4] eq "NOEXIST") { + #Ignore this line + next; + } + #Some ordinals can be repeated, e.g. if one is VMS and another is !VMS + $newqual = $tokens[6]; + $newqual =~ s/!//g; + if ($cnt > $tokens[2] + || ($cnt == $tokens[2] && ($qualifier ne $newqual + || $qualifier eq "FUNCTION"))) { + print STDERR "Invalid ordinal detected: ".$tokens[2]."\n"; + $ret = 0; + last; + } + $cnt = $tokens[2]; + $qualifier = $newqual; + $lastfunc = $tokens[0]; + } + close($fh); + + return $ret; +}