考虑一个场景,std::string用于存储秘密.一旦它被消耗并且不再需要它,最好清理它,即覆盖包含它的内存,从而隐藏秘密.
std::string提供一个函数const char* data()返回指向(自C++ 11)连续内存的指针.
现在,由于内存是连续的,并且由于范围结束,变量将在清理后立即销毁,因此安全:
char* modifiable = const_cast<char*>(secretString.data());
OpenSSL_cleanse(modifiable, secretString.size());
Run Code Online (Sandbox Code Playgroud)
根据这里引用的标准:
$ 5.2.11/7 -注意:根据目的,通过指针,左值或指针以从得到的数据成员的写操作的类型
const_cast即擅自抛弃一个const-qualifier68可能会产生不确定的行为(7.1.5.1).
否则会提出建议,但是上面的条件(连续的,待去除的)是否安全?
我偶然发现了这个问题:我似乎无法在正常的索引位置选择项目std::set.这是性病的一个错误吗?
下面一个简单的例子:
#include <iostream>
#include <set>
int main()
{
std::set<int> my_set;
my_set.insert(0x4A);
my_set.insert(0x4F);
my_set.insert(0x4B);
my_set.insert(0x45);
for (std::set<int>::iterator it=my_set.begin(); it!=my_set.end(); ++it)
std::cout << ' ' << char(*it); // ups the ordering
//int x = my_set[0]; // this causes a crash!
}
Run Code Online (Sandbox Code Playgroud)
我能做些什么来解决这个问题?
首先,我是OpenSSL世界的初学者.我提前为任何基本的,野蛮的错误道歉.
考虑一个流程:
如何检查所调用的函数是否在硬件上执行?
如何验证EngineHW函数被调用?如果EngineHW没有定义该功能怎么办 - OpenSSL将回退到它拥有的任何默认引擎吗?
问题与断言质量有关 - 因为我有硬件为我做加密,我考虑使用软件回归(至少对于重要的功能).
我已经搜索了如何在不失败的情况下停止执行Ansible任务的示例.
一个简单的例子:
- name: check file
stat: path={{some_path}}
register: check_file_result
- name: if file exists, stop
**fail**: msg="file exists, stopping"
when: check_file_result.stat.exists
Run Code Online (Sandbox Code Playgroud)
这有效,因为它停止执行,但失败了大量的红色文本可能会阻止整个playbook运行进一步的任务.有没有办法停止执行,好像所有的都以"OK"结束?
注意:解决方法是简单地添加"when:check_file_result.stat.exists == false",但这种情况非常糟糕.
使用maven,您可以轻松指定settings.xml位置,例如:
mvn -s custom/dir/settings.xml package
Run Code Online (Sandbox Code Playgroud)
是否有类似的方法来指定自定义security-settings.xml?
这背后的原因很简单:通过本地存储库轻松分发它.现在,安全性并不是一个问题 - 它都在内部网上.
方案ansible-playbook通过额外的var传递调用:
-e my_var=init_value
Run Code Online (Sandbox Code Playgroud)
然后在角色代码中,该值应该通过set_fact调用更改(变量other_var值为"new_value"):
set_fact: my_var: {{ other_var }}
Run Code Online (Sandbox Code Playgroud)
这导致了一个很好的输出,据说确认了改变:
{"ansible facts": {"my_var": "new_value"}}
Run Code Online (Sandbox Code Playgroud)
但是在更改后回显变量会显示旧值:
echo {{ my_var }}
-> "echo init_value"
Run Code Online (Sandbox Code Playgroud)
除此之外,当我在上面的例子中设置两个变量时:
set_fact: my_var: {{ other_var }}
set_fact: new_var: {{ other_var }}
Run Code Online (Sandbox Code Playgroud)
new_var设置正确.
变量在某种程度上是不可变的吗?如何使用set_fact来更新变量的值?
关于std::shared_mutex和获得的问题unique_lock.
假设有3个主题:
lock_shared()的std::shared_mutex),和lock[_unique]()的std::shared_mutex)这位作家是否有可能lock[_unique]()被迫饿死?例如:在任何时候至少有一个读者拥有一个std::shared_lock,并且lock[_unique]()永远不会成功.
更多或更少:将lock[_unique]()一对std::shared_mutex块中的任何企图进一步lock_shared()呢?
(相当肯定boost::upgrade_lock可以在这里工作,但我想知道是否有任何保证裸露std::unique_locka std::shared_mutex)
这是一个带有简单代码粘贴的ideone链接:http://ideone.com/BBcK3B .
基类具有paramtereless函数,而派生类具有参数.一切都是公开的.
为什么编译器在从B实例调用时无法找到A :: foo()?
代码:
#include <iostream>
using namespace std;
class A
{
public:
virtual void foo()
{
cout << "A::foo" << endl;
}
};
class B : public A
{
public:
void foo(int param)
{
cout << "B::foo " << param << endl;
}
};
int main()
{
B b;
b.foo();
}
Run Code Online (Sandbox Code Playgroud)
编译错误:
prog.cpp: In function ‘int main()’:
prog.cpp:25:11: error: no matching function for call to ‘B::foo()’
b.foo();
^
prog.cpp:25:11: note: candidate is:
prog.cpp:16:10: note: …Run Code Online (Sandbox Code Playgroud) QtCreator附带了很酷的Qt相关文档和功能:当您选择Qt类并按F1时,它会打开一个带有该类特定文档页面的侧栏.
现在,QtCreator让我安装C++文档(可在此处找到:http://qt-project.org/wiki/Qt_Creator_Documentation_Gallery - 我已经尝试过en.cppreference.com版本).但是,选择一个STL类并按F1只会打开默认的通用页面列表,即文档的"主页".
是否可以将C++ STL文档的模仿功能用于Qt文档?
另外,我在Ubuntu 12.04上运行的QtCreator 2.4中检查了它.是否可以在较新版本中修复?
带有执行链的加特林场景。请求后,将保存返回的数据。稍后对其进行处理,并且根据处理结果,它应该失败或通过测试。
这似乎是最简单的情况,但是我找不到任何可靠的信息如何在exec块中使测试失败。assert打破了场景,看起来像是加特林(例如:异常抛出不仅使测试失败)。
例:
// The scenario consists of a single test with two exec creating the execChain
val scn = scenario("MyAwesomeScenario").exec(reportableTest(
// Send the request
exec(http("127.0.0.1/Request").get(requestUrl).check(status.is(200)).check(bodyString.saveAs("MyData")
// Process the data
.exec(session => {
assert(processData(session.attributes("MyData")) == true, "Invalid data");
})
))
Run Code Online (Sandbox Code Playgroud)
在方案上方的某个地方,“守护者失败,关闭了系统”。
现在,这似乎是一件有用且经常使用的事情-我可能会错过一些简单的事情。怎么做?