Remove the hardcoded globals from GlobalNameValueTableWrapper
The ultimate goal is to de-virtualize ArrayData. To do this, we need a single ArrayData subclass that has all the capabilities we need. This
Esse commit está contido em:
@@ -39,29 +39,24 @@ void free_global_variables_after_sweep() {
|
||||
g_variables = nullptr;
|
||||
}
|
||||
|
||||
SystemGlobals* get_system_globals() { return get_global_variables(); }
|
||||
|
||||
GlobalNameValueTableWrapper::GlobalNameValueTableWrapper(
|
||||
NameValueTable* tab) : NameValueTableWrapper(tab) {
|
||||
|
||||
VarNR arr(HphpArray::GetStaticEmptyArray());
|
||||
#define X(s,v) \
|
||||
tab->migrateSet(StringData::GetStaticString(#s), \
|
||||
gvm_##s.asTypedValue()); \
|
||||
gvm_##s.v;
|
||||
Variant arr(HphpArray::GetStaticEmptyArray());
|
||||
#define X(s,v) tab->set(StringData::GetStaticString(#s), v.asTypedValue());
|
||||
|
||||
X(argc, setNull());
|
||||
X(argv, setNull());
|
||||
X(_SERVER, assignVal(arr));
|
||||
X(_GET, assignVal(arr));
|
||||
X(_POST, assignVal(arr));
|
||||
X(_COOKIE, assignVal(arr));
|
||||
X(_FILES, assignVal(arr));
|
||||
X(_ENV, assignVal(arr));
|
||||
X(_REQUEST, assignVal(arr));
|
||||
X(_SESSION, assignVal(arr));
|
||||
X(HTTP_RAW_POST_DATA, setNull());
|
||||
X(http_response_header, setNull());
|
||||
X(argc, init_null_variant);
|
||||
X(argv, init_null_variant);
|
||||
X(_SERVER, arr);
|
||||
X(_GET, arr);
|
||||
X(_POST, arr);
|
||||
X(_COOKIE, arr);
|
||||
X(_FILES, arr);
|
||||
X(_ENV, arr);
|
||||
X(_REQUEST, arr);
|
||||
X(_SESSION, arr);
|
||||
X(HTTP_RAW_POST_DATA, init_null_variant);
|
||||
X(http_response_header, init_null_variant);
|
||||
#undef X
|
||||
|
||||
ThreadInfo::s_threadInfo->m_globals = g_variables = this;
|
||||
|
||||
@@ -33,11 +33,11 @@ if (substr($target, -4) == '.cpp') {
|
||||
foreach ($constants as $constant) {
|
||||
constantClassMap($constant);
|
||||
}
|
||||
printf(' "SID", (const char *)((offsetof(SystemGlobals, k_SID) - '.
|
||||
'offsetof(SystemGlobals, stgv_Variant)) / sizeof(Variant)), '.
|
||||
printf(' "SID", (const char *)((offsetof(GlobalVariables, k_SID) - '.
|
||||
'offsetof(GlobalVariables, stgv_Variant)) / sizeof(Variant)), '.
|
||||
"(const char *)1,\n");
|
||||
printf(' "PHP_SAPI", (const char *)((offsetof(SystemGlobals, k_PHP_SAPI) - '.
|
||||
'offsetof(SystemGlobals, stgv_Variant)) / sizeof(Variant)), '.
|
||||
printf(' "PHP_SAPI", (const char *)((offsetof(GlobalVariables, k_PHP_SAPI) '.
|
||||
'- offsetof(GlobalVariables, stgv_Variant)) / sizeof(Variant)), '.
|
||||
"(const char *)1,\n");
|
||||
printf(" NULL, // End of constants\n");
|
||||
printf(" NULL,\n");
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
#include "hphp/runtime/base/array/array_util.h"
|
||||
#include "hphp/runtime/base/class_info.h"
|
||||
#include "hphp/runtime/base/array/array_util.h"
|
||||
#include "hphp/runtime/base/complex_types.h"
|
||||
#include "hphp/runtime/base/externals.h"
|
||||
#include "hphp/runtime/base/hphp_system.h"
|
||||
@@ -203,7 +203,7 @@ CVarRef ClassInfo::ConstantInfo::getDeferredValue() const {
|
||||
CVarRef (*f)()=(CVarRef(*)())callback;
|
||||
return (*f)();
|
||||
}
|
||||
SystemGlobals* g = get_global_variables();
|
||||
GlobalVariables* g = get_global_variables();
|
||||
return g->stgv_Variant[valueLen];
|
||||
}
|
||||
|
||||
|
||||
@@ -62,11 +62,6 @@ extern void init_global_variables();
|
||||
extern void free_global_variables();
|
||||
extern void free_global_variables_after_sweep();
|
||||
extern Array get_global_state();
|
||||
/**
|
||||
* Returns a thread local global variable table pointer.
|
||||
*/
|
||||
typedef GlobalNameValueTableWrapper SystemGlobals;
|
||||
extern SystemGlobals *get_system_globals();
|
||||
|
||||
/**
|
||||
* Precomputed literal strings
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
#include "hphp/runtime/base/hphp_system.h"
|
||||
#include "hphp/runtime/base/file/url_file.h"
|
||||
#include "hphp/runtime/base/hphp_system.h"
|
||||
#include "hphp/runtime/base/util/http_client.h"
|
||||
#include "hphp/runtime/base/runtime_error.h"
|
||||
|
||||
@@ -70,8 +70,9 @@ bool UrlFile::open(CStrRef url, CStrRef mode) {
|
||||
m_response, pHeaders, &responseHeaders);
|
||||
}
|
||||
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
Variant &r = g->GV(http_response_header);
|
||||
static const StaticString s_http_response_header("http_response_header");
|
||||
GlobalVariables *g = get_global_variables();
|
||||
Variant &r = g->getRef(s_http_response_header);
|
||||
r = Array::Create();
|
||||
for (unsigned int i = 0; i < responseHeaders.size(); i++) {
|
||||
r.append(responseHeaders[i]);
|
||||
|
||||
@@ -53,14 +53,4 @@ const char* getHphpCompilerId();
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
} // namespace HPHP
|
||||
|
||||
#define DECLARE_SYSTEM_GLOBALS(sg) \
|
||||
SystemGlobals *sg ATTRIBUTE_UNUSED = \
|
||||
get_global_variables();
|
||||
|
||||
#define DECLARE_GLOBAL_VARIABLES(g) \
|
||||
SystemGlobals *g ATTRIBUTE_UNUSED = \
|
||||
get_global_variables();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#endif // incl_HPHP_CPP_BASE_HPHP_SYSTEM_H_
|
||||
|
||||
@@ -129,11 +129,6 @@ namespace HPHP {
|
||||
IMPLEMENT_CLASS_COMMON(cls) \
|
||||
IMPLEMENT_OBJECT_ALLOCATION_NO_DEFAULT_SWEEP(c_##cls) \
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// global variable macros
|
||||
|
||||
#define GV(s) gvm_ ## s
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// code instrumentation or injections
|
||||
|
||||
|
||||
@@ -124,12 +124,32 @@ time_t start_time() {
|
||||
return s_startTime.startTime;
|
||||
}
|
||||
|
||||
static const StaticString
|
||||
s_HPHP("HPHP"),
|
||||
s_HHVM("HHVM"),
|
||||
s_HHVM_JIT("HHVM_JIT"),
|
||||
s_REQUEST_START_TIME("REQUEST_START_TIME"),
|
||||
s_REQUEST_TIME("REQUEST_TIME"),
|
||||
s_REQUEST_TIME_FLOAT("REQUEST_TIME_FLOAT"),
|
||||
s_DOCUMENT_ROOT("DOCUMENT_ROOT"),
|
||||
s_SCRIPT_FILENAME("SCRIPT_FILENAME"),
|
||||
s_SCRIPT_NAME("SCRIPT_NAME"),
|
||||
s_PHP_SELF("PHP_SELF"),
|
||||
s_argc("argc"),
|
||||
s_argv("argv"),
|
||||
s_PWD("PWD"),
|
||||
s_HOSTNAME("HOSTNAME"),
|
||||
s__SERVER("_SERVER"),
|
||||
s__ENV("_ENV");
|
||||
|
||||
static void process_cmd_arguments(int argc, char **argv) {
|
||||
SystemGlobals *g = (SystemGlobals *)get_global_variables();
|
||||
g->GV(argc) = argc;
|
||||
GlobalVariables *g = get_global_variables();
|
||||
g->set(s_argc, Variant(argc), false);
|
||||
Array argvArray = HphpArray::GetStaticEmptyArray();
|
||||
for (int i = 0; i < argc; i++) {
|
||||
g->GV(argv).lvalAt() = String(argv[i]);
|
||||
argvArray.append(String(argv[i]));
|
||||
}
|
||||
g->set(s_argv, argvArray, false);
|
||||
}
|
||||
|
||||
void process_env_variables(Variant &variables) {
|
||||
@@ -439,22 +459,6 @@ void handle_destructor_exception(const char* situation) {
|
||||
}
|
||||
}
|
||||
|
||||
static const StaticString
|
||||
s_HPHP("HPHP"),
|
||||
s_HHVM("HHVM"),
|
||||
s_HHVM_JIT("HHVM_JIT"),
|
||||
s_REQUEST_START_TIME("REQUEST_START_TIME"),
|
||||
s_REQUEST_TIME("REQUEST_TIME"),
|
||||
s_REQUEST_TIME_FLOAT("REQUEST_TIME_FLOAT"),
|
||||
s_DOCUMENT_ROOT("DOCUMENT_ROOT"),
|
||||
s_SCRIPT_FILENAME("SCRIPT_FILENAME"),
|
||||
s_SCRIPT_NAME("SCRIPT_NAME"),
|
||||
s_PHP_SELF("PHP_SELF"),
|
||||
s_argc("argc"),
|
||||
s_argv("argv"),
|
||||
s_PWD("PWD"),
|
||||
s_HOSTNAME("HOSTNAME");
|
||||
|
||||
void execute_command_line_begin(int argc, char **argv, int xhprof) {
|
||||
StackTraceNoHeap::AddExtraLogging("ThreadType", "CLI");
|
||||
string args;
|
||||
@@ -468,18 +472,19 @@ void execute_command_line_begin(int argc, char **argv, int xhprof) {
|
||||
ExecutionContext *context = g_context.getNoCheck();
|
||||
context->obSetImplicitFlush(true);
|
||||
|
||||
SystemGlobals *g = (SystemGlobals *)get_global_variables();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
|
||||
process_env_variables(g->GV(_ENV));
|
||||
g->GV(_ENV).set(s_HPHP, 1);
|
||||
g->GV(_ENV).set(s_HHVM, 1);
|
||||
Variant& env = g->getRef(s__ENV);
|
||||
process_env_variables(env);
|
||||
env.set(s_HPHP, 1);
|
||||
env.set(s_HHVM, 1);
|
||||
if (RuntimeOption::EvalJit) {
|
||||
g->GV(_ENV).set(s_HHVM_JIT, 1);
|
||||
env.set(s_HHVM_JIT, 1);
|
||||
}
|
||||
|
||||
process_cmd_arguments(argc, argv);
|
||||
|
||||
Variant &server = g->GV(_SERVER);
|
||||
Variant& server = g->getRef(s__SERVER);
|
||||
process_env_variables(server);
|
||||
time_t now;
|
||||
struct timeval tp = {0};
|
||||
@@ -502,8 +507,8 @@ void execute_command_line_begin(int argc, char **argv, int xhprof) {
|
||||
server.set(s_SCRIPT_FILENAME, file);
|
||||
server.set(s_SCRIPT_NAME, file);
|
||||
server.set(s_PHP_SELF, file);
|
||||
server.set(s_argv, g->GV(argv));
|
||||
server.set(s_argc, g->GV(argc));
|
||||
server.set(s_argv, g->get(s_argv));
|
||||
server.set(s_argc, g->get(s_argc));
|
||||
server.set(s_PWD, g_context->getCwd());
|
||||
char hostname[1024];
|
||||
if (!gethostname(hostname, 1024)) {
|
||||
@@ -1309,7 +1314,7 @@ void hphp_session_init() {
|
||||
|
||||
g_vmContext->requestInit();
|
||||
|
||||
SystemGlobals *g = (SystemGlobals *)get_global_variables();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
g->k_PHP_SAPI = StringData::GetStaticString(RuntimeOption::ExecutionMode);
|
||||
}
|
||||
|
||||
|
||||
@@ -94,6 +94,14 @@ static const StaticString
|
||||
s_PATH_INFO("PATH_INFO"),
|
||||
s_argc("argc"),
|
||||
s_argv("argv"),
|
||||
s__SERVER("_SERVER"),
|
||||
s__GET("_GET"),
|
||||
s__POST("_POST"),
|
||||
s__REQUEST("_REQUEST"),
|
||||
s__ENV("_ENV"),
|
||||
s__COOKIE("_COOKIE"),
|
||||
s_HTTP_RAW_POST_DATA("HTTP_RAW_POST_DATA"),
|
||||
s__FILES("_FILES"),
|
||||
s_GATEWAY_INTERFACE("GATEWAY_INTERFACE"),
|
||||
s_CGI_1_1("CGI/1.1"),
|
||||
s_SERVER_ADDR("SERVER_ADDR"),
|
||||
@@ -126,35 +134,37 @@ static const StaticString
|
||||
void HttpProtocol::PrepareSystemVariables(Transport *transport,
|
||||
const RequestURI &r,
|
||||
const SourceRootInfo &sri) {
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
const VirtualHost *vhost = VirtualHost::GetCurrent();
|
||||
|
||||
Variant &server = g->GV(_SERVER);
|
||||
Variant& server = g->getRef(s__SERVER);
|
||||
server.set(s_REQUEST_START_TIME, time(nullptr));
|
||||
|
||||
// $_ENV
|
||||
process_env_variables(g->GV(_ENV));
|
||||
g->GV(_ENV).set(s_HPHP, 1);
|
||||
g->GV(_ENV).set(s_HHVM, 1);
|
||||
Variant& env = g->getRef(s__ENV);
|
||||
process_env_variables(env);
|
||||
env.set(s_HPHP, 1);
|
||||
env.set(s_HHVM, 1);
|
||||
if (RuntimeOption::EvalJit) {
|
||||
g->GV(_ENV).set(s_HHVM_JIT, 1);
|
||||
env.set(s_HHVM_JIT, 1);
|
||||
}
|
||||
|
||||
bool isServer = RuntimeOption::ServerExecutionMode();
|
||||
if (isServer) {
|
||||
g->GV(_ENV).set(s_HPHP_SERVER, 1);
|
||||
env.set(s_HPHP_SERVER, 1);
|
||||
#ifdef HOTPROFILER
|
||||
g->GV(_ENV).set(s_HPHP_HOTPROFILER, 1);
|
||||
env.set(s_HPHP_HOTPROFILER, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
Variant &request = g->GV(_REQUEST);
|
||||
Variant &request = g->getRef(s__REQUEST);
|
||||
|
||||
// $_GET and $_REQUEST
|
||||
if (!r.queryString().empty()) {
|
||||
DecodeParameters(g->GV(_GET), r.queryString().data(),
|
||||
Variant &get = g->getRef(s__GET);
|
||||
DecodeParameters(get, r.queryString().data(),
|
||||
r.queryString().size());
|
||||
CopyParams(request, g->GV(_GET));
|
||||
CopyParams(request, get);
|
||||
}
|
||||
|
||||
string contentType = transport->getHeader("Content-Type");
|
||||
@@ -185,7 +195,7 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
|
||||
needDelete = true;
|
||||
data = Util::buffer_duplicate(data, size);
|
||||
}
|
||||
DecodeRfc1867(transport, g->GV(_POST), g->GV(_FILES),
|
||||
DecodeRfc1867(transport, g->getRef(s__POST), g->getRef(s__FILES),
|
||||
content_length, data, size, boundary);
|
||||
}
|
||||
assert(!transport->getFiles(files));
|
||||
@@ -199,26 +209,28 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
|
||||
decodeData = true;
|
||||
|
||||
if (decodeData) {
|
||||
DecodeParameters(g->GV(_POST), (const char*)data, size, true);
|
||||
DecodeParameters(g->getRef(s__POST), (const char*)data, size, true);
|
||||
}
|
||||
|
||||
bool ret = transport->getFiles(files);
|
||||
if (ret) {
|
||||
g->GV(_FILES) = unserialize_from_string(files);
|
||||
g->getRef(s__FILES) = unserialize_from_string(files);
|
||||
}
|
||||
}
|
||||
CopyParams(request, g->GV(_POST));
|
||||
CopyParams(request, g->getRef(s__POST));
|
||||
if (needDelete) {
|
||||
if (RuntimeOption::AlwaysPopulateRawPostData &&
|
||||
uint32_t(size) <= StringData::MaxSize) {
|
||||
g->GV(HTTP_RAW_POST_DATA) = String((char*)data, size, AttachString);
|
||||
g->getRef(s_HTTP_RAW_POST_DATA) =
|
||||
String((char*)data, size, AttachString);
|
||||
} else {
|
||||
free((void *)data);
|
||||
}
|
||||
} else {
|
||||
// For literal we disregard RuntimeOption::AlwaysPopulateRawPostData
|
||||
if (uint32_t(size) <= StringData::MaxSize) {
|
||||
g->GV(HTTP_RAW_POST_DATA) = String((char*)data, size, AttachLiteral);
|
||||
g->getRef(s_HTTP_RAW_POST_DATA) =
|
||||
String((char*)data, size, AttachLiteral);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -229,8 +241,8 @@ void HttpProtocol::PrepareSystemVariables(Transport *transport,
|
||||
if (!cookie_data.empty()) {
|
||||
StringBuffer sb;
|
||||
sb.append(cookie_data);
|
||||
DecodeCookies(g->GV(_COOKIE), (char*)sb.data());
|
||||
CopyParams(request, g->GV(_COOKIE));
|
||||
DecodeCookies(g->getRef(s__COOKIE), (char*)sb.data());
|
||||
CopyParams(request, g->getRef(s__COOKIE));
|
||||
}
|
||||
|
||||
// $_SERVER
|
||||
|
||||
@@ -178,7 +178,8 @@ void RPCRequestHandler::handleRequest(Transport *transport) {
|
||||
static const StaticString
|
||||
s_output("output"),
|
||||
s_return("return"),
|
||||
s_HPHP_RPC("HPHP_RPC");
|
||||
s_HPHP_RPC("HPHP_RPC"),
|
||||
s__ENV("_ENV");
|
||||
|
||||
bool RPCRequestHandler::executePHPFunction(Transport *transport,
|
||||
SourceRootInfo &sourceRootInfo,
|
||||
@@ -191,8 +192,9 @@ bool RPCRequestHandler::executePHPFunction(Transport *transport,
|
||||
ServerStatsHelper ssh("input");
|
||||
RequestURI reqURI(rpcFunc);
|
||||
HttpProtocol::PrepareSystemVariables(transport, reqURI, sourceRootInfo);
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
g->GV(_ENV).set(s_HPHP_RPC, 1);
|
||||
|
||||
GlobalVariables *g = get_global_variables();
|
||||
g->getRef(s__ENV).set(s_HPHP_RPC, 1);
|
||||
}
|
||||
|
||||
bool isFile = rpcFunc.rfind('.') != string::npos;
|
||||
|
||||
@@ -247,12 +247,13 @@ string SourceRootInfo::path() const {
|
||||
}
|
||||
}
|
||||
|
||||
static const StaticString s_SERVER("_SERVER");
|
||||
static const StaticString s_PHP_ROOT("PHP_ROOT");
|
||||
|
||||
string& SourceRootInfo::initPhpRoot() {
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
Variant &server = g->GV(_SERVER);
|
||||
Variant v = server.rvalAt(s_PHP_ROOT);
|
||||
GlobalVariables *g = get_global_variables();
|
||||
CVarRef server = g->get(s_SERVER);
|
||||
CVarRef v = server.rvalAt(s_PHP_ROOT);
|
||||
if (v.isString()) {
|
||||
*s_phproot.getCheck() = string(v.asCStrRef().data()) + string("/");
|
||||
} else {
|
||||
|
||||
@@ -91,6 +91,8 @@ struct CLISession : private boost::noncopyable {
|
||||
|
||||
}
|
||||
|
||||
static const StaticString s__SERVER("_SERVER");
|
||||
|
||||
void DummySandbox::run() {
|
||||
TRACE(2, "DummySandbox::run\n");
|
||||
ThreadInfo *ti = ThreadInfo::s_threadInfo.getNoCheck();
|
||||
@@ -103,7 +105,7 @@ void DummySandbox::run() {
|
||||
DSandboxInfo sandbox = m_proxy->getSandbox();
|
||||
string msg;
|
||||
if (sandbox.valid()) {
|
||||
SystemGlobals *g = (SystemGlobals *)get_global_variables();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
SourceRootInfo sri(sandbox.m_user, sandbox.m_name);
|
||||
if (sandbox.m_path.empty()) {
|
||||
sandbox.m_path = sri.path();
|
||||
@@ -112,7 +114,7 @@ void DummySandbox::run() {
|
||||
msg = "Invalid sandbox was specified. "
|
||||
"PHP files may not be loaded properly.\n";
|
||||
} else {
|
||||
sri.setServerVariables(g->GV(_SERVER));
|
||||
sri.setServerVariables(g->getRef(s__SERVER));
|
||||
}
|
||||
Debugger::RegisterSandbox(sandbox);
|
||||
g_context->setSandboxId(sandbox.id());
|
||||
|
||||
@@ -467,8 +467,9 @@ Array f_getopt(CStrRef options, CVarRef longopts /* = null_variant */) {
|
||||
opts->need_param = 0;
|
||||
opts->opt_name = NULL;
|
||||
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
Array vargv = g->GV(argv).toArray();
|
||||
static const StaticString s_argv("argv");
|
||||
GlobalVariables *g = get_global_variables();
|
||||
Array vargv = g->get(s_argv).toArray();
|
||||
int argc = vargv.size();
|
||||
char **argv = (char **)malloc((argc+1) * sizeof(char*));
|
||||
vector<String> holders;
|
||||
|
||||
@@ -277,11 +277,17 @@ static void bin_to_readable(CStrRef in, StringBuffer &out, char nbits) {
|
||||
}
|
||||
}
|
||||
|
||||
static const StaticString s_REMOTE_ADDR("REMOTE_ADDR");
|
||||
static const StaticString
|
||||
s_REMOTE_ADDR("REMOTE_ADDR"),
|
||||
s__SERVER("_SERVER"),
|
||||
s__SESSION("_SESSION"),
|
||||
s__COOKIE("_COOKIE"),
|
||||
s__GET("_GET"),
|
||||
s__POST("_POST");
|
||||
|
||||
String SessionModule::create_sid() {
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
String remote_addr = g->GV(_SERVER)[s_REMOTE_ADDR].toString();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
String remote_addr = g->get(s__SERVER)[s_REMOTE_ADDR].toString();
|
||||
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
@@ -794,8 +800,8 @@ public:
|
||||
|
||||
virtual String encode() {
|
||||
StringBuffer buf;
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
for (ArrayIter iter(g->GV(_SESSION)); iter; ++iter) {
|
||||
GlobalVariables *g = get_global_variables();
|
||||
for (ArrayIter iter(g->get(s__SESSION)); iter; ++iter) {
|
||||
Variant key = iter.first();
|
||||
if (key.isString()) {
|
||||
String skey = key.toString();
|
||||
@@ -813,7 +819,7 @@ public:
|
||||
|
||||
virtual bool decode(CStrRef value) {
|
||||
const char *endptr = value.data() + value.size();
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
for (const char *p = value.data(); p < endptr; ) {
|
||||
int namelen = ((unsigned char)(*p)) & (~PS_BIN_UNDEF);
|
||||
if (namelen < 0 || namelen > PS_BIN_MAX || (p + namelen) >= endptr) {
|
||||
@@ -826,7 +832,7 @@ public:
|
||||
if (has_value) {
|
||||
VariableUnserializer vu(p, endptr, VariableUnserializer::Serialize);
|
||||
try {
|
||||
g->GV(_SESSION).set(key, vu.unserialize());
|
||||
g->getRef(s__SESSION).set(key, vu.unserialize());
|
||||
p = vu.head();
|
||||
} catch (Exception &e) {
|
||||
}
|
||||
@@ -846,8 +852,8 @@ public:
|
||||
|
||||
virtual String encode() {
|
||||
StringBuffer buf;
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
for (ArrayIter iter(g->GV(_SESSION)); iter; ++iter) {
|
||||
GlobalVariables *g = get_global_variables();
|
||||
for (ArrayIter iter(g->get(s__SESSION)); iter; ++iter) {
|
||||
Variant key = iter.first();
|
||||
if (key.isString()) {
|
||||
String skey = key.toString();
|
||||
@@ -867,7 +873,7 @@ public:
|
||||
virtual bool decode(CStrRef value) {
|
||||
const char *p = value.data();
|
||||
const char *endptr = value.data() + value.size();
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
while (p < endptr) {
|
||||
const char *q = p;
|
||||
while (*q != PS_DELIMITER) {
|
||||
@@ -886,7 +892,7 @@ public:
|
||||
if (has_value) {
|
||||
VariableUnserializer vu(q, endptr, VariableUnserializer::Serialize);
|
||||
try {
|
||||
g->GV(_SESSION).set(key, vu.unserialize());
|
||||
g->getRef(s__SESSION).set(key, vu.unserialize());
|
||||
q = vu.head();
|
||||
} catch (Exception &e) {
|
||||
}
|
||||
@@ -1023,8 +1029,8 @@ new_session:
|
||||
*/
|
||||
|
||||
/* Unconditionally destroy existing arrays -- possible dirty data */
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
g->GV(_SESSION) = Array::Create();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
g->getRef(s__SESSION) = Array::Create();
|
||||
|
||||
PS(invalid_session_id) = false;
|
||||
String value;
|
||||
@@ -1192,8 +1198,8 @@ static inline void strcpy_gmt(char *ubuf, time_t *when) {
|
||||
static const StaticString s_PATH_TRANSLATED("PATH_TRANSLATED");
|
||||
|
||||
static inline void last_modified() {
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
String path = g->GV(_SERVER)[s_PATH_TRANSLATED].toString();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
String path = g->get(s__SERVER)[s_PATH_TRANSLATED].toString();
|
||||
if (!path.empty()) {
|
||||
struct stat sb;
|
||||
if (stat(path.data(), &sb) == -1) {
|
||||
@@ -1500,25 +1506,25 @@ bool f_session_start() {
|
||||
* Cookies are preferred, because initially
|
||||
* cookie and get variables will be available.
|
||||
*/
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
if (PS(id).empty()) {
|
||||
if (PS(use_cookies) &&
|
||||
g->GV(_COOKIE).toArray().exists(String(PS(session_name)))) {
|
||||
PS(id) = g->GV(_COOKIE)[String(PS(session_name))].toString();
|
||||
g->get(s__COOKIE).toArray().exists(String(PS(session_name)))) {
|
||||
PS(id) = g->get(s__COOKIE)[String(PS(session_name))].toString();
|
||||
PS(apply_trans_sid) = 0;
|
||||
PS(send_cookie) = 0;
|
||||
PS(define_sid) = 0;
|
||||
}
|
||||
|
||||
if (!PS(use_only_cookies) && !PS(id) &&
|
||||
g->GV(_GET).toArray().exists(String(PS(session_name)))) {
|
||||
PS(id) = g->GV(_GET)[String(PS(session_name))].toString();
|
||||
g->get(s__GET).toArray().exists(String(PS(session_name)))) {
|
||||
PS(id) = g->get(s__GET)[String(PS(session_name))].toString();
|
||||
PS(send_cookie) = 0;
|
||||
}
|
||||
|
||||
if (!PS(use_only_cookies) && !PS(id) &&
|
||||
g->GV(_POST).toArray().exists(String(PS(session_name)))) {
|
||||
PS(id) = g->GV(_POST)[String(PS(session_name))].toString();
|
||||
g->get(s__POST).toArray().exists(String(PS(session_name)))) {
|
||||
PS(id) = g->get(s__POST)[String(PS(session_name))].toString();
|
||||
PS(send_cookie) = 0;
|
||||
}
|
||||
}
|
||||
@@ -1529,7 +1535,7 @@ bool f_session_start() {
|
||||
'<session-name>=<session-id>' to allow URLs of the form
|
||||
http://yoursite/<session-name>=<session-id>/script.php */
|
||||
if (!PS(use_only_cookies) && PS(id).empty()) {
|
||||
value = g->GV(_SERVER)[s_REQUEST_URI].toString();
|
||||
value = g->get(s__SERVER)[s_REQUEST_URI].toString();
|
||||
const char *p = strstr(value.data(), PS(session_name).c_str());
|
||||
if (p && p[lensess] == '=') {
|
||||
p += lensess + 1;
|
||||
@@ -1544,7 +1550,7 @@ bool f_session_start() {
|
||||
/* check whether the current request was referred to by
|
||||
an external site which invalidates the previously found id */
|
||||
if (!PS(id).empty() && PS(extern_referer_chk)[0] != '\0') {
|
||||
value = g->GV(_SERVER)[s_HTTP_REFERER].toString();
|
||||
value = g->get(s__SERVER)[s_HTTP_REFERER].toString();
|
||||
if (strstr(value.data(), PS(extern_referer_chk).c_str()) == NULL) {
|
||||
PS(id).reset();
|
||||
PS(send_cookie) = 1;
|
||||
@@ -1607,8 +1613,8 @@ Variant f_session_unset() {
|
||||
if (PS(session_status) == Session::None) {
|
||||
return false;
|
||||
}
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
g->GV(_SESSION).reset();
|
||||
GlobalVariables *g = get_global_variables();
|
||||
g->getRef(s__SESSION).reset();
|
||||
return uninit_null();
|
||||
}
|
||||
|
||||
|
||||
@@ -1752,13 +1752,14 @@ static void model_to_string(sdlContentModelPtr model, StringBuffer &buf,
|
||||
// soap fault functions
|
||||
|
||||
static const StaticString s_HTTP_USER_AGENT("HTTP_USER_AGENT");
|
||||
static const StaticString s__SERVER("_SERVER");
|
||||
|
||||
static void send_soap_server_fault(sdlFunctionPtr function, Variant fault,
|
||||
soapHeader *hdr) {
|
||||
USE_SOAP_GLOBAL;
|
||||
bool use_http_error_status = true;
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
if (g->GV(_SERVER)[s_HTTP_USER_AGENT].toString() == "Shockwave Flash") {
|
||||
GlobalVariables *g = get_global_variables();
|
||||
if (g->get(s__SERVER)[s_HTTP_USER_AGENT].toString() == "Shockwave Flash") {
|
||||
use_http_error_status = false;
|
||||
}
|
||||
if (use_http_error_status) {
|
||||
@@ -2091,9 +2092,9 @@ void c_SoapServer::t_handle(CStrRef request /* = null_string */) {
|
||||
}
|
||||
req = String(data, size, AttachLiteral);
|
||||
|
||||
SystemGlobals *g = (SystemGlobals*)get_global_variables();
|
||||
if (g->GV(_SERVER).toArray().exists(s_HTTP_CONTENT_ENCODING)) {
|
||||
String encoding = g->GV(_SERVER)[s_HTTP_CONTENT_ENCODING];
|
||||
GlobalVariables *g = get_global_variables();
|
||||
if (g->get(s__SERVER).toArray().exists(s_HTTP_CONTENT_ENCODING)) {
|
||||
String encoding = g->get(s__SERVER)[s_HTTP_CONTENT_ENCODING];
|
||||
Variant ret;
|
||||
if (encoding == "gzip" || encoding == "x-gzip") {
|
||||
ret = f_gzinflate(String(data, size, AttachLiteral));
|
||||
|
||||
@@ -74,6 +74,10 @@ public: // ArrayData implementation
|
||||
using ArrayData::addLval;
|
||||
using ArrayData::remove;
|
||||
|
||||
Variant& getRef(CStrRef k) {
|
||||
return tvAsVariant(nvGet(k.get()));
|
||||
}
|
||||
|
||||
virtual ssize_t vsize() const;
|
||||
virtual Variant getKey(ssize_t pos) const;
|
||||
virtual Variant getValue(ssize_t pos) const;
|
||||
@@ -148,18 +152,6 @@ private:
|
||||
class GlobalNameValueTableWrapper : public NameValueTableWrapper {
|
||||
public:
|
||||
explicit GlobalNameValueTableWrapper(NameValueTable* tab);
|
||||
Variant gvm_argc;
|
||||
Variant gvm_argv;
|
||||
Variant gvm__SERVER;
|
||||
Variant gvm__GET;
|
||||
Variant gvm__POST;
|
||||
Variant gvm__COOKIE;
|
||||
Variant gvm__FILES;
|
||||
Variant gvm__ENV;
|
||||
Variant gvm__REQUEST;
|
||||
Variant gvm__SESSION;
|
||||
Variant gvm_HTTP_RAW_POST_DATA;
|
||||
Variant gvm_http_response_header;
|
||||
|
||||
Variant __realPropProxy;
|
||||
Variant __lvalProxy;
|
||||
|
||||
@@ -19046,8 +19046,8 @@ const char *g_class_map[] = {
|
||||
"CURLINFO_LOCAL_PORT", (const char *)&k_CURLINFO_LOCAL_PORT, (const char *)0xc /* KindOfInt64 */,
|
||||
"CURLOPT_TIMEOUT_MS", (const char *)&k_CURLOPT_TIMEOUT_MS, (const char *)0xc /* KindOfInt64 */,
|
||||
"CURLOPT_CONNECTTIMEOUT_MS", (const char *)&k_CURLOPT_CONNECTTIMEOUT_MS, (const char *)0xc /* KindOfInt64 */,
|
||||
"SID", (const char *)((offsetof(SystemGlobals, k_SID) - offsetof(SystemGlobals, stgv_Variant)) / sizeof(Variant)), (const char *)1,
|
||||
"PHP_SAPI", (const char *)((offsetof(SystemGlobals, k_PHP_SAPI) - offsetof(SystemGlobals, stgv_Variant)) / sizeof(Variant)), (const char *)1,
|
||||
"SID", (const char *)((offsetof(GlobalVariables, k_SID) - offsetof(GlobalVariables, stgv_Variant)) / sizeof(Variant)), (const char *)1,
|
||||
"PHP_SAPI", (const char *)((offsetof(GlobalVariables, k_PHP_SAPI) - offsetof(GlobalVariables, stgv_Variant)) / sizeof(Variant)), (const char *)1,
|
||||
NULL, // End of constants
|
||||
NULL,
|
||||
(const char *)0x10006000, "PDO", "", "", (const char *)0, (const char *)0,
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário