aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/uri/encode.cpp
diff options
context:
space:
mode:
authoralbert <albert@yandex-team.ru>2022-02-10 16:48:14 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:48:14 +0300
commit9f25ef3232c288ca664ceee6c376cf64e4349a2e (patch)
treeb192eaf3150845f7302fafd460a972b0439d6fe5 /library/cpp/uri/encode.cpp
parent6a1e535429145ec1ecfbc5f1efd3c95323261fb5 (diff)
downloadydb-9f25ef3232c288ca664ceee6c376cf64e4349a2e.tar.gz
Restoring authorship annotation for <albert@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/uri/encode.cpp')
-rw-r--r--library/cpp/uri/encode.cpp110
1 files changed, 55 insertions, 55 deletions
diff --git a/library/cpp/uri/encode.cpp b/library/cpp/uri/encode.cpp
index 584fb1bac9..2f63d8140a 100644
--- a/library/cpp/uri/encode.cpp
+++ b/library/cpp/uri/encode.cpp
@@ -1,33 +1,33 @@
-#include "encode.h"
+#include "encode.h"
#include <util/generic/singleton.h>
-namespace NUri {
+namespace NUri {
namespace NEncode {
-// http://tools.ietf.org/html/rfc3986#section-2.2
-#define GENDELIMS0 ":/?#[]@"
-#define SUBDELIMS0 "!$&'()*+,;="
-// http://tools.ietf.org/html/rfc3986#section-2.3
-#define UNRESERVED "-._~"
-
-// now find subsets which can sometimes be decoded
-
-// remove '#' which can't ever be decoded
-// don't mark anything allowed for pass (pass is completely encoded)
-// safe in path, qry, frag
-#define GENDELIMS1 ":@"
-// allowed in qry, frag
-#define GENDELIMS2 "/?"
-
-// qry-unsafe chars
-#define SUBDELIMS1 "&+=;"
-// rest allowed in qry, frag
-#define SUBDELIMS2 "!$'()*,"
-
+// http://tools.ietf.org/html/rfc3986#section-2.2
+#define GENDELIMS0 ":/?#[]@"
+#define SUBDELIMS0 "!$&'()*+,;="
+// http://tools.ietf.org/html/rfc3986#section-2.3
+#define UNRESERVED "-._~"
+
+// now find subsets which can sometimes be decoded
+
+// remove '#' which can't ever be decoded
+// don't mark anything allowed for pass (pass is completely encoded)
+// safe in path, qry, frag
+#define GENDELIMS1 ":@"
+// allowed in qry, frag
+#define GENDELIMS2 "/?"
+
+// qry-unsafe chars
+#define SUBDELIMS1 "&+=;"
+// rest allowed in qry, frag
+#define SUBDELIMS2 "!$'()*,"
+
const TEncoder::TGrammar& TEncoder::Grammar() {
return *Singleton<TEncoder::TGrammar>();
}
-
+
// initialize the grammar map
TEncoder::TGrammar::TGrammar() {
// first set up unreserved characters safe in any field
@@ -36,37 +36,37 @@ namespace NUri {
AddRng('A', 'Z', ECFUpper, featUnres | TFeature::FeatureToLower);
AddRng('a', 'z', ECFLower, featUnres);
Add(UNRESERVED, ECFUnres, featUnres);
-
+
// XXX: standard "safe" set used previously "-_.!~*();/:@$,", with comment:
// alnum + reserved + mark + ( '[', ']') - ('=' '+' '&' '\'' '"' '\\' '?')
Add("!*();/:@$,", ECFStdrd, TFeature::FeatureDecodeStandardExtra);
-
+
// now field-specific subsets of reserved characters (gen-delims + sub-delims)
const ui64 featSafe = TFeature::FeatureDecodeFieldAllowed;
-
+
Add(GENDELIMS1, 0, featSafe, TField::FlagPath | TField::FlagQuery | TField::FlagFrag);
Add(GENDELIMS2, 0, featSafe, TField::FlagQuery | TField::FlagFrag);
-
+
Add(SUBDELIMS1, 0, featSafe, TField::FlagUser);
Add(SUBDELIMS2, 0, featSafe, TField::FlagUser | TField::FlagQuery | TField::FlagFrag);
-
+
// control chars
AddRng(0x00, 0x20, TFeature::FeatureEncodeCntrl);
Add(0x7f, TFeature::FeatureEncodeCntrl);
-
+
// '%' starts a percent-encoded sequence
Add('%', TFeature::FeatureDecodeANY | TFeature::FeatureEncodePercent);
-
+
// extended ASCII
AddRng(128, 255, TFeature::FeatureEncodeExtendedASCII | TFeature::FeatureDecodeExtendedASCII);
-
+
// extended delims
Add("\"<>[\\]^`{|}", TFeature::FeatureEncodeExtendedDelim | TFeature::FeatureDecodeExtendedDelim);
-
+
// add characters with other features
Add(' ', TFeature::FeatureEncodeSpace | TFeature::FeatureEncodeSpaceAsPlus);
Add("'\"\\", TFeature::FeatureEncodeForSQL);
-
+
GetMutable(':').EncodeFld |= TField::FlagUser;
GetMutable('?').EncodeFld |= TField::FlagPath;
GetMutable('#').EncodeFld |= TField::FlagPath | TField::FlagQuery;
@@ -83,44 +83,44 @@ namespace NUri {
return true;
return (fldmask & DecodeFld) && (flags & TFeature::FeatureDecodeFieldAllowed);
}
-
+
const int dD = 'a' - 'A';
-
+
int TEncodeMapper::EncodeSym(unsigned char& ch) const {
const TCharFlags& chflags = TEncoder::GetFlags(ch);
const ui64 flags = Flags & chflags.FeatFlags;
-
+
if (flags & TFeature::FeatureToLower)
ch += dD;
-
+
if (Q_DecodeAny)
return -1;
-
+
if (flags & TFeature::FeaturesEncode)
return 1;
-
+
if (' ' == ch) {
if (Q_EncodeSpcAsPlus)
ch = '+';
return 0;
}
-
+
return 0;
}
-
+
int TEncodeMapper::EncodeHex(unsigned char& ch) const {
const TCharFlags& chflags = TEncoder::GetFlags(ch);
const ui64 flags = Flags & chflags.FeatFlags;
-
+
if (flags & TFeature::FeatureToLower)
ch += dD;
-
+
if (Q_DecodeAny)
return -1;
-
+
if (chflags.IsDecode(FldMask, Flags))
return 0;
-
+
if (' ' == ch) {
if (!Q_EncodeSpcAsPlus)
return 1;
@@ -128,21 +128,21 @@ namespace NUri {
return 0;
}
- return 1;
+ return 1;
}
-
+
bool TEncodeToMapper::Encode(unsigned char ch) const {
if (Q_DecodeAny)
return false;
-
+
const TCharFlags& chflags = TEncoder::GetFlags(ch);
if (FldMask & chflags.EncodeFld)
return true;
-
+
const ui64 flags = Flags & chflags.FeatFlags;
return (flags & TFeature::FeaturesEncode);
}
-
+
TEncoder::TEncoder(IOutputStream& out, const TEncodeMapper& fldsrc, const TEncodeToMapper& flddst)
: Out(out)
, FldSrc(fldsrc)
@@ -151,12 +151,12 @@ namespace NUri {
, HexValue(0)
{
}
-
+
IOutputStream& TEncoder::Hex(IOutputStream& out, unsigned char val) {
static const char sHexCodes[] = "0123456789ABCDEF";
return out << sHexCodes[(val >> 4) & 0xF] << sHexCodes[val & 0xF];
}
-
+
IOutputStream& TEncoder::EncodeAll(IOutputStream& out, const TStringBuf& val) {
for (size_t i = 0; i != val.length(); ++i)
Encode(out, val[i]);
@@ -173,7 +173,7 @@ namespace NUri {
}
return out;
}
-
+
IOutputStream& TEncoder::EncodeField(
IOutputStream& out, const TStringBuf& val, TField::EField fld) {
const ui32 fldmask = ui32(1) << fld;
@@ -210,11 +210,11 @@ namespace NUri {
Out << ch;
return;
}
-
+
Out << '%';
if (escapepct)
Out.Write("25", 2); // '%'
Hex(Out, ch);
}
- }
+ }
}