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:
Owen Yamauchi
2013-06-11 15:44:50 -07:00
commit de Sara Golemon
commit 79224cdd38
17 arquivos alterados com 148 adições e 150 exclusões
+14 -19
Ver Arquivo
@@ -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;
+4 -4
Ver Arquivo
@@ -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");
+2 -2
Ver Arquivo
@@ -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];
}
-5
Ver Arquivo
@@ -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
+4 -3
Ver Arquivo
@@ -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]);
-10
Ver Arquivo
@@ -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_
-5
Ver Arquivo
@@ -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
+33 -28
Ver Arquivo
@@ -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);
}
+31 -19
Ver Arquivo
@@ -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;
+4 -3
Ver Arquivo
@@ -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 {
+4 -2
Ver Arquivo
@@ -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());
+3 -2
Ver Arquivo
@@ -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;
+32 -26
Ver Arquivo
@@ -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();
}
+6 -5
Ver Arquivo
@@ -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));
+4 -12
Ver Arquivo
@@ -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;
+2 -2
Ver Arquivo
@@ -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,