#!/usr/bin/perl -w
use XML::Parser;

%CVEDBReader::desc = ();

my @elemstack = ();
my $name;
my $version;
my $insuse=0;
my $currentcve;

sub handle_start() {
        my ($expat, $element, %attr) = @_;

	if (($element eq "item") && (($attr{'type'} eq 'CAN') || ($attr{'type'} eq 'CVE'))) {
		$currentcve = $attr{'name'};
	}
	if (($element eq "ref") && ($attr{'source'} eq 'SUSE')) {
	}
	push @elemstack, $element;
}

sub handle_end() {
        my ($expat, $element) = @_;
        #print "END: expat: $expat, element: $element\n";

        pop @elemstack;
}
sub handle_char() {
        my ($expat, $str) = @_;

	if ($elemstack[$#elemstack] eq "desc") {

		$str =~ s/Bluetooth.*Core/Bluetooth Core/g;	# Bluetooth(r)

		if (!defined($CVEDBReader::desc{$currentcve})) {
			$CVEDBReader::desc{$currentcve} = $str;
		} else {
			$CVEDBReader::desc{$currentcve} .= $str;
		}
	}
}

print STDERR "Reading CVE XML DB.\n" if (-t STDERR);

my $xmlparse = new XML::Parser(Handlers => { Start => \&handle_start, End   => \&handle_end, Char  => \&handle_char}, ProtocolEncoding => 'US-ASCII');
open(CVEXML,"curl -s http://cve.mitre.org/data/downloads/allitems.xml.gz|zcat|")||die;
$xmlparse->parse(*CVEXML, ProtocolEncoding => 'ISO-8859-1');
close(CVEXML)||die "curling http://cve.mitre.org/data/downloads/allitems.xml.gz failed: $!";

print STDERR "Reading CVE XML DB reading done.\n" if (-t STDERR);

#print STDERR "CVE-2020-10134: " . $CVEDBReader::desc{'CVE-2020-10134'} . "\n";

1;
