Newsgroup: it.comp.os.linux.development
Titolo: Libc : Strano bug ?

Salve... Quasi casualmente, mi sono reso conto di un possibile bug nelle
Libc (ver. 2.1.92) a riguardo di scanf ed altre funzioni di input da
stdin. Provando a premere "CTRL + 4" al prompt di scanf, infatti, i miei
programmi escono con un sigsegv originato da libc. Lo stesso problema si
riscontra in un certo numero di tool di sistema (grep, per esempio) e
altro software GPL che usa conio come libreria di input (DungeonCrawl). Se
volete, potete provare a replicare l'errore con un microprogramma che
esegua banalmente un solo scanf
#include <stdio.h>
int main(int argc,char *argv[]) {
	char dummy[256];
	scanf("%s",&dummy);
	return 0;
	}
... E' un bug, o mi sono perso qualcosa ? Saluti,
|~~~~~~| 
|(O>   |\  Fabio Cavaliere (Homebrew apprentice & GLUG member)
|//\   | | e-mail > 
fa...@urania.fisica.unige.it
|V_/_  | | e-mail2 > 
cava...@server3.fisica.unige.it
|######|-  GLUG on the Web : 
http://genova.linux.it
 
+------+

         scanf("%s",&dummy);
		     ^ questo non ci vuole
btw, io non ho questo problema, ma uso le glibc 2.1.3
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se alla sera, dopo una strepitosa vittoria, guardandoti allo
specchio dovessi notare un secondo paio di palle, che il tuo 
cuore non si riempia d'orgoglio, perche' vuol dire che ti 
stanno inculando -- Saggio Cinese

	scanf("%s",&dummy);
scanf( "%s", dummy ) ;
Anche se in questo caso non dovrebbe crearti grossi problemi (perche'
l'indirizzo dell'array e quello del primo elemento, a meno del tipo
del puntatore, si equivalgono).  In generale, e' bene sapere che gli
array decadono in puntatori al loro primo elemento e quindi non e'
necessario utilizzare l'operatore address-of in casi come il tuo.
Tieni anche presente che la tua scanf e' potenzialmente pericolosa.
Se ho un input di piu' di 255 caratteri ?
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 


 programmi escono con un sigsegv originato da libc.
Non e' un bug. CTRL 4 fa generare un SIGQUIT, non SIGSEGV. Puoi farlo
anche con CRTL \.
-- 
Fabio Bonelli  fabio161616(at)
libero.it
 blackmagic(at)
penguinpowered.com
Unix Wizard, (n): Someone who can type `cat > /unix` and get away with it!

 anche con CRTL \.
Grazie per la spiegazione (Non capisco perche' genera un core, ma almeno
so che non c'e' nulla di strano...) ! Ciao,


 Ciao,
Ciao
-- 
Fabio Bonelli  fabio161616(at)
libero.it
 blackmagic(at)
penguinpowered.com
To iterate is human; to recurse, is divine.

 CTRL+4 => sigquit + core dump).
Control + 4 genera un SIGQUIT, che sulla mia woody di casa semplicemente mi fa
uscire il programma con un bel Quit (ottenuto con entrambi i tuoi esempi)
senza core dump. 
Il bug pertanto e` dei settaggi del sistema che genera i core quando non
dovrebbe.
Ciao
-- 
Simone Piccardi
Microsoft is NOT the answer. Microsoft is the Question.
The answer is: "NO!"

 dovrebbe.
da quel che leggo io invece il core deve essere generato:
(da man 7 signal)
       Signal     Value     Action   Comment
       -------------------------------------------------------------------------
       [...]
       SIGQUIT       3        C      Quit from keyboard
       [...]
       C      Default action is to terminate the process and dump
              core.
-- 
addio, e grazie per tutto il pesce

 (da man 7 signal)
Hai ragione, ma a quanto pare debian setta la bash per non generare i core
file. Tutto sommato condivido la scelta (se mi servono li abilito).
