File tree 3 files changed +8
-1
lines changed
3 files changed +8
-1
lines changed Original file line number Diff line number Diff line change @@ -136,11 +136,16 @@ ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,
136
136
137
137
p = * pp ;
138
138
i = * (p ++ );
139
+ if (i > 7 )
140
+ {
141
+ i = ASN1_R_INVALID_BIT_STRING_BITS_LEFT ;
142
+ goto err ;
143
+ }
139
144
/* We do this to preserve the settings. If we modify
140
145
* the settings, via the _set_bit function, we will recalculate
141
146
* on output */
142
147
ret -> flags &= ~(ASN1_STRING_FLAG_BITS_LEFT |0x07 ); /* clear */
143
- ret -> flags |=(ASN1_STRING_FLAG_BITS_LEFT |( i & 0x07 ) ); /* set */
148
+ ret -> flags |=(ASN1_STRING_FLAG_BITS_LEFT |i ); /* set */
144
149
145
150
if (len -- > 1 ) /* using one because of the bits left byte */
146
151
{
Original file line number Diff line number Diff line change @@ -1329,6 +1329,7 @@ void ERR_load_ASN1_strings(void);
1329
1329
#define ASN1_R_ILLEGAL_TIME_VALUE 184
1330
1330
#define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185
1331
1331
#define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128
1332
+ #define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220
1332
1333
#define ASN1_R_INVALID_BMPSTRING_LENGTH 129
1333
1334
#define ASN1_R_INVALID_DIGIT 130
1334
1335
#define ASN1_R_INVALID_MIME_TYPE 205
Original file line number Diff line number Diff line change @@ -246,6 +246,7 @@ static ERR_STRING_DATA ASN1_str_reasons[]=
246
246
{ERR_REASON (ASN1_R_ILLEGAL_TIME_VALUE ) ,"illegal time value" },
247
247
{ERR_REASON (ASN1_R_INTEGER_NOT_ASCII_FORMAT ),"integer not ascii format" },
248
248
{ERR_REASON (ASN1_R_INTEGER_TOO_LARGE_FOR_LONG ),"integer too large for long" },
249
+ {ERR_REASON (ASN1_R_INVALID_BIT_STRING_BITS_LEFT ),"invalid bit string bits left" },
249
250
{ERR_REASON (ASN1_R_INVALID_BMPSTRING_LENGTH ),"invalid bmpstring length" },
250
251
{ERR_REASON (ASN1_R_INVALID_DIGIT ) ,"invalid digit" },
251
252
{ERR_REASON (ASN1_R_INVALID_MIME_TYPE ) ,"invalid mime type" },
You can’t perform that action at this time.
0 commit comments