From 432a413f585c834d7ecd69a46443a33af40f79db Mon Sep 17 00:00:00 2001 From: Richard Walters Date: Sun, 1 Jul 2018 23:36:07 -0700 Subject: Allow HEXDIG to include lower-case 'a'..'f' --- src/PercentEncodedCharacterDecoder.cpp | 16 +++++++++++++--- src/Uri.cpp | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/PercentEncodedCharacterDecoder.cpp b/src/PercentEncodedCharacterDecoder.cpp index 890d392..dc7cd58 100644 --- a/src/PercentEncodedCharacterDecoder.cpp +++ b/src/PercentEncodedCharacterDecoder.cpp @@ -21,7 +21,13 @@ namespace { * This is the character set containing just the upper-case * letters 'A' through 'F', used in upper-case hexadecimal. */ - const Uri::CharacterSet HEX('A', 'F'); + const Uri::CharacterSet HEX_UPPER('A', 'F'); + + /** + * This is the character set containing just the lower-case + * letters 'a' through 'f', used in lower-case hexadecimal. + */ + const Uri::CharacterSet HEX_LOWER('a', 'f'); } @@ -58,8 +64,10 @@ namespace Uri { impl_->decodedCharacter <<= 4; if (IsCharacterInSet(c, DIGIT)) { impl_->decodedCharacter += (int)(c - '0'); - } else if (IsCharacterInSet(c, HEX)) { + } else if (IsCharacterInSet(c, HEX_UPPER)) { impl_->decodedCharacter += (int)(c - 'A') + 10; + } else if (IsCharacterInSet(c, HEX_LOWER)) { + impl_->decodedCharacter += (int)(c - 'a') + 10; } else { return false; } @@ -70,8 +78,10 @@ namespace Uri { impl_->decodedCharacter <<= 4; if (IsCharacterInSet(c, DIGIT)) { impl_->decodedCharacter += (int)(c - '0'); - } else if (IsCharacterInSet(c, HEX)) { + } else if (IsCharacterInSet(c, HEX_UPPER)) { impl_->decodedCharacter += (int)(c - 'A') + 10; + } else if (IsCharacterInSet(c, HEX_LOWER)) { + impl_->decodedCharacter += (int)(c - 'a') + 10; } else { return false; } diff --git a/src/Uri.cpp b/src/Uri.cpp index 3bb3a59..b30796c 100644 --- a/src/Uri.cpp +++ b/src/Uri.cpp @@ -38,7 +38,8 @@ namespace { */ const Uri::CharacterSet HEXDIG{ Uri::CharacterSet('0', '9'), - Uri::CharacterSet('A', 'F') + Uri::CharacterSet('A', 'F'), + Uri::CharacterSet('a', 'f') }; /** -- cgit v1.2.3