Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2007, 15:07   #1
magagna
Junior Member
 
Iscritto dal: Jul 2007
Messaggi: 9
[C] problema strcpy ??

sto scrivendo una libreria per un progetto. Questa libreria, sostanzialmente, è composta da un set di funzioni che servono a gestire una lista ordinata.
Ho una funzione, lmake, che crea un nodo di questa lista riempiendo opportunamente i vari campi. Andando a provare, con un banale programma, queste funzioni mi sono accorto che proprio la più insospettabile, lmake appunto, non funziona. O meglio non inizializza alcuni campi come dovrebbe.

DEFINIZIONE NODO:

struct lnode{
char name[MAXB];
char pass[MAXB];
char pid[MAXB];
int stat;
struct pnode *pends;
struct lnode *next;
};
typedef struct lnode LNODE;

LMAKE:

LNODE *lmake(char *name,char *pass){
printf("%s %s\n",name,pass);
LNODE *x=(LNODE *)malloc(sizeof(LNODE));

strcpy(x->name,name);
strcpy(x->pass,name);
strcpy(x->pid,"");
x->stat=disconnesso;

x->pends=NULL;
x->next=NULL;
printf("%s %s\n",x->name,x->pass);
return x;
}

PROGRAMMA DI PROVA:

int main(){
LNODE *n1,*n2,*n3;
PNODE *t;
char buff[MAXB];

n1=lmake("nino","123");
n2=lmake("mara","456");
n3=lmake("poppy","789");


scanf("%s",buff);
return 0;
}

come si può vedere io mi faccio stampare, appena entra in lmake, i parametri che riceve (username e password). Mi faccio poi stampare i campi immediatamente prima che la funzione termini. L'output è assai strano:

nino 123
nn n
mara 456
mm m
poppy 789
pp p

in sostanza l'input è coerente, ma nel campo viene copiato qualcosa di diverso...e sono due ore che sbatto la testa su questo codice di 3 righe. Dopo un pò mi sono deciso a chiedere a chiunque abbia esperienza col C, perchè sicuro è una di quelle cazzate inumane che ignoro totalmente, e senza scusanti.

Vi ringrazio comunque per l'attenzione, anche se avrete letto solo le prime 3 righe

Ultima modifica di magagna : 12-07-2007 alle 15:38.
magagna è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 15:16   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da magagna Guarda i messaggi
in sostanza l'input è coerente, ma nel campo viene copiato qualcosa di diverso
A parte il fatto che copi il name nel campo pass. Ma per il resto quel pezzo di codice mi sembra corretto. Quanto vale MAXB?
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 15:20   #3
magagna
Junior Member
 
Iscritto dal: Jul 2007
Messaggi: 9
i due parametri di input della funzione, name e pass, vengono copiati rispettivamente in x->name e x->pass, o almeno questa sarebbe l'intenzione.

MAXB vale 15
magagna è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 15:26   #4
magagna
Junior Member
 
Iscritto dal: Jul 2007
Messaggi: 9
ho compilato e provato sia con gcc sotto Ubuntu, che con Dev-C++ sotto Windows e l'output è lo stesso...
magagna è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 15:50   #5
magagna
Junior Member
 
Iscritto dal: Jul 2007
Messaggi: 9
purtroppo sono una gran testa di C

avevi ragione a chiedermelo andbin, perchè ho sbagliato a scrivere MAXB. Io credevo fosse 15, in realtà avevo battuto solo 1.

Mea Culpa!

Ultima modifica di magagna : 12-07-2007 alle 15:53.
magagna è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 19:06   #6
maulattu
Senior Member
 
L'Avatar di maulattu
 
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
un consiglio: butta via la strcpy e usa la strncpy:
strcnpy(x->name,name, sizeof(x->name));
strcpy(x->pass,pass, sizeof(x->pass));
/*strcnpy(x->pid,""); */ memset((void *) x->pid, 0, sizeof(x->pid))

il 3° parametro indica quanti caratteri al massimo copiare nel primo parametro

se usi la strcpy e MAXDB è definito = 15, se io faccio una cosa del genere
strcpy(x->name, "123456789123456789123456789")
vai pure tranquillo che sporchi memoria col rischio di segmentation fault o bachi semi-impossibili da trovare

__________________
Ciao ciao cagnolino Billy
MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen.
XBOX Live GamerTag: InsaneMau
maulattu è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 19:32   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da maulattu Guarda i messaggi
un consiglio: butta via la strcpy e usa la strncpy
Il consiglio è più che giusto ... però si dovrebbe copiare un carattere in meno e assicurarsi che ci sia sempre il nullo finale. malloc non azzera la memoria e facendo come hai detto tu è possibile che la stringa non sia null terminated.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 19:37   #8
maulattu
Senior Member
 
L'Avatar di maulattu
 
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
Quote:
Originariamente inviato da andbin Guarda i messaggi
Il consiglio è più che giusto ... però si dovrebbe copiare un carattere in meno e assicurarsi che ci sia sempre il nullo finale. malloc non azzera la memoria e facendo come hai detto tu è possibile che la stringa non sia null terminated.
Codice:
Copies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.

No null-character is implicitly appended to the end of destination, so destination will only be null-terminated if the length of the C string in source is less than num.
hai ragione
al più si fa un bel memset della stringa e poi ci si copia dentro l'altra, mettendo sempre lo 0 alla fine:
string[sizeof(string) - 1] = 0;

ps: io non ho parlato di malloc
__________________
Ciao ciao cagnolino Billy
MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen.
XBOX Live GamerTag: InsaneMau
maulattu è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 19:50   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da maulattu Guarda i messaggi
ps: io non ho parlato di malloc
Io mi riferivo al codice di magagna che usa malloc per allocare la struttura. Se avesse usato calloc, ad esempio, il blocco sarebbe azzerato e quindi basterebbe fare
strncpy(x->name, name, sizeof(x->name)-1);
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2007, 19:39   #10
maulattu
Senior Member
 
L'Avatar di maulattu
 
Iscritto dal: Mar 2005
Città: ~
Messaggi: 740
Quote:
Originariamente inviato da andbin Guarda i messaggi
Io mi riferivo al codice di magagna che usa malloc per allocare la struttura. Se avesse usato calloc, ad esempio, il blocco sarebbe azzerato e quindi basterebbe fare
strncpy(x->name, name, sizeof(x->name)-1);
ok
__________________
Ciao ciao cagnolino Billy
MacMini late 2009, 2.53GHz, 4GB ram, 320GB hard disk, Snow Leopard 10.8.2 - iPod Nano 6th gen.
XBOX Live GamerTag: InsaneMau
maulattu è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2007, 23:48   #11
magagna
Junior Member
 
Iscritto dal: Jul 2007
Messaggi: 9
vi ringrazio per i suggerimenti, ragazzi
magagna è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
I nuovi Samsung Galaxy Watch 9 si mostra...
Einsten aveva ragione, di nuovo: captate...
Top 10 offerte Amazon: 5 sono partite qu...
AI Conf 2026: l'intelligenza artificiale...
Samsung Galaxy S26 scende a 711,49€: un ...
Dopo il maxi blackout, la Spagna cambia ...
Costa meno di un MacBook e fa molto di p...
Ecco tutti i robot aspirapolvere rimasti...
Più partite da seguire in contemporanea?...
389€ sono veramente pochi per questo PC ...
Vesuvius Challenge: srotolato in digital...
Torna oggi a soli 101,79€ grazie a un co...
Steam Machine: addio al 4K 60 fps. Valve...
Cosa aumenterà di prezzo dopo com...
Altro che 2028: Micron ha blindato prezz...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v