From ce148a2e0872b708450005cf0b3a944014aae990 Mon Sep 17 00:00:00 2001 From: Dana Jacobsen Date: Tue, 29 Oct 2013 08:37:48 -0700 Subject: [PATCH 1/2] Fix unsafe decoding in indef case Bug: https://github.com/gbarr/perl-Convert-ASN1/pull/15 --- lib/Convert/ASN1/_decode.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Convert/ASN1/_decode.pm b/lib/Convert/ASN1/_decode.pm index e811e8d..eb2b584 100644 --- a/lib/Convert/ASN1/_decode.pm +++ b/lib/Convert/ASN1/_decode.pm @@ -685,6 +685,7 @@ sub _scan_indef { if((ord($tag) & 0x1f) == 0x1f) { my $b; do { + return if $pos >= $end; $tag .= substr($_[0],$pos++,1); $b = ord substr($tag,-1); } while($b & 0x80); From 8125d99e15596fee1b5f904ed74a76bccf54082d Mon Sep 17 00:00:00 2001 From: Dana Jacobsen Date: Tue, 29 Oct 2013 08:53:09 -0700 Subject: [PATCH 2/2] Add second part of position check Bug: https://github.com/gbarr/perl-Convert-ASN1/pull/15 --- lib/Convert/ASN1/_decode.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Convert/ASN1/_decode.pm b/lib/Convert/ASN1/_decode.pm index eb2b584..67b95aa 100644 --- a/lib/Convert/ASN1/_decode.pm +++ b/lib/Convert/ASN1/_decode.pm @@ -679,6 +679,7 @@ sub _scan_indef { $pos += 2; next; } + return if $pos >= $end; my $tag = substr($_[0], $pos++, 1);