Skip to content

Commit d85efd7

Browse files
committed
fuzzing, template, unsafe
1 parent 410bdda commit d85efd7

File tree

5 files changed

+132
-0
lines changed

5 files changed

+132
-0
lines changed

template/02-call-function/main.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
import (
4+
"os"
5+
"text/template"
6+
)
7+
8+
func main() {
9+
10+
t := `{{ horse 32 }}`
11+
12+
echo := func(in any) any {
13+
return in
14+
}
15+
16+
funcs := template.FuncMap{
17+
"horse": echo,
18+
}
19+
20+
tmpl, err := template.New("test").Funcs(funcs).Parse(t)
21+
if err != nil {
22+
panic(err)
23+
}
24+
25+
err = tmpl.Execute(os.Stdout, nil)
26+
if err != nil {
27+
panic(err)
28+
}
29+
}

testing/10-fuzz/convert_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package main
2+
3+
import (
4+
"testing"
5+
"unicode/utf8"
6+
)
7+
8+
func FuzzConvert(f *testing.F) {
9+
f.Add("ABCD")
10+
11+
f.Fuzz(func(t *testing.T, orig string) {
12+
r := Reverse(orig)
13+
rr := Reverse(r)
14+
15+
//t.Log(s)
16+
17+
if utf8.ValidString(orig) && !utf8.ValidString(r) {
18+
t.Errorf("Reverse produced invalid UTF-8 string %q", r)
19+
}
20+
21+
if orig != rr {
22+
t.Errorf("double reverse failed: Orig: %x, double reverse: %x\n", orig, rr)
23+
}
24+
})
25+
}

testing/10-fuzz/main.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"unicode/utf8"
6+
)
7+
8+
func Reverse(s string) string {
9+
// var result string
10+
// for _, v := range s {
11+
// result = string(v) + result
12+
// }
13+
14+
b := []byte(s)
15+
// if len(b) <= 1 {
16+
// return s
17+
// }
18+
19+
for i, j := 0, len(b)-1; i < len(b)/2; i, j = i+1, j-1 {
20+
b[i], b[j] = b[j], b[i]
21+
}
22+
23+
if !utf8.ValidString(string(b)) {
24+
return s
25+
}
26+
27+
return string(b)
28+
}
29+
30+
func main() {
31+
s := "Hesten spiser gress og ikke andre dyr som f.eks. apekatter."
32+
fmt.Printf("%q\n", s)
33+
fmt.Printf("%q\n", Reverse(s))
34+
fmt.Printf("%q\n", Reverse(Reverse(s)))
35+
36+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"unsafe"
6+
)
7+
8+
type Programmer struct {
9+
name string
10+
language string
11+
}
12+
13+
func main() {
14+
p := Programmer{"stefno", "go"}
15+
fmt.Println(p)
16+
17+
name := (*string)(unsafe.Pointer(&p))
18+
*name = "qcrao"
19+
20+
lang := (*string)(unsafe.Pointer(uintptr(unsafe.Pointer(&p)) + unsafe.Offsetof(p.language)))
21+
*lang = "Golang"
22+
23+
fmt.Println(p)
24+
}

unsafe/11/main.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"reflect"
6+
"unsafe"
7+
)
8+
9+
func main() {
10+
aString := [8]byte{'a', 's', 't', 'r', 'i', 'n', 'g'}
11+
upStr := (uintptr)(unsafe.Pointer(&aString))
12+
13+
sh := reflect.SliceHeader{Data: upStr, Len: len(aString)}
14+
15+
s := *(*string)(unsafe.Pointer(&sh))
16+
17+
fmt.Printf("%v, %T\n", s, s)
18+
}

0 commit comments

Comments
 (0)