Ak myslite, ze je to take jednoduche, skuste si spustit,

list(xrange(10000000000000))

neviem kolko nul tam moze byt, aby to zobralo. Toto som skusil ked som pisal predchadzajuci mail. Potom som ho musel pisat znovu, lebo mi linux zabil thunderbird pre nedostatok pamate.

Viem, ze ak sa to spravi spravne, nemozem v eval a exec pouzivat ziadne fcie (ani list, ani xrange), takze hentak uplne to napisat nepojde. Ale verim, ze niekde na svete existuje vacsi borec ako ja ( :-D ) a ten to dokaze takyto problem vytvorit aj so standardnymi prvkami jazyka.

Jan Janech

On 05/05/10 15:27, Jakub Zíka wrote:
Na Linuxu bych se proti přetížení procesoru bránil tak, že bych
spustil skript jako samostatný proces (např. modul multiprocessing
nebo subprocess) a pak bych mu posílal signály SIGSTOP a SIGCONT přes
funkci os.kill(pid, sig). Kdyby mi připadalo, že už běží nějak moc
dlouho, prostě bych ho vypnul přes signál TERM, pokud by nereagoval
(myslím, že se to může stát, když počítá např. 100000**10000000), tak
signál KILL. Protože by uživatel nemohl změnit chování při přijetí
signálů (protože by nemohl importovat potřebný modul), mělo by to
fungovat celkem spolehlivě. Maximální velikost použité paměti lze
omezit přes modul resource.

2010/5/5 Jan Janech<de...@atlas.sk>:
Potesim Vas, z evalu ani z execu sa pokial mi je znamo utiect neda. Teda ak
to clovek vie spravit.

staci nieco taketo:

eval(superNebezpecnyKod, {'__builtins__': {}}, {})

alebo

exec superNebezpecnyKod in {'__builtins__': {}}, {}

zavisi ale od toho, akym situaciam sa chcete vyhnut.

coho sa nezbavite (ani evalom) je napr nekonecna rekurzia:

superNebezpecnyKod='(lambda x=(lambda y: y(y)): x(x))()'

to az tak neboli, ak nemate povolenu nejaku prilis hlboku uroven rekurzie.

co tak ale nekonecny cyklus?

superNebezpecnyKod='(lambda x=[1]: [x.append(1) for i in x])()'

alebo supernarocne operacie?

superNebezpecnyKod='2**10000000000000000'

vela stastia pri vyuzivani evalu a execu :D

Jan Janech


On 05/05/10 14:26, Hynek Fabian wrote:

Jan Janech (středa 05 Květen 2010 13:08:49):

Dovolim si oponovat. Vsetko co sa da v pythone v exec spravit pre
narusenie bezpecnosti sa da spravit aj v eval.

Jak?

eval(x, {}, {})

Jakým X se dá z takové konstrukce utéci?
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python





--

____________________________
Ing. Jan Janech
Katedra softverovych technologii
Fakulta riadenia a informatiky
Zilinska Univerzita
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python





--

____________________________
Ing. Jan Janech
Katedra softverovych technologii
Fakulta riadenia a informatiky
Zilinska Univerzita
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem