Re: buffer overrun (Re: Nowy bug w Outlooku...)

Autor: Slawomir Marczynski (slawek_at_arcadia.tuniv.szczecin.pl)
Data: Mon 24 Jul 2000 - 10:47:22 MET DST


Andrzej Lewandowski (lewandoREMOVE_at_attglobal.net) wrote:
: Jezyki C i C++ maja taka cenna wlasciwosc ze nie sprawdzaja czy nie
: wykonuje sie operacji nielegalnej, np. siegania po element tablicy z
: niewlasciwym indeksem.

To naprawde /moze/ byc cenna mozliwosc.

Nadal jednak nie rozumiem, jak w dowolnym jezyku programowania mozna
- piszac program obslugi poczty elektronicznej, z natury rzeczy narazony
na ataki (chyba juz przed 1970 wiadomo bylo o ich mozliwosciach) -
nie sprawdzac danych wejsciowych?

  Jezeli dokladnie sprawdzi sie dane wejsciowe, to zgodnie z paradygmatem,
wiedzac jakie maja byc wyniki mozna pisac program. I nic tu nie ma do
rzeczy jezyk programowania. Po prostu niechlujstwo programistow
plus wykorzystywanie funkcji bibliotecznych bez przeczytania ich
specyfikacji... lub chec zapewnienia sobie trapdoors z glupawym zalozeniem
ze nikt inny tego nie zauwazy.

  Zalozmy, ze funkcja get() dostarcza kolejnego znaku lub specjalny symbol
EOF gdy juz wszystkie znaki zostaly wczytane. Niech mnie ktos oswieci, jak
mozna nadpisac bufor o nazwie buffer w przykladzie jak ponizej ????

Moim zdaniem mozna sie @$@#%@!%$!@%, a nic sie nie da zrobic. Czy gostki
z MS sa az tak tepe, aby uproscic sobie od while(c != EOF) ????

  int i = 0;
  char buffer[80*sizeof(char)] = "";
  while(i < sizeof(buffer) - sizeof(char))
  {
    char c = get();
    if(c == EOF) break;
    buffer[i++] = get();
  }

--
Slawomir Marczynski (Mr) 
Institute of Physics, Technical University of Szczecin
Al. Piastow 48/49, 70-310 Szczecin, Poland
slawek_at_arcadia.inter.tuniv.szczecin.pl, tel:+(048-91)-4494056 


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 20:24:00 MET DST