Skip to content

url2purl should not attempt to make a PackageURL from a URL without a path #72

@JonoYang

Description

@JonoYang

I was running some code that updates purls based on download URLs and url2purl crashed on the URL http://apt-rpm.org/

Traceback (most recent call last):
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/packageurl/contrib/url2purl.py", line 54, in url2purl
    return purl_router.process(url)
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/packageurl/contrib/route.py", line 174, in process
    endpoint = self.resolve(string)
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/packageurl/contrib/route.py", line 197, in resolve
    raise NoRouteAvailable(string)
packageurl.contrib.route.NoRouteAvailable: http://apt-rpm.org/

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/home/jono/nexb/src/dejacode/component_catalog/management/commands/setpurls.py", line 79, in handle
    package_url = url2purl.get_purl(package.download_url)
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/packageurl/contrib/url2purl.py", line 58, in url2purl
    return build_generic_purl(url)
  File "/home/jono/nexb/src/dejacode/lib/python3.6/site-packages/packageurl/contrib/url2purl.py", line 105, in build_generic_purl
    file_name = uri_path_segments[-1]
IndexError: list index out of range

We should check after https://github.com/package-url/packageurl-python/blob/main/src/packageurl/contrib/url2purl.py#L104 to see if we have URL path segments before creating a purl.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions