⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 safeops.t

📁 source of perl for linux application,
💻 T
字号:
#!perl# Tests that all ops can be trapped by a Safe compartmentBEGIN {    if ($ENV{PERL_CORE}) {	chdir 't' if -d 't';	@INC = '../lib';    }    else {	# this won't work outside of the core, so exit        print "1..0\n"; exit 0;    }}use Config;BEGIN {    if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') {        print "1..0\n"; exit 0;    }}use strict;use Test::More;use Safe;# Read the op names and descriptions directly from opcode.plmy @op;my %code;while (<DATA>) {    chomp;    die "Can't match $_" unless /^([a-z_0-9]+)\t+(.*)/;    $code{$1} = $2;}open my $fh, '<', '../opcode.pl' or die "Can't open opcode.pl: $!";while (<$fh>) {    last if /^__END__/;}while (<$fh>) {    chomp;    next if !$_ or /^#/;    my ($op, $opname) = split /\t+/;    push @op, [$op, $opname, $code{$op}];}close $fh;plan(tests => scalar @op);sub testop {    my ($op, $opname, $code) = @_;    pass("$op : skipped") and return if $code =~ /^SKIP/;    pass("$op : skipped") and return if $code =~ m://: && $] < 5.009; # no dor    my $c = new Safe;    $c->deny_only($op);    $c->reval($code);    like($@, qr/'\Q$opname\E' trapped by operation mask/, $op);}foreach (@op) {    if ($_->[2]) {	testop @$_;    } else {	local $TODO = "No test yet for $_->[1]";	fail();    }}# things that begin with SKIP are skipped, for various reasons (notably# optree modified by the optimizer -- Safe checks are done before the# optimizer modifies the optree)__DATA__null		SKIPstub		SKIPscalar		scalar $xpushmark	print @xwantarray	wantarrayconst		42gvsv		SKIP (set by optimizer) $xgv		SKIP *xgelem		*x{SCALAR}padsv		SKIP my $xpadav		SKIP my @xpadhv		SKIP my %xpadany		SKIP (not implemented)pushre		SKIP split /foo/rv2gv		*xrv2sv		$xav2arylen	$#xrv2cv		f()anoncode	sub { }prototype	prototype 'foo'refgen		\($x,$y)srefgen		SKIP \$xref		refbless		blessbacktick	qx/ls/glob		<*.c>readline	<FH>rcatline	SKIP (set by optimizer) $x .= <F>regcmaybe	SKIP (internal)regcreset	SKIP (internal)regcomp		SKIP (internal)match		/foo/qr		qr/foo/subst		s/foo/bar/substcont	SKIP (set by optimizer)trans		y:z:t:sassign		$x = $yaassign		@x = @ychop		chop @fooschop		chopchomp		chomp @fooschomp		chompdefined		definedundef		undefstudy		studypos		pospreinc		++$ii_preinc	SKIP (set by optimizer)predec		--$ii_predec	SKIP (set by optimizer)postinc		$i++i_postinc	SKIP (set by optimizer)postdec		$i--i_postdec	SKIP (set by optimizer)pow		$x ** $ymultiply	$x * $yi_multiply	SKIP (set by optimizer)divide		$x / $yi_divide	SKIP (set by optimizer)modulo		$x % $yi_modulo	SKIP (set by optimizer)repeat		$x x $yadd		$x + $yi_add		SKIP (set by optimizer)subtract	$x - $yi_subtract	SKIP (set by optimizer)concat		$x . $ystringify	"$x"left_shift	$x << 1right_shift	$x >> 1lt		$x < $yi_lt		SKIP (set by optimizer)gt		$x > $yi_gt		SKIP (set by optimizer)le		$i <= $yi_le		SKIP (set by optimizer)ge		$i >= $yi_ge		SKIP (set by optimizer)eq		$x == $yi_eq		SKIP (set by optimizer)ne		$x != $yi_ne		SKIP (set by optimizer)ncmp		$i <=> $yi_ncmp		SKIP (set by optimizer)slt		$x lt $ysgt		$x gt $ysle		$x le $ysge		$x ge $yseq		$x eq $ysne		$x ne $yscmp		$x cmp $ybit_and		$x & $ybit_xor		$x ^ $ybit_or		$x | $ynegate		-$xi_negate	SKIP (set by optimizer)not		!$xcomplement	~$xatan2		atan2 1sin		sin 1cos		cos 1rand		randsrand		srandexp		exp 1log		log 1sqrt		sqrt 1int		inthex		hexoct		octabs		abslength		lengthsubstr		substr $x, 1vec		vecindex		indexrindex		rindexsprintf		sprintf '%s', 'foo'formline	formlineord		ordchr		chrcrypt		crypt 'foo','bar'ucfirst		ucfirstlcfirst		lcfirstuc		uclc		lcquotemeta	quotemetarv2av		@aaelemfast	SKIP (set by optimizer)aelem		$a[1]aslice		@a[1,2]each		each %hvalues		values %hkeys		keys %hdelete		delete $h{Key}exists		exists $h{Key}rv2hv		%hhelem		$h{kEy}hslice		@h{kEy}unpack		unpackpack		packsplit		split /foo/join		join $a, @blist		@x = (1,2)lslice		SKIP @x[1,2]anonlist	[1,2]anonhash	{ a => 1 }splice		splice @x, 1, 2, 3push		push @x, $xpop		pop @xshift		shift @xunshift		unshift @xsort		sort @xreverse		reverse @xgrepstart	grep { $_ eq 'foo' } @xgrepwhile	SKIP grep { $_ eq 'foo' } @xmapstart	map $_ + 1, @foomapwhile	SKIP (set by optimizer)range		SKIPflip		1..2flop		1..2and		$x && $yor		$x || $yxor		$x xor $ycond_expr	$x ? 1 : 0andassign	$x &&= $yorassign	$x ||= $ymethod		Foo->$x()entersub	f()leavesub	sub f{} f()leavesublv	sub f:lvalue{return $x} f()caller		callerwarn		warndie		diereset		resetlineseq		SKIPnextstate	SKIPdbstate		SKIP (needs debugger)unstack		while(0){}enter		SKIPleave		SKIPscope		SKIPenteriter	SKIPiter		SKIPenterloop	SKIPleaveloop	SKIPreturn		returnlast		lastnext		nextredo		redo THISdump		dumpgoto		goto THEREexit		exit 0open		open FOOclose		close FOOpipe_op		pipe FOO,BARfileno		fileno FOOumask		umask 0755, 'foo'binmode		binmode FOOtie		tieuntie		untietied		tieddbmopen		dbmopendbmclose	dbmclosesselect		SKIP (set by optimizer)select		select FOOgetc		getc FOOread		read FOOenterwrite	writeleavewrite	SKIPprtf		printfprint		printsysopen		sysopensysseek		sysseeksysread		sysreadsyswrite	syswritesend		sendrecv		recveof		eof FOOtell		tellseek		seek FH, $pos, $whencetruncate	truncate FOO, 42fcntl		fcntlioctl		ioctlflock		flock FOO, 1socket		socketsockpair	socketpairbind		bindconnect		connectlisten		listenaccept		acceptshutdown	shutdowngsockopt	getsockoptssockopt	setsockoptgetsockname	getsocknamegetpeername	getpeernamelstat		lstat FOOstat		stat FOOftrread		-Rftrwrite	-Wftrexec		-Xfteread		-rftewrite	-wfteexec		-xftis		-efteowned	SKIP -Oftrowned	SKIP -oftzero		-zftsize		-sftmtime		-Mftatime		-Aftctime		-Cftsock		-Sftchr		-cftblk		-bftfile		-fftdir		-dftpipe		-pftlink		-lftsuid		-uftsgid		-gftsvtx		-kfttty		-tfttext		-Tftbinary	-Bchdir		chdir '/'chown		chownchroot		chrootunlink		unlink 'foo'chmod		chmod 511, 'foo'utime		utimerename		rename 'foo', 'bar'link		link 'foo', 'bar'symlink		symlink 'foo', 'bar'readlink	readlink 'foo'mkdir		mkdir 'foo'rmdir		rmdir 'foo'open_dir	opendir DIRreaddir		readdir DIRtelldir		telldir DIRseekdir		seekdir DIR, $posrewinddir	rewinddir DIRclosedir	closedir DIRfork		forkwait		waitwaitpid		waitpidsystem		systemexec		execkill		killgetppid		getppidgetpgrp		getpgrpsetpgrp		setpgrpgetpriority	getprioritysetpriority	setprioritytime		timetms		timeslocaltime	localtimegmtime		gmtimealarm		alarmsleep		sleep 1shmget		shmgetshmctl		shmctlshmread		shmreadshmwrite	shmwritemsgget		msggetmsgctl		msgctlmsgsnd		msgsndmsgrcv		msgrcvsemget		semgetsemctl		semctlsemop		semoprequire		use strictdofile		do 'file'entereval	eval "1+1"leaveeval	eval "1+1"entertry	SKIP eval { 1+1 }leavetry	SKIP eval { 1+1 }ghbyname	gethostbyname 'foo'ghbyaddr	gethostbyaddr 'foo'ghostent	gethostentgnbyname	getnetbyname 'foo'gnbyaddr	getnetbyaddr 'foo'gnetent		getnetentgpbyname	getprotobyname 'foo'gpbynumber	getprotobynumber 42gprotoent	getprotoentgsbyname	getservbyname 'name', 'proto'gsbyport	getservbyport 'a', 'b'gservent	getserventshostent	sethostentsnetent		setnetentsprotoent	setprotoentsservent	setserventehostent	endhostentenetent		endnetenteprotoent	endprotoenteservent	endserventgpwnam		getpwnamgpwuid		getpwuidgpwent		getpwentspwent		setpwentepwent		endpwentggrnam		getgrnamggrgid		getgrgidggrent		getgrentsgrent		setgrentegrent		endgrentgetlogin	getloginsyscall		syscalllock		SKIPthreadsv	SKIPsetstate	SKIPmethod_named	$x->y()dor		$x // $ydorassign	$x //= $ycustom		SKIP (no way)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -