diff --git a/src/sbbs3/userdat.c b/src/sbbs3/userdat.c index d405a97fec1a65146e93ade00e887c56c29f53e9..a873df79347d83ff3a07f04dfc0da8cdc131c882 100644 --- a/src/sbbs3/userdat.c +++ b/src/sbbs3/userdat.c @@ -523,6 +523,7 @@ int DLLCALL putusername(scfg_t* cfg, int number, char *name) char str[256]; int file; long length; + uint total_users; if (number<1) return(-1); @@ -531,6 +532,12 @@ int DLLCALL putusername(scfg_t* cfg, int number, char *name) if((file=nopen(str,O_RDWR|O_CREAT))==-1) return(-2); length=filelength(file); + + /* Truncate corrupted name.dat */ + total_users=lastuser(cfg); + if((uint)(length/(LEN_ALIAS+2))>total_users) + chsize(file,total_users*(LEN_ALIAS+2)); + if(length && length%(LEN_ALIAS+2)) { close(file); return(-3);