aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bpkg/manifest-utility.cxx18
-rw-r--r--bpkg/manifest-utility.hxx3
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*);