小编hau*_*ron的帖子

如何清理(用随机字节覆盖)std :: string内部缓冲区?

考虑一个场景,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).

否则会提出建议,但是上面的条件(连续的,待去除的)是否安全?

c++ stdstring c++11

25
推荐指数
4
解决办法
2009
查看次数

std :: set中索引处的元素?

我偶然发现了这个问题:我似乎无法在正常的索引位置选择项目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)

我能做些什么来解决这个问题?

c++ std set

24
推荐指数
4
解决办法
7万
查看次数

OpenSSL - 检查哪个引擎是一个被调用的函数,以及硬件是否真正使用过?

首先,我是OpenSSL世界的初学者.我提前为任何基本的,野蛮的错误道歉.

考虑一个流程:

  1. 使用硬件使用引擎初始化OpenSSL(我们称之为EngineHW).
  2. 调用OpenSSL函数,例如X509_sign.

如何检查所调用的函数是否在硬件上执行?

如何验证EngineHW函数被调用?如果EngineHW没有定义该功能怎么办 - OpenSSL将回退到它拥有的任何默认引擎吗?

问题与断言质量有关 - 因为我有硬件为我做加密,我考虑使用软件回归(至少对于重要的功能).

openssl cryptography hsm

15
推荐指数
1
解决办法
524
查看次数

如何成功停止Ansible任务,而不是失败?

我已经搜索了如何在不失败的情况下停止执行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",但这种情况非常糟糕.

break ansible

12
推荐指数
1
解决办法
6136
查看次数

指定maven security-settings.xml文件的自定义位置?

使用maven,您可以轻松指定settings.xml位置,例如:

mvn -s custom/dir/settings.xml package
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法来指定自定义security-settings.xml?

这背后的原因很简单:通过本地存储库轻松分发它.现在,安全性并不是一个问题 - 它都在内部网上.

maven

11
推荐指数
1
解决办法
9079
查看次数

Ansible set_fact不会更改变量值

方案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来更新变量的值?

shell ansible

11
推荐指数
2
解决办法
1万
查看次数

可以线程尝试std :: lock [_unique] std :: shared_mutex被调用std :: lock_shared的线程饿死吗?

关于std::shared_mutex和获得的问题unique_lock.

假设有3个主题:

  • 2名读者(努力lock_shared()std::shared_mutex),和
  • 1名作家(努力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)

c++ multithreading mutex c++11 c++14

10
推荐指数
1
解决办法
657
查看次数

从派生调用时,编译器找不到基类方法,派生用附加参数定义相同的命名方法

这是一个带有简单代码粘贴的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)

c++ overloading compilation

6
推荐指数
1
解决办法
1955
查看次数

在F1之后跳转到QtCreator中正确的C++ STL文档页面?

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中检查了它.是否可以在较新版本中修复?

c++ documentation qt stl qt-creator

6
推荐指数
1
解决办法
1824
查看次数

如何在“ exec”内部使加特林测试失败?

带有执行链的加特林场景。请求后,将保存返回的数据。稍后对其进行处理,并且根据处理结果,它应该失败或通过测试。

这似乎是最简单的情况,但是我找不到任何可靠的信息如何在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)

在方案上方的某个地方,“守护者失败,关闭了系统”。

现在,这似乎是一件有用且经常使用的事情-我可能会错过一些简单的事情。怎么做?

assert scala gatling

6
推荐指数
1
解决办法
6384
查看次数