#!/bin/bash

DUMPASN1=${1:-dumpasn1}

# this test evaluates a sample certificate suggested by Peter Gutmann
# in https://bugs.debian.org/348856#27

# Without debian/patches/bug348856.patch, valgrind will likely fail with:

#  48  17:         SEQUENCE {
#  50   3:           OBJECT IDENTIFIER localityName (2 5 4 7)
# ==2818855== Conditional jump or move depends on uninitialised value(s)
# ==2818855==    at 0x4840D5E: wcsnlen (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
# ==2818855==    by 0x491E116: wcsrtombs (wcsrtombs.c:104)
# ==2818855==    by 0x48B3FE0: wcstombs (wcstombs.c:34)
# ==2818855==    by 0x10BCD2: displayUnicode (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10CE8B: displayString (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10F424: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10FBF2: printAsn1 (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E27E: printConstructed (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E8CF: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10FBF2: printAsn1 (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E27E: printConstructed (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E8CF: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855== 
# ==2818855== Conditional jump or move depends on uninitialised value(s)
# ==2818855==    at 0x48A0511: internal_ascii_loop (loop.c:336)
# ==2818855==    by 0x48A0511: __gconv_transform_internal_ascii (skeleton.c:620)
# ==2818855==    by 0x491E14D: wcsrtombs (wcsrtombs.c:110)
# ==2818855==    by 0x48B3FE0: wcstombs (wcstombs.c:34)
# ==2818855==    by 0x10BCD2: displayUnicode (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10CE8B: displayString (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10F424: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10FBF2: printAsn1 (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E27E: printConstructed (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E8CF: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10FBF2: printAsn1 (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E27E: printConstructed (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E8CF: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855== 
# ==2818855== Conditional jump or move depends on uninitialised value(s)
# ==2818855==    at 0x48A0690: internal_ascii_loop (loop.c:336)
# ==2818855==    by 0x48A0690: __gconv_transform_internal_ascii (skeleton.c:620)
# ==2818855==    by 0x491E14D: wcsrtombs (wcsrtombs.c:110)
# ==2818855==    by 0x48B3FE0: wcstombs (wcstombs.c:34)
# ==2818855==    by 0x10BCD2: displayUnicode (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10CE8B: displayString (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10F424: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10FBF2: printAsn1 (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E27E: printConstructed (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E8CF: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10FBF2: printAsn1 (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E27E: printConstructed (in …/dumpasn1/dumpasn1)
# ==2818855==    by 0x10E8CF: printASN1object (in …/dumpasn1/dumpasn1)
# ==2818855== 
#  55  10:           BMPString '...r.h.u.s'
#        :           }
#        :         }

< debian/test-data/bmp-strings.crt grep -v ^- | base64 -d | \
    valgrind --error-exitcode=17 -- "$DUMPASN1" -
