diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2018-05-21 18:06:39 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2018-05-21 18:06:39 +0300 |
commit | 01b11f060e656c00f875d05a8d4b283f524b0358 (patch) | |
tree | d204e4de36bf5eb7213c2ef140bef467cbf6873e | |
parent | c07da0ae583536b39c7627cd665c93b94df7aed0 (diff) |
Add package name validation to parse_package_name() function
-rw-r--r-- | bpkg/manifest-utility.cxx | 18 | ||||
-rw-r--r-- | bpkg/manifest-utility.hxx | 3 |
2 files changed, 17 insertions, 4 deletions
diff --git a/bpkg/manifest-utility.cxx b/bpkg/manifest-utility.cxx index 634f522..defa675 100644 --- a/bpkg/manifest-utility.cxx +++ b/bpkg/manifest-utility.cxx @@ -45,10 +45,22 @@ namespace bpkg if (const char* p = traits::find (s, n, '/')) n = static_cast<size_t> (p - s); - if (n == 0) - fail << "empty package name in '" << s << "'"; + string nm (s, n); - return string (s, n); + // The package name may be a part of some compound argument. So while the + // invalid package name would likely result in the operation failure, the + // validating can ease the troubleshooting. + // + try + { + validate_package_name (nm); + } + catch (const invalid_argument& e) + { + fail << "invalid package name in '" << s << "': " << e; + } + + return nm; } version diff --git a/bpkg/manifest-utility.hxx b/bpkg/manifest-utility.hxx index 5e42b84..c22746b 100644 --- a/bpkg/manifest-utility.hxx +++ b/bpkg/manifest-utility.hxx @@ -31,7 +31,8 @@ namespace bpkg package_scheme parse_package_scheme (const char*&); - // Extract name and version components from <name>[/<version>]. + // Extract and validate the package name and version components from + // <name>[/<version>]. // string parse_package_name (const char*); |