403Webshell
Server IP : 192.241.186.36  /  Your IP : 216.73.216.164
Web Server : Apache/2.4.29 (Ubuntu)
System : Linux webserver7 4.15.0-194-generic #205-Ubuntu SMP Fri Sep 16 19:49:27 UTC 2022 x86_64
User : root ( 0)
PHP Version : 7.4.32
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/local/go/test/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/local/go/test/slice3.go
// runoutput

// Copyright 2013 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 run-time behavior of 3-index slice expressions.

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

var bout *bufio.Writer

func main() {
	bout = bufio.NewWriter(os.Stdout)

	fmt.Fprintf(bout, "%s", programTop)
	fmt.Fprintf(bout, "func main() {\n")

	index := []string{
		"0",
		"1",
		"2",
		"3",
		"10",
		"20",
		"vminus1",
		"v0",
		"v1",
		"v2",
		"v3",
		"v10",
		"v20",
	}

	parse := func(s string) (n int, isconst bool) {
		if s == "vminus1" {
			return -1, false
		}
		isconst = true
		if s[0] == 'v' {
			isconst = false
			s = s[1:]
		}
		n, _ = strconv.Atoi(s)
		return n, isconst
	}

	const Cap = 10 // cap of slice, array

	for _, base := range []string{"array", "slice"} {
		for _, i := range index {
			iv, iconst := parse(i)
			for _, j := range index {
				jv, jconst := parse(j)
				for _, k := range index {
					kv, kconst := parse(k)
					// Avoid errors that would make the program not compile.
					// Those are tested by slice3err.go.
					switch {
					case iconst && jconst && iv > jv,
						jconst && kconst && jv > kv,
						iconst && kconst && iv > kv,
						iconst && base == "array" && iv > Cap,
						jconst && base == "array" && jv > Cap,
						kconst && base == "array" && kv > Cap:
						continue
					}

					expr := base + "[" + i + ":" + j + ":" + k + "]"
					var xbase, xlen, xcap int
					if iv > jv || jv > kv || kv > Cap || iv < 0 || jv < 0 || kv < 0 {
						xbase, xlen, xcap = -1, -1, -1
					} else {
						xbase = iv
						xlen = jv - iv
						xcap = kv - iv
					}
					fmt.Fprintf(bout, "\tcheckSlice(%q, func() []byte { return %s }, %d, %d, %d)\n", expr, expr, xbase, xlen, xcap)
				}
			}
		}
	}

	fmt.Fprintf(bout, "\tif !ok { os.Exit(1) }\n")
	fmt.Fprintf(bout, "}\n")
	bout.Flush()
}

var programTop = `
package main

import (
	"fmt"
	"os"
	"unsafe"
)

var ok = true

var (
	array = new([10]byte)
	slice = array[:]

	vminus1 = -1
	v0 = 0
	v1 = 1
	v2 = 2
	v3 = 3
	v4 = 4
	v5 = 5
	v10 = 10
	v20 = 20
)

func notOK() {
	if ok {
		println("BUG:")
		ok = false
	}
}

func checkSlice(desc string, f func() []byte, xbase, xlen, xcap int) {
	defer func() {
		if err := recover(); err != nil {
			if xbase >= 0 {
				notOK()
				println(desc, " unexpected panic: ", fmt.Sprint(err))
			}
		}
		// "no panic" is checked below
	}()
	
	x := f()

	arrayBase := uintptr(unsafe.Pointer(array))
	raw := *(*[3]uintptr)(unsafe.Pointer(&x))
	base, len, cap := raw[0] - arrayBase, raw[1], raw[2]
	if xbase < 0 {
		notOK()
		println(desc, "=", base, len, cap, "want panic")
		return
	}
	if cap != 0 && base != uintptr(xbase) || base >= 10 || len != uintptr(xlen) || cap != uintptr(xcap) {
		notOK()
		if cap == 0 {
			println(desc, "=", base, len, cap, "want", "0-9", xlen, xcap)
		} else {
			println(desc, "=", base, len, cap, "want", xbase, xlen, xcap)
		}
	}
}

`

Youez - 2016 - github.com/yon3zu
LinuXploit