考虑这个小的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规范的不足吗?
答案 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
子句)。 from
和s
的前提条件。在stream
上添加前提条件很容易;对于s
,事情变得更加复杂,因为您需要一个stream
类型的各种对象的模型。