[python] Buffer overflow na Win7?

slush slush na centrum.cz
Čtvrtek Červenec 15 11:35:04 CEST 2010


> On to ale asi není "obyčejný příklad".  Problém je asi v tom a+
> režimu (stejně se to chová i při w+) a v současném použití .read().
> Dokumentace říká:
>
>    Note: This function is simply a wrapper for the underlying fread()
>   C function, and will behave the same in corner cases, such as
>   whether the EOF value is cached.
>
> To znamená, že to může mít co do činění s použitím vyrovnávacího
> bufferu, který může být v Linuxu a pod Windows obsluhován jinak

Takze to znamena, ze Windowsi fread() "obsahuje" buffer overflow? OK,
chapu, nemusi to byt chyba pythonu, ale v takovem pripade to je snad
jeste horsi.

Co se tyka toho 'a+', zkousel jsem to i s jinymi R/W mody, ale
vysledek stejny. Znamena to, ze Windows ma z nejakeho duvodu problem s
"obousmerne" otevrenym souborem? Bavil jsem se o tom s kolegou
javistou, ktery tvrdi, ze treba v Jave vubec koncept R/W souboru neni
(udajne jsou jen R nebo W streamy). Tak me napadlo, ze to je proste
jejich "workaround" pro platformove specificke problemy s praci se
soubory.

> a díky fread() a zmíněným hraničním případům se to tedy může
> jinak chovat. Zkus tohle:
>
> t = open('blabla.txt', 'a+', buffering=0)
> t.write("Lorem ipsum dolor sit amet")
> ## t.seek(0)
> print t.read()
> t.close()

Funguje. Musim rict "bohuzel", protoze duvodu, proc by melo zapnute
bufferovani preskakovat EOF nerozumim. Taky nevidim souvislost, proc
problem resi preseekovani na aktualni pozici. Budu muset jeste
popremyslet, ktery hack je mensi zlo.

Moc diky za info.
Marek


Další informace o konferenci Python