diff -uNr Xsi.orig/Wnn/etc/msg.c Xsi/Wnn/etc/msg.c --- Xsi.orig/Wnn/etc/msg.c Mon Feb 8 17:16:36 1999 +++ Xsi/Wnn/etc/msg.c Thu Apr 6 11:16:52 2000 @@ -318,7 +318,9 @@ break; if(*data == '#') continue; /* comment */ - for(dp = data ; *dp != '\t'; dp++); /* msg_id:message\n */ + for (dp = data; *dp && *dp != '\t'; dp++); /* msg_id:message\n */ + if (*dp == '\0') + continue; dp++; msg_byte += strlen(dp); msg_cnt++; @@ -340,7 +342,9 @@ break; if(*data == '#') continue; /* comment */ - for(dp = data ; *dp != '\t'; dp++); /* msg_id:message\n */ + for (dp = data; *dp && *dp != '\t'; dp++); /* msg_id:message\n */ + if (*dp == '\0') + continue; *dp = 0; dp++; bd->msg_id = atoi(data); diff -uNr Xsi.orig/Wnn/jserver/de.c Xsi/Wnn/jserver/de.c --- Xsi.orig/Wnn/jserver/de.c Fri May 14 16:07:42 1999 +++ Xsi/Wnn/jserver/de.c Thu Apr 6 14:03:52 2000 @@ -549,19 +553,55 @@ /*------*/ /** **/ -void -gets_cur(cp) -register char *cp; -{ - while((*cp++ = getc_cur()) != '\0'); +char * +gets_cur (buffer, buffer_size) + char *buffer; + size_t buffer_size; +{ + char *b; + + if (!buffer || !buffer_size) + return NULL; + + b = buffer; + + while (--buffer_size && (*b = getc_cur ()) != '\0') + b++; + + if (*b != '\0') + { + *b = '\0'; + while (getc_cur () != '\0') + ; + } + + return buffer; } -/** **/ -void -getws_cur(cp) -register w_char *cp; -{ - while((*cp++ = get2_cur()) != 0); + /** **/ +w_char * +getws_cur (buffer, buffer_size) + w_char *buffer; + size_t buffer_size; +{ + w_char *b; + + if (!buffer || !buffer_size) + return NULL; + + b = buffer; + + while (--buffer_size && (*b = get2_cur ()) != 0) + b++; + + if (*b != 0) + { + *b = 0; + while (getc_cur () != 0) + ; + } + + return buffer; } /** カレント・クライアントから2バイト取る **/ diff -uNr Xsi.orig/Wnn/jserver/de_header.h Xsi/Wnn/jserver/de_header.h --- Xsi.orig/Wnn/jserver/de_header.h Fri May 14 16:07:43 1999 +++ Xsi/Wnn/jserver/de_header.h Thu Apr 6 14:05:52 2000 @@ -193,6 +193,14 @@ extern char lang_dir[]; +#if !defined(__P) +#if (defined(__STDC_) && __STDC__) || defined(_cplusplus) +#define __P(p) p +#else +#define __P(p) () +#endif +#endif + /* atojis.c */ extern w_char *get_giji_knj(); extern void giji_hindoup(); @@ -226,8 +234,8 @@ /* de.c */ extern void del_client(); extern void demon_fin(); -extern void gets_cur(); -extern void getws_cur(); +extern char *gets_cur __P ((char *buffer, size_t buffer_size)); +extern w_char *getws_cur __P ((w_char * buffer, size_t buffer_size)); extern int get2_cur(); extern int get4_cur(); extern int getc_cur(); @@ -243,8 +251,8 @@ extern void js_kill(); /* dispatch.c */ extern void do_command(); -extern void get_file_name(); -extern void expand_file_name(); +extern char *get_file_name __P ((char *buffer, size_t buffer_size)); +extern char *expand_file_name __P ((char *buffer, size_t buffer_size)); extern void error_ret(); /* do_dic_env.c */ extern void js_dic_add(); diff -uNr Xsi.orig/Wnn/jserver/dispatch.c Xsi/Wnn/jserver/dispatch.c --- Xsi.orig/Wnn/jserver/dispatch.c Fri May 14 16:07:43 1999 +++ Xsi/Wnn/jserver/dispatch.c Thu Apr 6 14:30:51 2000 @@ -52,8 +52,6 @@ extern int cur_clp; -void expand_file_name(); - void do_command() { @@ -303,38 +301,61 @@ communication routine */ -void -get_file_name(p) register char *p; +char * +get_file_name (buffer, buffer_size) + char *buffer; + size_t buffer_size; { - gets_cur(p); - if(p[0] == 0){ - return; - } - expand_file_name(p); + buffer = gets_cur (buffer, buffer_size); + + if (!buffer || *buffer == '\0') + return NULL; + + return expand_file_name (buffer, buffer_size); } + +char * +expand_file_name (buffer, buffer_size) + char *buffer; + size_t buffer_size; + { + char *q; + + if (*buffer != '/') + { + char *path; + size_t path_len; + + path_len = strlen (jserver_dir) + strlen (buffer) + 2; + if (path_len > buffer_size) + return NULL; + + path = malloc (path_len); + if (!path) + return NULL; + + strcpy (path, jserver_dir); +/* strcat(path,c_c->user_name); */ + strcat (path, "/"); + strcat (path, buffer); + strcpy (buffer, path); -void -expand_file_name(p) -register char *p; -{ - char path[FILENAME]; - register char *q; - if(*p != '/'){ - strcpy(path,jserver_dir); -/* strcat(path,c_c->user_name); */ - strcat(path,"/"); - strcat(path, p); - strcpy(p,path); + free (path); } - for(q=p; *q++;) ; - q -=2; - for(;;){ + + for (q = buffer; *q++;) + ; + q -= 2; + + for(;;){ if(*q != '/') break; *q-- = '\0'; } /* fprintf(stderr,"file_name=%s\n",p); */ + + return buffer; } void diff -uNr Xsi.orig/Wnn/jserver/do_dic_env.c Xsi/Wnn/jserver/do_dic_env.c --- Xsi.orig/Wnn/jserver/do_dic_env.c Mon Feb 8 12:10:55 1999 +++ Xsi/Wnn/jserver/do_dic_env.c Thu Apr 6 14:32:06 2000 @@ -68,8 +68,8 @@ nice=get4_cur(); rw=get4_cur(); hrw=get4_cur(); - gets_cur(pw); - gets_cur(pw1); + gets_cur(pw, WNN_PASSWD_LEN); + gets_cur(pw1, WNN_PASSWD_LEN); rev=get4_cur(); /* rev is to add it as reverse dict */ error1("dic_add: eid=%d,fid=%d,hfid=%d",eid,fid,hfid); diff -uNr Xsi.orig/Wnn/jserver/do_dic_no.c Xsi/Wnn/jserver/do_dic_no.c --- Xsi.orig/Wnn/jserver/do_dic_no.c Fri May 14 16:07:43 1999 +++ Xsi/Wnn/jserver/do_dic_no.c Thu Apr 6 14:36:14 2000 @@ -132,9 +132,9 @@ w_char yomi[LENGTHYOMI], kanji[LENGTHKANJI], comment[LENGTHKANJI]; envi = get4_cur(); /* env_id */ dic_no=get4_cur(); - getws_cur(yomi); - getws_cur(kanji); - getws_cur(comment); + getws_cur(yomi, LENGTHYOMI); + getws_cur(kanji, LENGTHKANJI); + getws_cur(comment, LENGTHKANJI); hinsi=get4_cur(); hindo=get4_cur(); ret = word_add(envi, dic_no, yomi, kanji, hinsi, hindo, comment); @@ -170,7 +170,7 @@ int n; c_env=env[get4_cur()]; - getws_cur(yomi); + getws_cur(yomi, LENGTHYOMI); #ifdef CONVERT_from_TOP Strcpy(ryomi, yomi); #else @@ -199,7 +199,7 @@ get4_cur(); /* env_id */ dic_no = get4_cur(); - getws_cur(yomi); + getws_cur(yomi, LENGTHYOMI); #ifdef CONVERT_from_TOP Strcpy(ryomi, yomi); #else @@ -228,7 +228,7 @@ envi = get4_cur(); /* env_id */ dic_no = get4_cur(); entry = get4_cur(); - getws_cur(comment); + getws_cur(comment, LENGTHKANJI); ret = word_comment_set(envi, dic_no, entry, comment); if(ret == -1){ @@ -366,7 +366,7 @@ w_char name[WNN_HINSI_NAME_LEN]; int no; - getws_cur(name); + getws_cur(name, WNN_HINSI_NAME_LEN); if((no = wnn_hinsi_number(name)) == -1){ error_ret(); putc_purge(); return; @@ -389,7 +389,7 @@ envi = get4_cur(); dic_no = get4_cur(); - getws_cur(name); + getws_cur(name, WNN_HINSI_NAME_LEN); if(dic_no == -1){ /* fid = env[envi]->fzk_fid; */ @@ -497,7 +497,7 @@ envi = get4_cur(); dic_no = get4_cur(); - getws_cur(table); + getws_cur(table, HEAP_LEN); if(!dic_in_envp(dic_no,envi)){ diff -uNr Xsi.orig/Wnn/jserver/do_env.c Xsi/Wnn/jserver/do_env.c --- Xsi.orig/Wnn/jserver/do_env.c Mon Feb 8 12:10:56 1999 +++ Xsi/Wnn/jserver/do_env.c Thu Apr 6 14:38:52 2000 @@ -69,11 +69,9 @@ char tmp_buf[256]; version = get4_cur(); - gets_cur(tmp_buf); - tmp_buf[WNN_HOSTLEN-1] = '\0'; /* truncate by WNN_HOSTLEN */ + gets_cur (tmp_buf, WNN_HOSTLEN); strcpy(c_c->host_name, tmp_buf); - gets_cur(tmp_buf); - tmp_buf[WNN_ENVNAME_LEN-1] = '\0'; /* truncate by WNN_ENVNAME_LEN */ + gets_cur (tmp_buf, WNN_ENVNAME_LEN); strcpy(c_c->user_name, tmp_buf); error1("Inet user=%s@%s\n",c_c -> user_name,c_c->host_name); /* Moved to new_client, because del_client() will be called @@ -115,7 +113,7 @@ js_connect() {char n[256]; register int x; - gets_cur(n); + gets_cur(n, 256); x=conn1(n); if(x==-1){error_ret(); return;} put4_cur(x); @@ -174,7 +172,7 @@ { char n[256]; - gets_cur(n); + gets_cur(n, 256); if(find_env_by_name(n) != -1){ /* exist */ put4_cur(1); }else{ diff -uNr Xsi.orig/Wnn/jserver/do_filecom.c Xsi/Wnn/jserver/do_filecom.c --- Xsi.orig/Wnn/jserver/do_filecom.c Mon Feb 8 12:10:56 1999 +++ Xsi/Wnn/jserver/do_filecom.c Thu Apr 6 14:55:35 2000 @@ -82,7 +84,7 @@ {char path[FILENAME]; int x; int err = 0; err = envhandle(); - get_file_name(path); + get_file_name(path, FILENAME); if(err == -1){ error_ret(); return;} x=mkdir(path , MODE ); @@ -107,7 +109,7 @@ int eid; eid = envhandle(); - get_file_name(path); + get_file_name(path, FILENAME); if(eid == -1) {error_ret(); return;} if((fd = open(path , O_RDONLY)) >= 0){ @@ -132,7 +134,7 @@ int amode; envhandle(); amode=get4_cur(); - get_file_name(path); + get_file_name(path, FILENAME); #ifdef WRITE_CHECK check_backup(path); @@ -212,7 +214,7 @@ char n[FILENAME]; get4_cur(); /* env_id */ - get_file_name(n); + get_file_name(n, FILENAME); put4_cur(file_stat(n)); putc_purge(); @@ -339,9 +341,9 @@ env_id=get4_cur(); /* env_id */ fid=get4_cur(); - get_file_name(fn); - getws_cur(com); - gets_cur(hpasswd); + get_file_name(fn, FILE_NAME_L); + getws_cur(com, 1024); + gets_cur(hpasswd, WNN_PASSWD_LEN); if(find_fid_in_env(env_id,fid)==-1){ /* valid */ wnn_errorno=WNN_FID_ERROR; error_ret(); putc_purge(); return; @@ -400,10 +402,10 @@ w_char com[1024]; char passwd[WNN_PASSWD_LEN], hpasswd[WNN_PASSWD_LEN]; get4_cur(); /* env_id */ - get_file_name(fn); - getws_cur(com); - gets_cur(passwd); - gets_cur(hpasswd); + get_file_name(fn, FILE_NAME_L); + getws_cur(com, 1024); + gets_cur(passwd, WNN_PASSWD_LEN); + gets_cur(hpasswd, WNN_PASSWD_LEN); type = get4_cur(); if(type != WNN_REV_DICT && @@ -436,7 +438,7 @@ envi = get4_cur(); /* env_id */ fid = get4_cur(); - getws_cur(comment); + getws_cur(comment, WNN_COMMENT_LEN); if(find_fid_in_env(envi,fid)==-1){ /* valid */ wnn_errorno=WNN_FID_ERROR; @@ -536,7 +538,7 @@ int x; /* get4_cur(); env_id */ - get_file_name(n); + get_file_name(n, FILE_NAME_L); if((x=file_loaded(n)) < 0) put4_cur(-1); else put4_cur(x); @@ -640,7 +642,7 @@ put4_cur(1); putc_purge(); - gets_cur(n); + gets_cur(n, FILE_NAME_L); /* read file */ files[fid].localf= REMOTE; @@ -664,7 +666,7 @@ int env_id,fid; env_id=get4_cur(); /* env_id */ - get_file_name(n); + get_file_name(n, FILE_NAME_L); fid = file_loaded(n); if(fid == -1){ @@ -732,7 +734,7 @@ char n[FILE_NAME_L]; env_id=get4_cur(); /* env_id */ fid=get4_cur(); - get_file_name(n); + get_file_name(n, FILE_NAME_L); if(find_fid_in_env(env_id,fid)==-1){ /* valid */ wnn_errorno=WNN_FID_ERROR; @@ -885,8 +887,8 @@ char passwd[WNN_PASSWD_LEN]; int x; - get_file_name(n); - gets_cur(passwd); + get_file_name(n, FILE_NAME_L); + gets_cur(passwd, WNN_PASSWD_LEN); x = file_remove(n, passwd); if(x == -1){ @@ -948,8 +950,8 @@ envi = get4_cur(); /* env_id */ fid = get4_cur(); which = get4_cur(); - gets_cur(old); - gets_cur(new); + gets_cur(old, WNN_PASSWD_LEN); + gets_cur(new, WNN_PASSWD_LEN); if(find_fid_in_env(envi,fid) == -1){ wnn_errorno=WNN_FID_ERROR; diff -uNr Xsi.orig/Wnn/jserver/do_henkan1.c Xsi/Wnn/jserver/do_henkan1.c --- Xsi.orig/Wnn/jserver/do_henkan1.c Mon Feb 8 12:10:57 1999 +++ Xsi/Wnn/jserver/do_henkan1.c Thu Apr 6 15:01:50 2000 @@ -101,14 +108,15 @@ } static void -get_fzk_vec(hinsi,fzk,vec,vec1) +get_fzk_vec(hinsi,fzk,fzk_size,vec,vec1) register int *hinsi; register int *vec; register int *vec1; register w_char *fzk; +register size_t fzk_size; { *hinsi=get4_cur(); - getws_cur(fzk); + getws_cur(fzk, fzk_size); *vec=get4_cur(); *vec1=get4_cur(); } @@ -153,7 +161,7 @@ c_env=env[eid]; end = maxchg - 1; err = henkan_setup(); - get_fzk_vec(&hinsi,fzk,&vec,&vec1); + get_fzk_vec(&hinsi,fzk,FZK_L,&vec,&vec1); vec2 = get4_cur(); if (err == -1) { error_ret(); /* ERROR */ @@ -206,7 +214,7 @@ c_env=env[eid]; end = maxchg - 1; err = henkan_setup(); - get_fzk_vec(&hinsi,fzk,&vec,&vec1); + get_fzk_vec(&hinsi,fzk,FZK_L,&vec,&vec1); if (err == -1) { error_ret(); /* ERROR */ return; @@ -257,7 +265,7 @@ c_env=env[eid]; end = maxchg - 1; err = henkan_setup(); - get_fzk_vec(&hinsi,fzk,&vec,&vec1); + get_fzk_vec(&hinsi,fzk,FZK_L,&vec,&vec1); if (err == -1) { error_ret(); /* ERROR */ return; @@ -308,7 +316,7 @@ c_env=env[eid]; end = maxchg - 1; err = henkan_setup(); - get_fzk_vec(&hinsi,fzk,&vec,&vec1); + get_fzk_vec(&hinsi,fzk,FZK_L,&vec,&vec1); if (err == -1) { error_ret(); /* ERROR */ return; @@ -359,7 +367,7 @@ c_env=env[eid]; end = maxchg - 1; err = henkan_setup(); - get_fzk_vec(&hinsi,fzk,&vec,&vec1); + get_fzk_vec(&hinsi,fzk,FZK_L,&vec,&vec1); if (err == -1) { error_ret(); /* ERROR */ return; diff -uNr Xsi.orig/Wnn/jserver/initjserv.c Xsi/Wnn/jserver/initjserv.c --- Xsi.orig/Wnn/jserver/initjserv.c Mon Feb 8 12:11:01 1999 +++ Xsi/Wnn/jserver/initjserv.c Thu Apr 6 15:10:07 2000 @@ -216,7 +224,7 @@ while(fgets(data,256,fp ) != NULL){ num = sscanf(data,"%s %s",code,file ) ; if (strcmp(code, "readfile") == 0 && num == 2){ - read_default_file(file); + read_default_file(file, 256); } } fclose(fp); @@ -238,30 +246,36 @@ */ static int -read_default_file(n) -char *n; -{ - int fid; +read_default_file (buffer, buffer_size) + char *buffer; + size_t buffer_size; +{ + int fid; + buffer = expand_file_name (buffer, buffer_size); + if (!buffer) + { + printf ("filename too long. %s\n", buffer); + return (-1); + } - expand_file_name(n); - fid = file_loaded(n); + fid = file_loaded (buffer); if(fid == -1){ /* Not correct file */ - printf("Error reading %s\n", n); + printf("Error reading %s\n", buffer); return(-1); } if(FILE_NOT_READ != fid){ /* already read */ return(-1); } if((fid= get_new_fid()) == -1){ /* no more file */ - printf("Error reading %s\n", n); + printf("Error reading %s\n", buffer); return(-1); } files[fid].localf= LOCAL; - strcpy(files[fid].name, n); - printf("Reading %s\t Fid = %d\n", n, fid); + strcpy(files[fid].name, buffer); + printf("Reading %s\t Fid = %d\n", buffer, fid); if(read_file(&files[fid])==-1){ - printf("Error reading %s\n", n); + printf("Error reading %s\n", buffer); files[fid].ref_count= -1; /* fail */ return(-1); } --- Xsi.orig/Wnn/jutil/dic_head.c Mon Feb 8 12:15:22 1999 +++ Xsi/Wnn/jutil/dic_head.c Thu Apr 6 15:15:09 2000 @@ -62,7 +62,7 @@ input_header(ifpter, jtp, fhp) FILE *ifpter; struct JT *jtp; -struct file_head *fhp; +struct wnn_file_head *fhp; { if(input_file_header(ifpter, fhp) == -1 ||