Skip to content

Commit 72decbd

Browse files
committed
Add safe cstring rules
1 parent 1f25c92 commit 72decbd

3 files changed

Lines changed: 1299 additions & 1 deletion

File tree

rules/cstring/tgt_refcount.rs

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,3 +258,174 @@ fn f28(a0: i32, a1: Ptr<u8>, a2: usize) -> i32 {
258258
}
259259
0
260260
}
261+
262+
fn f6(a0: Ptr<u8>, a1: i32) -> Ptr<u8> {
263+
let mut __i: usize = 0;
264+
loop {
265+
let __c = a0.offset(__i).read();
266+
if __c == a1 as u8 {
267+
break a0.offset(__i);
268+
}
269+
if __c == 0 {
270+
break Ptr::null();
271+
}
272+
__i += 1;
273+
}
274+
}
275+
276+
fn f12(a0: AnyPtr, a1: i32, a2: usize) -> AnyPtr {
277+
match (0..a2).find(|&__i| a0.reinterpret_cast::<u8>().offset(__i).read() == a1 as u8) {
278+
Some(__i) => a0.reinterpret_cast::<u8>().offset(__i).to_any(),
279+
None => Ptr::<u8>::null().to_any(),
280+
}
281+
}
282+
283+
fn f13(a0: Ptr<u8>, a1: i32) -> Ptr<u8> {
284+
let mut __i: usize = 0;
285+
let mut __found = Ptr::null();
286+
loop {
287+
let __c = a0.offset(__i).read();
288+
if __c == a1 as u8 {
289+
__found = a0.offset(__i);
290+
}
291+
if __c == 0 {
292+
break __found;
293+
}
294+
__i += 1;
295+
}
296+
}
297+
298+
fn f14(a0: Ptr<u8>, a1: i32) -> Ptr<u8> {
299+
let mut __i: usize = 0;
300+
let mut __found = Ptr::null();
301+
loop {
302+
let __c = a0.offset(__i).read();
303+
if __c == a1 as u8 {
304+
__found = a0.offset(__i);
305+
}
306+
if __c == 0 {
307+
break __found;
308+
}
309+
__i += 1;
310+
}
311+
}
312+
313+
fn f19(a0: Ptr<u8>, a1: Ptr<u8>) -> Ptr<u8> {
314+
let mut __s: usize = 0;
315+
loop {
316+
let mut __i: usize = 0;
317+
let __matched = loop {
318+
let __n = a1.offset(__i).read();
319+
if __n == 0 {
320+
break true;
321+
}
322+
if a0.offset(__s + __i).read() != __n {
323+
break false;
324+
}
325+
__i += 1;
326+
};
327+
if __matched {
328+
break a0.offset(__s);
329+
}
330+
if a0.offset(__s).read() == 0 {
331+
break Ptr::null();
332+
}
333+
__s += 1;
334+
}
335+
}
336+
337+
fn f20(a0: Ptr<u8>, a1: Ptr<u8>) -> Ptr<u8> {
338+
let mut __s: usize = 0;
339+
loop {
340+
let mut __i: usize = 0;
341+
let __matched = loop {
342+
let __n = a1.offset(__i).read();
343+
if __n == 0 {
344+
break true;
345+
}
346+
if a0.offset(__s + __i).read() != __n {
347+
break false;
348+
}
349+
__i += 1;
350+
};
351+
if __matched {
352+
break a0.offset(__s);
353+
}
354+
if a0.offset(__s).read() == 0 {
355+
break Ptr::null();
356+
}
357+
__s += 1;
358+
}
359+
}
360+
361+
fn f22(a0: Ptr<u8>, a1: Ptr<u8>) -> Ptr<u8> {
362+
let mut __i: usize = 0;
363+
loop {
364+
let __c = a0.offset(__i).read();
365+
if __c == 0 {
366+
break Ptr::null();
367+
}
368+
let mut __j: usize = 0;
369+
let __hit = loop {
370+
let __r = a1.offset(__j).read();
371+
if __r == 0 {
372+
break false;
373+
}
374+
if __r == __c {
375+
break true;
376+
}
377+
__j += 1;
378+
};
379+
if __hit {
380+
break a0.offset(__i);
381+
}
382+
__i += 1;
383+
}
384+
}
385+
386+
fn f23(a0: Ptr<u8>, a1: Ptr<u8>) -> Ptr<u8> {
387+
let mut __i: usize = 0;
388+
loop {
389+
let __c = a0.offset(__i).read();
390+
if __c == 0 {
391+
break Ptr::null();
392+
}
393+
let mut __j: usize = 0;
394+
let __hit = loop {
395+
let __r = a1.offset(__j).read();
396+
if __r == 0 {
397+
break false;
398+
}
399+
if __r == __c {
400+
break true;
401+
}
402+
__j += 1;
403+
};
404+
if __hit {
405+
break a0.offset(__i);
406+
}
407+
__i += 1;
408+
}
409+
}
410+
411+
#[cfg(target_os = "linux")]
412+
fn f25(a0: AnyPtr, a1: i32, a2: usize) -> AnyPtr {
413+
match (0..a2)
414+
.rev()
415+
.find(|&__i| a0.reinterpret_cast::<u8>().offset(__i).read() == a1 as u8)
416+
{
417+
Some(__i) => a0.reinterpret_cast::<u8>().offset(__i).to_any(),
418+
None => Ptr::<u8>::null().to_any(),
419+
}
420+
}
421+
422+
#[cfg(target_os = "linux")]
423+
fn f26(a0: AnyPtr, a1: i32, a2: usize) -> AnyPtr {
424+
match (0..a2)
425+
.rev()
426+
.find(|&__i| a0.reinterpret_cast::<u8>().offset(__i).read() == a1 as u8)
427+
{
428+
Some(__i) => a0.reinterpret_cast::<u8>().offset(__i).to_any(),
429+
None => Ptr::<u8>::null().to_any(),
430+
}
431+
}

tests/unit/cstring.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// no-compile: refcount
21
#define _GNU_SOURCE
32
#include <cassert>
43
#include <cstdlib>

0 commit comments

Comments
 (0)