mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
Fix integer overflow in spotify_id
This commit is contained in:
parent
5d43b7dc31
commit
049bcf616f
1 changed files with 23 additions and 8 deletions
|
@ -116,17 +116,20 @@ impl SpotifyId {
|
||||||
///
|
///
|
||||||
/// [Spotify URI]: https://developer.spotify.com/documentation/web-api/#spotify-uris-and-ids
|
/// [Spotify URI]: https://developer.spotify.com/documentation/web-api/#spotify-uris-and-ids
|
||||||
pub fn from_uri(src: &str) -> Result<SpotifyId, SpotifyIdError> {
|
pub fn from_uri(src: &str) -> Result<SpotifyId, SpotifyIdError> {
|
||||||
// We expect the ID to be the last colon-delimited item in the URI.
|
let src = src.strip_prefix("spotify:").ok_or(SpotifyIdError)?;
|
||||||
let b = src.as_bytes();
|
|
||||||
let id_i = b.len() - SpotifyId::SIZE_BASE62;
|
if src.len() <= SpotifyId::SIZE_BASE62 {
|
||||||
if b[id_i - 1] != b':' {
|
|
||||||
return Err(SpotifyIdError);
|
return Err(SpotifyIdError);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut id = SpotifyId::from_base62(&src[id_i..])?;
|
let colon_index = src.len() - SpotifyId::SIZE_BASE62 - 1;
|
||||||
|
|
||||||
// Slice offset by 8 as we are skipping the "spotify:" prefix.
|
if src.as_bytes()[colon_index] != b':' {
|
||||||
id.audio_type = src[8..id_i - 1].into();
|
return Err(SpotifyIdError);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut id = SpotifyId::from_base62(&src[colon_index + 1..])?;
|
||||||
|
id.audio_type = src[..colon_index].into();
|
||||||
|
|
||||||
Ok(id)
|
Ok(id)
|
||||||
}
|
}
|
||||||
|
@ -305,7 +308,7 @@ mod tests {
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
static CONV_INVALID: [ConversionCase; 2] = [
|
static CONV_INVALID: [ConversionCase; 3] = [
|
||||||
ConversionCase {
|
ConversionCase {
|
||||||
id: 0,
|
id: 0,
|
||||||
kind: SpotifyAudioType::NonPlayable,
|
kind: SpotifyAudioType::NonPlayable,
|
||||||
|
@ -330,6 +333,18 @@ mod tests {
|
||||||
154, 27, 28, 251,
|
154, 27, 28, 251,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
ConversionCase {
|
||||||
|
id: 0,
|
||||||
|
kind: SpotifyAudioType::NonPlayable,
|
||||||
|
// Uri too short
|
||||||
|
uri: "spotify:azb:aRS48xBl0tH",
|
||||||
|
base16: "--------------------",
|
||||||
|
base62: "....................",
|
||||||
|
raw: &[
|
||||||
|
// Invalid length.
|
||||||
|
154, 27, 28, 251,
|
||||||
|
],
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in a new issue