本文整理汇总了C++中raise_warning函数的典型用法代码示例。如果您正苦于以下问题:C++ raise_warning函数的具体用法?C++ raise_warning怎么用?C++ raise_warning使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了raise_warning函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: new_socket_connect
static Variant new_socket_connect(const HostURL &hosturl, double timeout,
Variant &errnum, Variant &errstr) {
int domain = AF_UNSPEC;
int type = SOCK_STREAM;
auto const& scheme = hosturl.getScheme();
SmartPtr<Socket> sock;
SmartPtr<SSLSocket> sslsock;
std::string sockerr;
int error;
if (scheme == "udp" || scheme == "udg") {
type = SOCK_DGRAM;
} else if (scheme == "unix") {
domain = AF_UNIX;
}
int fd = -1;
if (domain == AF_UNIX) {
sockaddr_storage sa_storage;
struct sockaddr *sa_ptr;
size_t sa_size;
fd = socket(domain, type, 0);
sock = makeSmartPtr<Socket>(
fd, domain, hosturl.getHost().c_str(), hosturl.getPort());
if (!set_sockaddr(sa_storage, sock, hosturl.getHost().c_str(),
hosturl.getPort(), sa_ptr, sa_size)) {
// set_sockaddr raises its own warning on failure
return false;
}
if (connect_with_timeout(fd, sa_ptr, sa_size, timeout,
hosturl, sockerr, error) != 0) {
SOCKET_ERROR(sock, sockerr.c_str(), error);
errnum = sock->getLastError();
errstr = HHVM_FN(socket_strerror)(sock->getLastError());
return false;
}
} else {
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = domain;
hints.ai_socktype = type;
auto port = folly::to<std::string>(hosturl.getPort());
auto host = hosturl.getHost();
struct addrinfo *aiHead;
int errcode = getaddrinfo(host.c_str(), port.c_str(), &hints, &aiHead);
if (errcode != 0) {
errstr = String(gai_strerror(errcode), CopyString);
return false;
}
SCOPE_EXIT { freeaddrinfo(aiHead); };
for (struct addrinfo *ai = aiHead; ai != nullptr; ai = ai->ai_next) {
domain = ai->ai_family;
fd = socket(domain, ai->ai_socktype, ai->ai_protocol);
if (fd == -1) {
continue;
}
if (connect_with_timeout(fd, ai->ai_addr, ai->ai_addrlen, timeout,
hosturl, sockerr, error) == 0) {
break;
}
close(fd);
fd = -1;
}
sslsock = SSLSocket::Create(fd, domain, hosturl, timeout);
if (sslsock) {
sock = sslsock;
} else {
sock = makeSmartPtr<Socket>(fd,
domain,
hosturl.getHost().c_str(),
hosturl.getPort());
}
}
if (!sock->valid()) {
SOCKET_ERROR(sock,
sockerr.empty() ? "unable to create socket" : sockerr.c_str(), error);
errnum = sock->getLastError();
errstr = HHVM_FN(socket_strerror)(sock->getLastError());
return false;
}
if (sslsock && !sslsock->onConnect()) {
raise_warning("Failed to enable crypto");
return false;
}
return Variant(std::move(sock));
}
示例2: appendOrPrependFilter
Variant appendOrPrependFilter(const Resource& stream,
const String& filtername,
const Variant& readwrite,
const Variant& params,
bool append) {
const char* func_name =
append ? "stream_filter_append()" : "stream_filter_prepend()";
if (!m_registeredFilters.exists(filtername)) {
raise_warning("%s: unable to locate filter \"%s\"",
func_name,
filtername.data());
return false;
}
auto file = cast<File>(stream);
int mode = readwrite.toInt32();
if (!mode) {
auto str = file->getMode();
/* The documentation says a read filter is only created for 'r' and '+'
* modes, but the implementation will always create one unless
* STREAM_FILTER_WRITE is passed.
*
* This branch is only executed if no STREAM_FILTER* args were passed,
* so we always create a READ filter.
*/
mode = k_STREAM_FILTER_READ;
if (str.find('+') != -1 || str.find('w') != -1 || str.find('a') != -1) {
mode |= k_STREAM_FILTER_WRITE;
}
}
if (!(mode & k_STREAM_FILTER_ALL)) {
return false;
}
// If it's ALL we create two resources, but only return one - this
// matches Zend, and is the documented behavior.
req::ptr<StreamFilter> ret;
if (mode & k_STREAM_FILTER_READ) {
auto resource = createInstance(func_name,
file,
filtername,
params);
if (!resource) {
return false;
}
ret = resource;
if (append) {
file->appendReadFilter(resource);
} else {
file->prependReadFilter(resource);
}
}
if (mode & k_STREAM_FILTER_WRITE) {
auto resource = createInstance(func_name,
file,
filtername,
params);
if (!resource) {
return false;
}
ret = resource;
if (append) {
file->appendWriteFilter(resource);
} else {
file->prependWriteFilter(resource);
}
}
return Variant(std::move(ret));
}
示例3: warn_non_object
static Variant warn_non_object() {
raise_warning("Cannot access property on non-object");
return null;
}
示例4: ASSERT
bool HttpProtocol::ProxyRequest(Transport *transport, bool force,
const std::string &url,
int &code, std::string &error,
StringBuffer &response,
HeaderMap *extraHeaders /* = NULL */) {
ASSERT(transport);
if (transport->headersSent()) {
raise_warning("Cannot proxy request - headers already sent");
return false;
}
HeaderMap requestHeaders;
transport->getHeaders(requestHeaders);
if (extraHeaders) {
for (HeaderMap::const_iterator iter = extraHeaders->begin();
iter != extraHeaders->end(); ++iter) {
vector<string> &values = requestHeaders[iter->first];
values.insert(values.end(), iter->second.begin(), iter->second.end());
}
}
int size = 0;
const char *data = NULL;
if (transport->getMethod() == Transport::POST) {
data = (const char *)transport->getPostData(size);
}
code = 0; // HTTP status of curl or 0 for "no server response code"
vector<String> responseHeaders;
HttpClient http;
if (data && size) {
code = http.post(url.c_str(), data, size, response, &requestHeaders,
&responseHeaders);
} else {
code = http.get(url.c_str(), response, &requestHeaders, &responseHeaders);
}
if (code == 0) {
if (!force) return false; // so we can retry
Logger::Error("Unable to proxy %s: %s", url.c_str(),
http.getLastError().c_str());
error = http.getLastError();
return true;
}
for (unsigned int i = 0; i < responseHeaders.size(); i++) {
String &header = responseHeaders[i];
if (header.find(":") != String::npos &&
header.find("Content-Length: ") != 0 &&
header.find("Client-Transfer-Encoding: ") != 0 &&
header.find("Transfer-Encoding: ") != 0 &&
header.find("Connection: ") != 0) {
transport->addHeader(header.data());
}
}
const char* respData = response.data();
if (!respData) {
respData = "";
}
Logger::Verbose("Response code was %d when proxying %s", code, url.c_str());
return true;
}
示例5: HHVM_FUNCTION
static void HHVM_FUNCTION(gc_enable) {
if (RuntimeOption::EnableHipHopSyntax) {
raise_warning("HipHop currently does not support circular reference "
"collection");
}
}
示例6: SSL_get_error
bool SSLSocket::handleError(int64_t nr_bytes, bool is_init) {
char esbuf[512];
std::string ebuf;
unsigned long ecode;
bool retry = true;
int err = SSL_get_error(m_data->m_handle, nr_bytes);
switch (err) {
case SSL_ERROR_ZERO_RETURN:
/* SSL terminated (but socket may still be active) */
retry = false;
break;
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
/* re-negotiation, or perhaps the SSL layer needs more
* packets: retry in next iteration */
errno = EAGAIN;
retry = (is_init || m_data->m_is_blocked);
break;
case SSL_ERROR_SYSCALL:
if (ERR_peek_error() == 0) {
if (nr_bytes == 0) {
if (ERR_get_error()) {
raise_warning("SSL: fatal protocol error");
}
SSL_set_shutdown(m_data->m_handle,
SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
setEof(true);
retry = false;
} else {
raise_warning("SSL: %s", folly::errnoStr(errno).c_str());
retry = false;
}
break;
}
/* fall through */
default:
/* some other error */
ecode = ERR_get_error();
switch (ERR_GET_REASON(ecode)) {
case SSL_R_NO_SHARED_CIPHER:
raise_warning("SSL_R_NO_SHARED_CIPHER: no suitable shared cipher "
"could be used. This could be because the server is "
"missing an SSL certificate (local_cert context "
"option)");
retry = false;
break;
default:
do {
// NULL is automatically added
ERR_error_string_n(ecode, esbuf, sizeof(esbuf));
if (!ebuf.empty()) {
ebuf += '\n';
}
ebuf += esbuf;
} while ((ecode = ERR_get_error()) != 0);
raise_warning("SSL operation failed with code %d. %s%s",
err, !ebuf.empty() ? "OpenSSL Error messages:\n" : "",
!ebuf.empty() ? ebuf.c_str() : "");
}
retry = false;
errno = 0;
}
return retry;
}
示例7: raise_warning
bool SSLSocket::applyVerificationPolicy(X509 *peer) {
/* verification is turned off */
if (!m_context[s_verify_peer].toBoolean()) {
return true;
}
if (peer == nullptr) {
raise_warning("Could not get peer certificate");
return false;
}
int err = SSL_get_verify_result(m_data->m_handle);
switch (err) {
case X509_V_OK:
/* fine */
break;
case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
if (m_context[s_allow_self_signed].toBoolean()) {
/* allowed */
break;
}
/* not allowed, so fall through */
default:
raise_warning("Could not verify peer: code:%d %s", err,
X509_verify_cert_error_string(err));
return false;
}
/* if the cert passed the usual checks, apply our own local policies now */
/* Does the common name match ? (used primarily for https://) */
String cnmatch = m_context[s_CN_match].toString();
if (!cnmatch.empty()) {
X509_NAME *name = X509_get_subject_name(peer);
char buf[1024];
int name_len = X509_NAME_get_text_by_NID(name, NID_commonName, buf,
sizeof(buf));
if (name_len < 0) {
raise_warning("Unable to locate peer certificate CN");
return false;
} else if (name_len != (int)strlen(buf)) {
raise_warning("Peer certificate CN=`%.*s' is malformed", name_len, buf);
return false;
}
bool match = (strcmp(cnmatch.c_str(), buf) == 0);
if (!match && strlen(buf) > 3 && buf[0] == '*' && buf[1] == '.') {
/* Try wildcard */
if (strchr(buf+2, '.')) {
const char* cnmatch_str = cnmatch.c_str();
const char *tmp = strstr(cnmatch_str, buf+1);
match = tmp && strcmp(tmp, buf+2) && tmp == strchr(cnmatch_str, '.');
}
}
if (!match) {
/* didn't match */
raise_warning("Peer certificate CN=`%.*s' did not match expected CN=`%s'",
name_len, buf, cnmatch.c_str());
return false;
}
}
return true;
}
示例8: f_hphp_thread_set_warmup_enabled
void f_hphp_thread_set_warmup_enabled() {
raise_warning("hphp_thread_set_warmup_enabled is deprecated, to enable "
"the RequestInitFunction and RequestInitDocument features "
"please set Server.EnableMemoryManager=true in your HipHop "
"config");
}
示例9: yaf_route_map_route
static bool yaf_route_map_route(const Object& o, const Object& request)
{
auto ptr_uri = request->o_realProp(YAF_REQUEST_PROPERTY_NAME_URI,
ObjectData::RealPropUnchecked, "Yaf_Request_Abstract");
auto ptr_base_uri = request->o_realProp(YAF_REQUEST_PROPERTY_NAME_BASE,
ObjectData::RealPropUnchecked, "Yaf_Request_Abstract");
auto ptr_ctl_prefer = o->o_realProp(YAF_ROUTE_MAP_VAR_NAME_CTL_PREFER,
ObjectData::RealPropUnchecked, "Yaf_Route_Map");
auto ptr_delim = o->o_realProp(YAF_ROUTE_MAP_VAR_NAME_DELIMETER,
ObjectData::RealPropUnchecked, "Yaf_Route_Map");
if (ptr_uri == NULL) {
raise_warning("invalid uri:%p", ptr_uri);
return false;
}
std::string req_uri;
if (ptr_uri && ptr_uri->isString() &&
ptr_base_uri &&
ptr_base_uri->isString()&&
strncasecmp(ptr_uri->toString().c_str(),
ptr_base_uri->toString().c_str(), ptr_base_uri->toString().length()) == 0) {
req_uri = std::string(ptr_uri->toString().c_str() + ptr_base_uri->toString().length());
} else {
req_uri = std::string(ptr_uri->toString().c_str());
}
if (req_uri.length() == 0) {
return false;
}
std::string str_query_str;
if (ptr_delim->isString() && ptr_delim->toString().length()) {
const char* str_delim = ptr_delim->toString().c_str();
char* tmp_req_uri = strdup(req_uri.c_str());
char* query_str = strstr(tmp_req_uri, str_delim);
if (query_str && *(query_str - 1) == '/') {
char* rest = query_str + strlen(str_delim);
if (*rest == '\0') {
req_uri = std::string(req_uri, query_str - tmp_req_uri);
query_str = NULL;
} else if(*rest == '/') {
req_uri = std::string(req_uri, query_str - tmp_req_uri);
str_query_str = std::string(rest);
} else {
query_str = NULL;
}
}
free(tmp_req_uri);
}
std::string route_result;
char* save_ptr = NULL;
char* tmp = strdup(req_uri.c_str());
char* seg = strtok_r(tmp, YAF_ROUTER_URL_DELIMIETER, &save_ptr);
while (seg) {
int seg_len = strlen(seg);
if (seg_len) {
route_result += seg;
}
route_result += "_";
seg = strtok_r(NULL, YAF_ROUTER_URL_DELIMIETER, &save_ptr);
}
free(tmp);
if (route_result.length()) {
if (route_result[route_result.length() - 1] == '_') {
route_result.pop_back();
}
if (ptr_ctl_prefer->toBoolean()) {
auto ptr_controller = request->o_realProp(YAF_REQUEST_PROPERTY_NAME_CONTROLLER,
ObjectData::RealPropUnchecked, "Yaf_Request_Abstract");
*ptr_controller = String(route_result);
} else {
auto ptr_action = request->o_realProp(YAF_REQUEST_PROPERTY_NAME_ACTION,
ObjectData::RealPropUnchecked, "Yaf_Request_Abstract");
*ptr_action = String(route_result);
}
}
if (str_query_str.length()) {
Array arr = yaf_router_parse_parameters(str_query_str.c_str());
yaf_request_set_params_multi(&request, arr);
}
return true;
}
示例10: _xml_characterDataHandler
void _xml_characterDataHandler(void *userData, const XML_Char *s, int len) {
auto parser = getParserFromToken(userData);
if (parser) {
Variant retval;
Array args = Array::Create();
if (parser->characterDataHandler.toBoolean()) {
args.append(Variant(parser));
args.append(_xml_xmlchar_zval(s, len, parser->target_encoding));
xml_call_handler(parser, parser->characterDataHandler, args);
}
if (!parser->data.isNull()) {
int i;
int doprint = 0;
String decoded_value;
int decoded_len;
decoded_value = xml_utf8_decode(s,len,
parser->target_encoding);
decoded_len = decoded_value.size();
for (i = 0; i < decoded_len; i++) {
switch (decoded_value[i]) {
case ' ':
case '\t':
case '\n':
default:
doprint = 1;
break;
}
if (doprint) {
break;
}
}
if (doprint || (! parser->skipwhite)) {
if (parser->lastwasopen) {
String myval;
// check if value exists, if yes append to that
if (parser->ctag.toArrRef().exists(s_value)) {
myval = tvCastToString(parser->ctag.toArray().rvalAt(s_value).tv());
myval += decoded_value;
parser->ctag.toArrRef().set(s_value, myval);
} else {
parser->ctag.toArrRef().set(
s_value,
decoded_value
);
}
} else {
Array tag;
String myval;
String mytype;
auto curtag = parser->data.toArrRef().pop();
SCOPE_EXIT {
try {
parser->data.toArrRef().append(curtag);
} catch (...) {}
};
if (curtag.toArrRef().exists(s_type)) {
mytype = tvCastToString(curtag.toArrRef().rvalAt(s_type).tv());
if (!strcmp(mytype.data(), "cdata") &&
curtag.toArrRef().exists(s_value)) {
myval = tvCastToString(curtag.toArrRef().rvalAt(s_value).tv());
myval += decoded_value;
curtag.toArrRef().set(s_value, myval);
return;
}
}
if (parser->level <= XML_MAXLEVEL && parser->level > 0) {
tag = Array::Create();
_xml_add_to_info(parser, parser->ltags[parser->level-1] +
parser->toffset);
tag.set(s_tag, String(parser->ltags[parser->level-1] +
parser->toffset, CopyString));
tag.set(s_value, decoded_value);
tag.set(s_type, s_cdata);
tag.set(s_level, parser->level);
parser->data.toArrRef().append(tag);
} else if (parser->level == (XML_MAXLEVEL + 1)) {
raise_warning("Maximum depth exceeded - Results truncated");
}
}
}
}
}
示例11: raiseWarning
void raiseWarning(const StringData* sd) {
raise_warning("%s", sd->data());
}
示例12: setNull
//.........这里部分代码省略.........
// deserialize data that was serialized before the migration of
// collections to the HH namespace.
if (type != 'O') {
// Collections are CPP builtins; don't attempt to autoload
cls = Unit::getClass(clsName.get(), /* autoload */ false);
if (!cls) {
cls = tryAlternateCollectionClass(clsName.get());
}
} else if (allowObjectFormatForCollections) {
// In order to support the legacy {O|V}:{Set|Vector|Map}
// serialization, we defer autoloading until we know that there's
// no alternate (builtin) collection class.
cls = Unit::getClass(clsName.get(), /* autoload */ false);
if (!cls) {
cls = tryAlternateCollectionClass(clsName.get());
}
if (!cls) {
cls = Unit::loadClass(clsName.get()); // with autoloading
}
} else {
cls = Unit::loadClass(clsName.get()); // with autoloading
}
Object obj;
if (RuntimeOption::UnserializationWhitelistCheck &&
(type == 'O') &&
!uns->isWhitelistedClass(clsName)) {
const char* err_msg =
"The object being unserialized with class name '%s' "
"is not in the given whitelist. "
"See http://fburl.com/SafeSerializable for more detail";
if (RuntimeOption::UnserializationWhitelistCheckWarningOnly) {
raise_warning(err_msg, clsName.c_str());
} else {
raise_error(err_msg, clsName.c_str());
}
}
if (cls) {
// Only unserialize CPP extension types which can actually
// support it. Otherwise, we risk creating a CPP object
// without having it initialized completely.
if (cls->instanceCtor() && !cls->isCppSerializable()) {
obj = ObjectData::newInstance(
SystemLib::s___PHP_Unserializable_ClassClass);
obj->o_set(s_PHP_Unserializable_Class_Name, clsName);
} else {
obj = ObjectData::newInstance(cls);
if (UNLIKELY(cls == c_Pair::classof() && size != 2)) {
throw Exception("Pair objects must have exactly 2 elements");
}
}
} else {
obj = ObjectData::newInstance(
SystemLib::s___PHP_Incomplete_ClassClass);
obj->o_set(s_PHP_Incomplete_Class_Name, clsName);
}
operator=(obj);
if (size > 0) {
if (type == 'O') {
// Collections are not allowed
if (obj->isCollection()) {
if (size > 0) {
throw Exception("%s does not support the 'O' serialization "
"format", clsName.data());
示例13: HHVM_FUNCTION
Variant HHVM_FUNCTION(socket_select,
VRefParam read,
VRefParam write,
VRefParam except,
const Variant& vtv_sec,
int tv_usec /* = 0 */) {
int count = 0;
if (!read.isNull()) {
count += read.toArray().size();
}
if (!write.isNull()) {
count += write.toArray().size();
}
if (!except.isNull()) {
count += except.toArray().size();
}
if (!count) {
return false;
}
struct pollfd *fds = (struct pollfd *)calloc(count, sizeof(struct pollfd));
count = 0;
if (!read.isNull()) {
sock_array_to_fd_set(read.toArray(), fds, count, POLLIN);
}
if (!write.isNull()) {
sock_array_to_fd_set(write.toArray(), fds, count, POLLOUT);
}
if (!except.isNull()) {
sock_array_to_fd_set(except.toArray(), fds, count, POLLPRI);
}
if (!count) {
raise_warning("no resource arrays were passed to select");
free(fds);
return false;
}
IOStatusHelper io("socket_select");
int timeout_ms = -1;
if (!vtv_sec.isNull()) {
timeout_ms = vtv_sec.toInt32() * 1000 + tv_usec / 1000;
}
/* slight hack to support buffered data; if there is data sitting in the
* read buffer of any of the streams in the read array, let's pretend
* that we selected, but return only the readable sockets */
if (!read.isNull()) {
auto hasData = Array::Create();
for (ArrayIter iter(read.toArray()); iter; ++iter) {
auto file = cast<File>(iter.second());
if (file->bufferedLen() > 0) {
hasData.append(iter.second());
}
}
if (hasData.size() > 0) {
if (!write.isNull()) {
write = empty_array();
}
if (!except.isNull()) {
except = empty_array();
}
read = hasData;
free(fds);
return hasData.size();
}
}
int retval = poll(fds, count, timeout_ms);
if (retval == -1) {
raise_warning("unable to select [%d]: %s", errno,
folly::errnoStr(errno).c_str());
free(fds);
return false;
}
count = 0;
int nfds = 0;
if (!read.isNull()) {
sock_array_from_fd_set(read, fds, nfds, count, POLLIN|POLLERR|POLLHUP);
}
if (!write.isNull()) {
sock_array_from_fd_set(write, fds, nfds, count, POLLOUT|POLLERR);
}
if (!except.isNull()) {
sock_array_from_fd_set(except, fds, nfds, count, POLLPRI|POLLERR);
}
free(fds);
return count;
}
示例14: php_mcrypt_do_crypt
static Variant php_mcrypt_do_crypt(CStrRef cipher, CStrRef key, CStrRef data,
CStrRef mode, CStrRef iv, bool dencrypt) {
MCRYPT td = mcrypt_module_open((char*)cipher.data(),
(char*)MCG(algorithms_dir).data(),
(char*)mode.data(),
(char*)MCG(modes_dir).data());
if (td == MCRYPT_FAILED) {
raise_warning(MCRYPT_OPEN_MODULE_FAILED);
return false;
}
/* Checking for key-length */
int max_key_length = mcrypt_enc_get_key_size(td);
if (key.size() > max_key_length) {
raise_warning("Size of key is too large for this algorithm");
}
int count;
int *key_length_sizes = mcrypt_enc_get_supported_key_sizes(td, &count);
int use_key_length;
char *key_s = NULL;
if (count == 0 && key_length_sizes == NULL) { // all lengths 1 - k_l_s = OK
use_key_length = key.size();
key_s = (char*)malloc(use_key_length);
memcpy(key_s, key.data(), use_key_length);
} else if (count == 1) { /* only m_k_l = OK */
key_s = (char*)malloc(key_length_sizes[0]);
memset(key_s, 0, key_length_sizes[0]);
memcpy(key_s, key.data(), MIN(key.size(), key_length_sizes[0]));
use_key_length = key_length_sizes[0];
} else { /* dertermine smallest supported key > length of requested key */
use_key_length = max_key_length; /* start with max key length */
for (int i = 0; i < count; i++) {
if (key_length_sizes[i] >= key.size() &&
key_length_sizes[i] < use_key_length) {
use_key_length = key_length_sizes[i];
}
}
key_s = (char*)malloc(use_key_length);
memset(key_s, 0, use_key_length);
memcpy(key_s, key.data(), MIN(key.size(), use_key_length));
}
mcrypt_free(key_length_sizes);
/* Check IV */
char *iv_s = NULL;
int iv_size = mcrypt_enc_get_iv_size(td);
/* IV is required */
if (mcrypt_enc_mode_has_iv(td) == 1) {
if (!iv.empty()) {
if (iv_size != iv.size()) {
raise_warning("The IV parameter must be as long as the blocksize");
} else {
iv_s = (char*)malloc(iv_size + 1);
memcpy(iv_s, iv.data(), iv_size);
}
} else {
raise_warning("Attempt to use an empty IV, which is NOT recommended");
iv_s = (char*)malloc(iv_size + 1);
memset(iv_s, 0, iv_size + 1);
}
}
int block_size;
unsigned long int data_size;
String s;
char *data_s;
/* Check blocksize */
if (mcrypt_enc_is_block_mode(td) == 1) { /* It's a block algorithm */
block_size = mcrypt_enc_get_block_size(td);
data_size = (((data.size() - 1) / block_size) + 1) * block_size;
s = String(data_size, ReserveString);
data_s = (char*)s.mutableSlice().ptr;
memset(data_s, 0, data_size);
memcpy(data_s, data.data(), data.size());
} else { /* It's not a block algorithm */
data_size = data.size();
s = String(data_size, ReserveString);
data_s = (char*)s.mutableSlice().ptr;
memcpy(data_s, data.data(), data.size());
}
if (mcrypt_generic_init(td, key_s, use_key_length, iv_s) < 0) {
raise_warning("Mcrypt initialisation failed");
return false;
}
if (dencrypt) {
mdecrypt_generic(td, data_s, data_size);
} else {
mcrypt_generic(td, data_s, data_size);
}
/* freeing vars */
mcrypt_generic_end(td);
if (key_s != NULL) {
free(key_s);
}
if (iv_s != NULL) {
free(iv_s);
}
//.........这里部分代码省略.........
示例15: f_gc_disable
void f_gc_disable() {
raise_warning("HipHop currently does not support circular reference "
"collection");
}