Commit d413ca5

mo khan <mo.khan@gmail.com>
2020-05-19 16:00:54
Capture invalid urls
1 parent 154f15f
Changed files (4)
lib
spandx
spec
lib/spandx/core/http.rb
@@ -27,6 +27,9 @@ module Spandx
             client.get(escape ? Addressable::URI.escape(uri) : uri)
           end
         end
+      rescue URI::InvalidURIError => error
+        Spandx.logger.error(error)
+        default
       rescue *Net::Hippie::CONNECTION_ERRORS
         default
       end
spec/fixtures/maven/invalid-spec-url-pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.example</groupId>
+  <artifactId>invalid</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <name>invalid</name>
+  <url>http://maven.apache.org</url>
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>model</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+</project>
spec/unit/java/parsers/maven_spec.rb
@@ -12,6 +12,14 @@ RSpec.describe Spandx::Java::Parsers::Maven do
       specify { expect(because[0].name).to eql('junit:junit') }
       specify { expect(because[0].version).to eql('3.8.1') }
     end
+
+    context 'when parsing an invlid pom.xml' do
+      let(:lockfile) { fixture_file('maven/invalid-spec-url-pom.xml') }
+
+      let(:because) { subject.parse(lockfile) }
+
+      specify { expect(because[0].name).to eql('${project.groupId}:model') }
+    end
   end
 
   describe '.matches?' do
spec/unit/java/metadata_spec.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+RSpec.describe Spandx::Java::Metadata do
+  describe '#licenses' do
+    context 'when the metadata is invalid' do
+      subject { described_class.new(artifact_id: '${project.artifactId}', group_id: '${project.groupId}', version: '${project.version}') }
+
+      let(:result) { subject.licenses }
+
+      specify { expect(result).to be_empty }
+    end
+  end
+end