puts(NULL)-为什么WP + RTE不抱怨?

时间:2019-04-24 19:24:53

标签: standard-library frama-c

考虑这个小的C文件:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="row">
  <div class="col tms-check-column">
    <label class="informationTitle" id="topic-preview-left">Topic Example Left</label>
    <div id="p-example-left">
        <p>a</p>
        <p>b</p>
        <p>c</p>
        <p>d</p>
    </div>
  </div>
  <div class="col tms-check-column">
    <label class="informationTitle" id="topic-preview-right">Topic Example Right</label>
    <div id="p-example-right">
        <p>g</p>
    </div>
  </div>
</div>

我正在像这样运行Frama-C的WP和RTE插件:

#include <stdio.h>

void f(void) {
    puts(NULL);
}

我希望这段代码产生frama-c-gui puts.c -wp -rte -wp-rte 或类似的证明义务,这显然是无法证明的。但是,令我惊讶的是,没有发生这样的事情。这是标准库的ACSL规范的不足吗?

1 个答案:

答案 0 :(得分:2)

基本上是。您可以在与Frama-C捆绑在一起的hashlib.md5(string_for_checksum.encode('utf-8')).hexdigest() 版本中看到stdio.h的规范是

puts

即最基本的是/*@ assigns *stream \from s[..]; */ extern int fputs(const char * restrict s, FILE * restrict stream); 子句(再加上Eva的assigns子句)。 froms的前提条件。在stream上添加前提条件很容易;对于s,事情变得更加复杂,因为您需要一个stream类型的各种对象的模型。