File Coverage

blib/lib/Convert/ASN1/parser.pm
Criterion Covered Total %
statement 283 389 72.8
branch 79 130 60.8
condition 36 71 50.7
subroutine 11 18 61.1
pod 0 13 0.0
total 409 621 65.9


line stmt bran cond sub pod time code
1             # 1 "y.tab.pl"
2             #$yysccsid = "@(#)yaccpar 1.8 (Berkeley) 01/20/91 (Perl 2.0 12/31/92)";
3              
4             # 22 "parser.y"
5              
6             ;# Copyright (c) 2000-2005 Graham Barr <gbarr@pobox.com>. All rights reserved.
7             ;# This program is free software; you can redistribute it and/or
8             ;# modify it under the same terms as Perl itself.
9              
10             package Convert::ASN1::parser;
11              
12 15     15   211 use strict;
  15         141  
  15         287  
13 15     15   328 use Convert::ASN1 qw(:all);
  15         144  
  15         429  
14 15         272 use vars qw(
15             $asn $yychar $yyerrflag $yynerrs $yyn @yyss
16             $yyssp $yystate @yyvs $yyvsp $yylval $yys $yym $yyval
17 15     15   414 );
  15         143  
18              
19 15     15   299 BEGIN { Convert::ASN1->_internal_syms }
20              
21             my $yydebug=0;
22             my %yystate;
23              
24             my %base_type = (
25               BOOLEAN => [ asn_encode_tag(ASN_BOOLEAN), opBOOLEAN ],
26               INTEGER => [ asn_encode_tag(ASN_INTEGER), opINTEGER ],
27               BIT_STRING => [ asn_encode_tag(ASN_BIT_STR), opBITSTR ],
28               OCTET_STRING => [ asn_encode_tag(ASN_OCTET_STR), opSTRING ],
29               STRING => [ asn_encode_tag(ASN_OCTET_STR), opSTRING ],
30               NULL => [ asn_encode_tag(ASN_NULL), opNULL ],
31               OBJECT_IDENTIFIER => [ asn_encode_tag(ASN_OBJECT_ID), opOBJID ],
32               REAL => [ asn_encode_tag(ASN_REAL), opREAL ],
33               ENUMERATED => [ asn_encode_tag(ASN_ENUMERATED), opINTEGER ],
34               ENUM => [ asn_encode_tag(ASN_ENUMERATED), opINTEGER ],
35               'RELATIVE-OID' => [ asn_encode_tag(ASN_RELATIVE_OID), opROID ],
36              
37               SEQUENCE => [ asn_encode_tag(ASN_SEQUENCE | ASN_CONSTRUCTOR), opSEQUENCE ],
38               SET => [ asn_encode_tag(ASN_SET | ASN_CONSTRUCTOR), opSET ],
39              
40               ObjectDescriptor => [ asn_encode_tag(ASN_UNIVERSAL | 7), opSTRING ],
41               UTF8String => [ asn_encode_tag(ASN_UNIVERSAL | 12), opUTF8 ],
42               NumericString => [ asn_encode_tag(ASN_UNIVERSAL | 18), opSTRING ],
43               PrintableString => [ asn_encode_tag(ASN_UNIVERSAL | 19), opSTRING ],
44               TeletexString => [ asn_encode_tag(ASN_UNIVERSAL | 20), opSTRING ],
45               T61String => [ asn_encode_tag(ASN_UNIVERSAL | 20), opSTRING ],
46               VideotexString => [ asn_encode_tag(ASN_UNIVERSAL | 21), opSTRING ],
47               IA5String => [ asn_encode_tag(ASN_UNIVERSAL | 22), opSTRING ],
48               UTCTime => [ asn_encode_tag(ASN_UNIVERSAL | 23), opUTIME ],
49               GeneralizedTime => [ asn_encode_tag(ASN_UNIVERSAL | 24), opGTIME ],
50               GraphicString => [ asn_encode_tag(ASN_UNIVERSAL | 25), opSTRING ],
51               VisibleString => [ asn_encode_tag(ASN_UNIVERSAL | 26), opSTRING ],
52               ISO646String => [ asn_encode_tag(ASN_UNIVERSAL | 26), opSTRING ],
53               GeneralString => [ asn_encode_tag(ASN_UNIVERSAL | 27), opSTRING ],
54               CharacterString => [ asn_encode_tag(ASN_UNIVERSAL | 28), opSTRING ],
55               UniversalString => [ asn_encode_tag(ASN_UNIVERSAL | 28), opSTRING ],
56               BMPString => [ asn_encode_tag(ASN_UNIVERSAL | 30), opSTRING ],
57               BCDString => [ asn_encode_tag(ASN_OCTET_STR), opBCD ],
58              
59               CHOICE => [ '', opCHOICE ],
60               ANY => [ '', opANY ],
61             );
62              
63             ;# Given an OP, wrap it in a SEQUENCE
64              
65             sub explicit {
66 1     1 0 9   my $op = shift;
67 1         11   my @seq = @$op;
68              
69 1         12   @seq[cTYPE,cCHILD,cVAR,cLOOP] = ('SEQUENCE',[$op],undef,undef);
70 1         9   @{$op}[cTAG,cOPT] = ();
  1         10  
71              
72 1         11   \@seq;
73             }
74              
75             # 74 "y.tab.pl"
76              
77             sub constWORD () { 1 }
78             sub constCLASS () { 2 }
79             sub constSEQUENCE () { 3 }
80             sub constSET () { 4 }
81             sub constCHOICE () { 5 }
82             sub constOF () { 6 }
83             sub constIMPLICIT () { 7 }
84             sub constEXPLICIT () { 8 }
85             sub constOPTIONAL () { 9 }
86             sub constLBRACE () { 10 }
87             sub constRBRACE () { 11 }
88             sub constCOMMA () { 12 }
89             sub constANY () { 13 }
90             sub constASSIGN () { 14 }
91             sub constNUMBER () { 15 }
92             sub constENUM () { 16 }
93             sub constCOMPONENTS () { 17 }
94             sub constPOSTRBRACE () { 18 }
95             sub constDEFINED () { 19 }
96             sub constBY () { 20 }
97             sub constYYERRCODE () { 256 }
98             my @yylhs = ( -1,
99                 0, 0, 2, 2, 3, 3, 6, 6, 6, 6,
100                 8, 13, 13, 12, 14, 14, 14, 9, 9, 9,
101                10, 18, 18, 18, 18, 18, 19, 19, 11, 16,
102                16, 20, 20, 20, 21, 1, 1, 22, 22, 22,
103                24, 24, 24, 24, 23, 23, 23, 15, 15, 4,
104                 4, 5, 5, 5, 17, 17, 25, 7, 7,
105             );
106             my @yylen = ( 2,
107                 1, 1, 3, 4, 4, 1, 1, 1, 1, 1,
108                 3, 1, 1, 6, 1, 1, 1, 4, 4, 4,
109                 4, 1, 1, 1, 2, 1, 0, 3, 1, 1,
110                 2, 1, 3, 3, 4, 1, 2, 1, 3, 3,
111                 2, 1, 1, 1, 4, 1, 3, 0, 1, 0,
112                 1, 0, 1, 1, 1, 3, 2, 0, 1,
113             );
114             my @yydefred = ( 0,
115                 0, 51, 0, 0, 1, 0, 0, 46, 0, 38,
116                 0, 0, 0, 0, 54, 53, 0, 0, 0, 3,
117                 0, 6, 0, 11, 0, 0, 0, 0, 47, 0,
118                39, 40, 0, 22, 0, 0, 0, 0, 44, 42,
119                 0, 43, 0, 29, 45, 4, 0, 0, 0, 0,
120                 7, 8, 9, 10, 0, 25, 0, 49, 41, 0,
121                 0, 0, 0, 0, 0, 32, 59, 5, 0, 0,
122                 0, 55, 0, 18, 19, 0, 20, 0, 0, 28,
123                57, 21, 0, 0, 0, 34, 33, 56, 0, 0,
124                17, 15, 16, 0, 35, 14,
125             );
126             my @yydgoto = ( 4,
127                 5, 6, 20, 7, 17, 50, 68, 8, 51, 52,
128                53, 54, 43, 94, 59, 64, 71, 44, 56, 65,
129                66, 9, 10, 45, 72,
130             );
131             my @yysindex = ( 7,
132                 9, 0, 12, 0, 0, 19, 51, 0, 34, 0,
133                75, 51, 31, -1, 0, 0, 90, 55, 55, 0,
134                51, 0, 114, 0, 75, 26, 53, 61, 0, 77,
135                 0, 0, 114, 0, 26, 53, 64, 76, 0, 0,
136                89, 0, 96, 0, 0, 0, 55, 55, 111, 103,
137                 0, 0, 0, 0, 94, 0, 130, 0, 0, 77,
138               122, 128, 77, 139, 78, 0, 0, 0, 154, 143,
139                33, 0, 51, 0, 0, 51, 0, 111, 111, 0,
140                 0, 0, 130, 119, 114, 0, 0, 0, 26, 53,
141                 0, 0, 0, 89, 0, 0,
142             );
143             my @yyrindex = ( 149,
144               100, 0, 0, 0, 0, 159, 106, 0, 39, 0,
145               100, 133, 0, 0, 0, 0, 0, 149, 140, 0,
146               133, 0, 0, 0, 100, 0, 0, 0, 0, 100,
147                 0, 0, 0, 0, 16, 29, 42, 69, 0, 0,
148                37, 0, 0, 0, 0, 0, 149, 149, 0, 125,
149                 0, 0, 0, 0, 0, 0, 0, 0, 0, 100,
150                 0, 0, 100, 0, 150, 0, 0, 0, 0, 0,
151                 0, 0, 133, 0, 0, 133, 0, 0, 151, 0,
152                 0, 0, 0, 0, 0, 0, 0, 0, 73, 88,
153                 0, 0, 0, 3, 0, 0,
154             );
155             my @yygindex = ( 0,
156                28, 0, 135, 1, -11, 79, 0, 8, -17, -18,
157               -16, 142, 0, 0, 72, 0, 0, 0, 0, 0,
158                50, 0, 123, 0, 80,
159             );
160             sub constYYTABLESIZE () { 166 }
161             my @yytable = ( 29,
162                23, 12, 48, 48, 40, 39, 41, 1, 2, 33,
163                 2, 21, 25, 48, 48, 23, 23, 13, 22, 14,
164                48, 12, 11, 3, 23, 21, 23, 23, 24, 24,
165                12, 24, 22, 23, 13, 47, 48, 24, 36, 24,
166                24, 27, 27, 82, 83, 18, 24, 48, 48, 36,
167                27, 19, 27, 27, 48, 30, 2, 15, 16, 27,
168                73, 84, 48, 76, 85, 92, 91, 93, 26, 26,
169                49, 3, 23, 23, 61, 62, 2, 26, 2, 26,
170                26, 23, 55, 23, 23, 57, 26, 24, 24, 78,
171                23, 3, 26, 27, 28, 79, 24, 58, 24, 24,
172                50, 60, 50, 50, 50, 24, 50, 50, 52, 52,
173                52, 63, 50, 69, 34, 50, 35, 36, 28, 34,
174                67, 89, 90, 28, 58, 58, 37, 86, 87, 38,
175                70, 37, 74, 52, 38, 52, 52, 52, 75, 37,
176                31, 32, 50, 50, 50, 52, 50, 50, 52, 77,
177                37, 50, 50, 50, 80, 50, 50, 81, 2, 46,
178                30, 31, 88, 95, 42, 96,
179             );
180             my @yycheck = ( 17,
181                12, 1, 0, 1, 23, 23, 23, 1, 2, 21,
182                 2, 11, 14, 11, 12, 0, 1, 6, 11, 1,
183                18, 6, 14, 17, 9, 25, 11, 12, 0, 1,
184                30, 1, 25, 18, 6, 10, 0, 9, 0, 11,
185                12, 0, 1, 11, 12, 12, 18, 11, 12, 11,
186                 9, 18, 11, 12, 18, 1, 2, 7, 8, 18,
187                60, 73, 10, 63, 76, 84, 84, 84, 0, 1,
188                10, 17, 0, 1, 47, 48, 2, 9, 2, 11,
189                12, 9, 19, 11, 12, 10, 18, 0, 1, 12,
190                18, 17, 3, 4, 5, 18, 9, 9, 11, 12,
191                 1, 6, 3, 4, 5, 18, 7, 8, 3, 4,
192                 5, 1, 13, 20, 1, 16, 3, 4, 5, 1,
193                18, 3, 4, 5, 0, 1, 13, 78, 79, 16,
194                 1, 13, 11, 1, 16, 3, 4, 5, 11, 0,
195                18, 19, 3, 4, 5, 13, 7, 8, 16, 11,
196                11, 3, 4, 5, 1, 7, 8, 15, 0, 25,
197                11, 11, 83, 85, 23, 94,
198             );
199             sub constYYFINAL () { 4 }
200              
201              
202              
203             sub constYYMAXTOKEN () { 20 }
204             # 270 "y.tab.pl"
205              
206 0     0 0 0 sub yyclearin { $yychar = -1; }
207 0     0 0 0 sub yyerrok { $yyerrflag = 0; }
208 0     0 0 0 sub YYERROR { ++$yynerrs; &yy_err_recover; }
  0         0  
209             sub yy_err_recover
210             {
211 0 0   0 0 0   if ($yyerrflag < 3)
212               {
213 0         0     $yyerrflag = 3;
214 0         0     while (1)
215                 {
216 0 0 0     0       if (($yyn = $yysindex[$yyss[$yyssp]]) &&
      0        
      0        
217                     &n