aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsocialgraph <socialgraph@yandex-team.com>2022-08-10 10:20:58 +0300
committersocialgraph <socialgraph@yandex-team.com>2022-08-10 10:20:58 +0300
commit07163912675dd114719ec1090ae095355b51ad75 (patch)
treef1565a4d1ebbf8897749ff2425c14d79ebf43c19
parenta1b5c2e7f704c40f99d96b1df8ccdb75b05a40df (diff)
downloadydb-07163912675dd114719ec1090ae095355b51ad75.tar.gz
ui32 not enough for features flag
Так как добавил новый флаг, отвечающий за оставление хэшбенга, то Feature флаги перестали помещаться в свои прежние 32 бита, то везде поменял long на ui64
-rw-r--r--library/cpp/http/fetch/httpload.cpp6
-rw-r--r--library/cpp/uri/assign.cpp16
-rw-r--r--library/cpp/uri/common.cpp2
-rw-r--r--library/cpp/uri/common.h23
-rw-r--r--library/cpp/uri/location.cpp2
-rw-r--r--library/cpp/uri/uri.cpp2
-rw-r--r--library/cpp/uri/uri.h10
7 files changed, 31 insertions, 30 deletions
diff --git a/library/cpp/http/fetch/httpload.cpp b/library/cpp/http/fetch/httpload.cpp
index 82ea8900b5..f3f6c5245e 100644
--- a/library/cpp/http/fetch/httpload.cpp
+++ b/library/cpp/http/fetch/httpload.cpp
@@ -211,7 +211,7 @@ bool httpLoadAgent::startRequest(const char* url,
URL_.Clear();
PersistentConn_ = persistent;
- long flags = THttpURL::FeatureSchemeKnown | THttpURL::FeaturesNormalizeSet;
+ ui64 flags = THttpURL::FeatureSchemeKnown | THttpURL::FeaturesNormalizeSet;
if (HandleAuthorization_)
flags |= THttpURL::FeatureAuthSupported;
@@ -231,7 +231,7 @@ bool httpLoadAgent::startRequest(const char* url,
URL_.Clear();
PersistentConn_ = persistent;
- long flags = THttpURL::FeatureSchemeKnown | THttpURL::FeaturesNormalizeSet;
+ ui64 flags = THttpURL::FeatureSchemeKnown | THttpURL::FeaturesNormalizeSet;
if (HandleAuthorization_)
flags |= THttpURL::FeatureAuthSupported;
@@ -285,7 +285,7 @@ bool httpLoadAgent::setHost(const char* host_url,
URL_.Clear();
PersistentConn_ = true;
- long flags = THttpURL::FeatureSchemeKnown | THttpURL::FeaturesNormalizeSet;
+ ui64 flags = THttpURL::FeatureSchemeKnown | THttpURL::FeaturesNormalizeSet;
if (HandleAuthorization_)
flags |= THttpURL::FeatureAuthSupported;
diff --git a/library/cpp/uri/assign.cpp b/library/cpp/uri/assign.cpp
index 97122c445a..dc694baefb 100644
--- a/library/cpp/uri/assign.cpp
+++ b/library/cpp/uri/assign.cpp
@@ -61,7 +61,7 @@ namespace NUri {
// decoding shortens so writing over host in buf is OK
TMemoryWriteBuffer out(buf.Get(), buflen);
TEncoder decoder(out, FeatureDecodeANY | FeatureToLower);
- const long outFlags = decoder.ReEncode(host);
+ const ui64 outFlags = decoder.ReEncode(host);
hasExtended = 0 != (outFlags & FeatureEncodeExtendedASCII);
// check again
@@ -106,7 +106,7 @@ namespace NUri {
TStringBuf TUri::HostToAscii(const TStringBuf& host, TMallocPtr<char>& buf, bool allowIDN, ECharset enc) {
// find what we have
- long haveFlags = 0;
+ ui64 haveFlags = 0;
for (size_t i = 0; i != host.length(); ++i) {
haveFlags |= TEncoder::GetFlags(host[i]).FeatFlags;
}
@@ -124,7 +124,7 @@ namespace NUri {
return outHost;
}
- static inline bool AppendField(TMemoryWriteBuffer& out, TField::EField field, const TStringBuf& value, long flags) {
+ static inline bool AppendField(TMemoryWriteBuffer& out, TField::EField field, const TStringBuf& value, ui64 flags) {
if (value.empty()) {
return false;
}
@@ -158,7 +158,7 @@ namespace NUri {
// special processing for fields
const bool convertIDN = parser.Flags & FeatureConvertHostIDN;
- long flags = parser.Flags.Allow;
+ ui64 flags = parser.Flags.Allow;
if (convertIDN) {
flags |= FeatureAllowHostIDN | FeatureCheckHost;
}
@@ -271,7 +271,7 @@ namespace NUri {
char* beg = out.Buf();
TStringBuf value = section.Get();
- long careFlags = section.GetFlagsEncode();
+ ui64 careFlags = section.GetFlagsEncode();
if (field == FieldQuery) {
if (queryEscapedFragment.IsInited()) {
@@ -279,7 +279,7 @@ namespace NUri {
if (!queryEscapedFragment.empty()) {
ReEncodeToField(
out, queryEscapedFragment,
- FieldQuery, FeatureDecodeANY | careFlags,
+ FieldQuery, FeatureDecodeANY | careFlags,
FieldFrag, FeatureDecodeANY | parser.GetFieldFlags(FieldFrag)
);
}
@@ -322,9 +322,9 @@ namespace NUri {
FldSetNoDirty(field, TStringBuf(beg, end));
// special character case
- const long checkChars = section.GetFlagsAllPlaintext() & FeaturesCheckSpecialChar;
+ const ui64 checkChars = section.GetFlagsAllPlaintext() & FeaturesCheckSpecialChar;
if (0 != checkChars) { // has unencoded special chars: check permission
- const long allowChars = parser.GetFieldFlags(field) & checkChars;
+ const ui64 allowChars = parser.GetFieldFlags(field) & checkChars;
if (checkChars != allowChars) {
status = ParsedBadFormat;
}
diff --git a/library/cpp/uri/common.cpp b/library/cpp/uri/common.cpp
index 05af1e57d1..5bcb2fc38b 100644
--- a/library/cpp/uri/common.cpp
+++ b/library/cpp/uri/common.cpp
@@ -4,7 +4,7 @@
#include <util/generic/singleton.h>
namespace NUri {
- static_assert(TFeature::FeatureMAX <= sizeof(unsigned long) * 8, "expect TFeature::FeatureMAX <= sizeof(unsigned long) * 8");
+ static_assert(TFeature::FeatureMAX <= sizeof(ui64) * 8, "expect TFeature::FeatureMAX <= sizeof(ui64) * 8");
const TSchemeInfo TSchemeInfo::Registry[] = {
TSchemeInfo(TScheme::SchemeEmpty, TStringBuf()), // scheme is empty and inited
diff --git a/library/cpp/uri/common.h b/library/cpp/uri/common.h
index 8025357763..27c559a55b 100644
--- a/library/cpp/uri/common.h
+++ b/library/cpp/uri/common.h
@@ -30,6 +30,7 @@ namespace NUri {
FIELD_NAME(Path),
FIELD_NAME(Query),
FIELD_NAME(Frag),
+ FIELD_NAME(HashBang),
// add fields above
FieldUrlMAX,
@@ -121,7 +122,7 @@ namespace NUri {
#define FEATURE_NAME(f) _BitFeature##f
#define FEATURE_FLAG_NAME(f) Feature##f
-#define FEATURE_FLAG(f) FEATURE_FLAG_NAME(f) = 1UL << FEATURE_NAME(f)
+#define FEATURE_FLAG(f) FEATURE_FLAG_NAME(f) = 1ULL << FEATURE_NAME(f)
protected:
enum EBit {
@@ -251,19 +252,15 @@ namespace NUri {
// internal usage: decode all encoded symbols
FEATURE_NAME(DecodeANY),
+ // move and encode #! fragment after the query
+ FEATURE_NAME(FragmentToHashBang),
+
// add before this line
_FeatureMAX
};
- protected:
- enum EPrivate : ui32 {
- FEATURE_FLAG(DecodeANY),
- FEATURE_FLAG(DecodeFieldAllowed),
- FEATURE_FLAG(DecodeStandardExtra),
- };
-
public:
- enum EPublic : ui32 {
+ enum EPublic : ui64 {
FeatureMAX = _FeatureMAX,
FEATURE_FLAG(AuthSupported),
FEATURE_FLAG(SchemeKnown),
@@ -283,6 +280,7 @@ namespace NUri {
FEATURE_FLAG(DecodeExtendedDelim),
FEATURE_FLAG(EncodeCntrl),
FEATURE_FLAG(EncodePercent),
+ FEATURE_FLAG(FragmentToHashBang),
FEATURE_FLAG(HashBangToEscapedFragment),
FEATURE_FLAG(EscapedToHashBangFragment),
FEATURE_FLAG(PathDenyRootParent),
@@ -296,6 +294,9 @@ namespace NUri {
FEATURE_FLAG(NoRelPath),
FEATURE_FLAG_NAME(HierURI) = FEATURE_FLAG_NAME(NoRelPath),
FEATURE_FLAG(UpperEncoded),
+ FEATURE_FLAG(DecodeANY),
+ FEATURE_FLAG(DecodeFieldAllowed),
+ FEATURE_FLAG(DecodeStandardExtra),
};
#undef FEATURE_NAME
@@ -303,7 +304,7 @@ namespace NUri {
public:
//==============================
- enum ESets {
+ enum ESets : ui64 {
// these are guaranteed and will change buffer size
FeatureDecodeStandard = 0 | FeatureDecodeUnreserved | FeatureDecodeStandardExtra,
@@ -442,7 +443,7 @@ namespace NUri {
#define FEATURE_NAME(f) _BitFeature##f
#define FEATURE_FLAG_NAME(f) Feature##f
-#define FEATURE_FLAG(f) FEATURE_FLAG_NAME(f) = 1UL << FEATURE_NAME(f)
+#define FEATURE_FLAG(f) FEATURE_FLAG_NAME(f) = 1ULL << FEATURE_NAME(f)
struct TQueryArg {
TStringBuf Name;
diff --git a/library/cpp/uri/location.cpp b/library/cpp/uri/location.cpp
index a6a4d11ffa..c6c0d4b529 100644
--- a/library/cpp/uri/location.cpp
+++ b/library/cpp/uri/location.cpp
@@ -2,7 +2,7 @@
#include "uri.h"
namespace NUri {
- static const int URI_PARSE_FLAGS =
+ static const ui64 URI_PARSE_FLAGS =
(TFeature::FeaturesRecommended | TFeature::FeatureConvertHostIDN | TFeature::FeatureEncodeExtendedDelim | TFeature::FeatureEncodePercent) & ~TFeature::FeatureHashBangToEscapedFragment;
TString ResolveRedirectLocation(const TStringBuf& baseUrl,
diff --git a/library/cpp/uri/uri.cpp b/library/cpp/uri/uri.cpp
index 56a9a4e5ef..962e84e7a1 100644
--- a/library/cpp/uri/uri.cpp
+++ b/library/cpp/uri/uri.cpp
@@ -287,7 +287,7 @@ namespace NUri {
/********************************************************/
TUri::TLinkType TUri::Normalize(const TUri& base,
- const TStringBuf& link, const TStringBuf& codebase, long careFlags, ECharset enc) {
+ const TStringBuf& link, const TStringBuf& codebase, ui64 careFlags, ECharset enc) {
// parse URL
if (ParsedOK != ParseImpl(link, careFlags, 0, SchemeEmpty, enc))
return LinkIsBad;
diff --git a/library/cpp/uri/uri.h b/library/cpp/uri/uri.h
index 3b6c19fe4a..71fc687fc2 100644
--- a/library/cpp/uri/uri.h
+++ b/library/cpp/uri/uri.h
@@ -19,7 +19,7 @@
namespace NUri {
/********************************************************/
class TUri
- : public TFeature,
+ : public TFeature,
public TField,
public TScheme,
public TState {
@@ -354,7 +354,7 @@ namespace NUri {
void Merge(const TUri& base, int correctAbs = -1);
- TLinkType Normalize(const TUri& base, const TStringBuf& link, const TStringBuf& codebase = TStringBuf(), long careFlags = FeaturesDefault, ECharset enc = CODES_UTF8);
+ TLinkType Normalize(const TUri& base, const TStringBuf& link, const TStringBuf& codebase = TStringBuf(), ui64 careFlags = FeaturesDefault, ECharset enc = CODES_UTF8);
private:
int PrintFlags(int flags) const {
@@ -543,15 +543,15 @@ namespace NUri {
return LinkIsGlobal;
}
- static IOutputStream& ReEncodeField(IOutputStream& out, const TStringBuf& val, EField fld, long flags = FeaturesEncodeDecode) {
+ static IOutputStream& ReEncodeField(IOutputStream& out, const TStringBuf& val, EField fld, ui64 flags = FeaturesEncodeDecode) {
return NEncode::TEncoder::ReEncode(out, val, NEncode::TEncodeMapper(flags, fld));
}
- static IOutputStream& ReEncodeToField(IOutputStream& out, const TStringBuf& val, EField srcfld, long srcflags, EField dstfld, long dstflags) {
+ static IOutputStream& ReEncodeToField(IOutputStream& out, const TStringBuf& val, EField srcfld, ui64 srcflags, EField dstfld, ui64 dstflags) {
return NEncode::TEncoder::ReEncodeTo(out, val, NEncode::TEncodeMapper(srcflags, srcfld), NEncode::TEncodeToMapper(dstflags, dstfld));
}
- static IOutputStream& ReEncode(IOutputStream& out, const TStringBuf& val, long flags = FeaturesEncodeDecode) {
+ static IOutputStream& ReEncode(IOutputStream& out, const TStringBuf& val, ui64 flags = FeaturesEncodeDecode) {
return ReEncodeField(out, val, FieldAllMAX, flags);
}