Prevent decoding empty uuid strings
This commit is contained in:
parent
5f9d64f2d9
commit
8feb2ec10e
13
src/uuid.rs
13
src/uuid.rs
@ -1,6 +1,6 @@
|
||||
use std::fmt::{self, Display, Formatter};
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
use anyhow::{anyhow, Context, Result};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use uuid::Uuid;
|
||||
|
||||
@ -99,6 +99,10 @@ pub fn base62_decode(input: &str) -> Result<u128> {
|
||||
let base = BASE62_CHARS.len() as u128;
|
||||
let mut number = 0u128;
|
||||
|
||||
if input.is_empty() {
|
||||
return Err(anyhow!("cannot decode an empty string"));
|
||||
}
|
||||
|
||||
for &byte in input.as_bytes() {
|
||||
if let Some(value) = BASE62_CHARS.iter().position(|&ch| ch == byte) {
|
||||
number = number.checked_mul(base).context("u128 overflow")? + value as u128;
|
||||
@ -154,4 +158,11 @@ mod tests {
|
||||
|
||||
assert_eq!(uuid, decoded_uuid);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn errors_if_encoded_string_is_empty() {
|
||||
let decode_result = base62_decode("");
|
||||
|
||||
assert!(decode_result.is_err());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user