From 5cce69b48175866d104859fd14a5bdabfa4b1788 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 14 Jan 2022 10:59:37 +0000 Subject: [PATCH] fix: reject empty org & bucket Previously a request that specified an empty org & bucket value would be mapped to a database named "_". This commit changes the org/bucket mapping fn to return an error if either org or bucket is empty. --- data_types/src/names.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/data_types/src/names.rs b/data_types/src/names.rs index b691eab0b4..1384824051 100644 --- a/data_types/src/names.rs +++ b/data_types/src/names.rs @@ -8,6 +8,9 @@ use snafu::{ResultExt, Snafu}; pub enum OrgBucketMappingError { #[snafu(display("Invalid database name: {}", source))] InvalidDatabaseName { source: DatabaseNameError }, + + #[snafu(display("missing org/bucket value"))] + NotSpecified, } /// Map an InfluxDB 2.X org & bucket into an IOx DatabaseName. @@ -24,6 +27,11 @@ pub fn org_and_bucket_to_database<'a, O: AsRef, B: AsRef>( let org: Cow<'_, str> = utf8_percent_encode(org.as_ref(), NON_ALPHANUMERIC).into(); let bucket: Cow<'_, str> = utf8_percent_encode(bucket.as_ref(), NON_ALPHANUMERIC).into(); + // An empty org or bucket is not acceptable. + if org.is_empty() || bucket.is_empty() { + return Err(OrgBucketMappingError::NotSpecified); + } + let db_name = format!("{}{}{}", org.as_ref(), SEPARATOR, bucket.as_ref()); DatabaseName::new(db_name).context(InvalidDatabaseNameSnafu) @@ -72,4 +80,11 @@ mod tests { let got = org_and_bucket_to_database("org!", "bucket").unwrap(); assert_eq!(got.as_str(), "org%21_bucket"); } + + #[test] + fn test_empty_org_bucket() { + let err = org_and_bucket_to_database("", "") + .expect_err("should fail with empty org/bucket valuese"); + assert!(matches!(err, OrgBucketMappingError::NotSpecified)); + } }