@@ -210,7 +210,7 @@ LispPTR UFS_getfilename(LispPTR *args)
210210 * Now, we convert a file name back to Lisp format. The version field have not
211211 * to be converted. The fourth argument for lisppathname specifies it.
212212 */
213- if (lisppathname (file , lfname , 0 , 0 ) == 0 ) return (NIL );
213+ if (lisppathname (file , lfname , sizeof ( lfname ), 0 , 0 ) == 0 ) return (NIL );
214214
215215 STRING_BASE (args [2 ], base );
216216 len = strlen (lfname );
@@ -414,7 +414,7 @@ LispPTR UFS_directorynamep(LispPTR *args)
414414 if (!S_ISDIR (sbuf .st_mode )) return (NIL );
415415
416416 /* Convert Unix file naming convention to Xerox Lisp one. */
417- if (lisppathname (fullname , dirname , 1 , 0 ) == 0 ) return (NIL );
417+ if (lisppathname (fullname , dirname , sizeof ( dirname ), 1 , 0 ) == 0 ) return (NIL );
418418
419419 len = strlen (dirname );
420420 STRING_BASE (args [1 ], base );
@@ -846,6 +846,7 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
846846 * The lispname is used to determine which
847847 * character should be quoted in the result
848848 * Xerox Lisp pathname representation.
849+ * size_t lispnamesize size of storage available for lispname
849850 * int dirp If 1, fullname is a directory. If 0,
850851 * fullname is a file.
851852 * int versionp If 1, version field is also converted
@@ -872,7 +873,7 @@ int unixpathname(char *src, char *dst, size_t dstlen, int versionp, int genp)
872873 *
873874 */
874875
875- int lisppathname (char * fullname , char * lispname , int dirp , int versionp )
876+ int lisppathname (char * fullname , char * lispname , size_t lispnamesize , int dirp , int versionp )
876877{
877878 char * cp , * dp , * lnamep , * cnamep ;
878879 char namebuf [MAXPATHLEN ], fbuf [MAXPATHLEN ], ver [VERSIONLEN ];
@@ -983,7 +984,7 @@ int lisppathname(char *fullname, char *lispname, int dirp, int versionp)
983984 if (dirp ) {
984985 if (* (dp - 1 ) != '>' || * (dp - 2 ) == '\'' ) * dp ++ = '>' ;
985986 * dp = '\0' ;
986- strcpy (lispname , namebuf );
987+ strlcpy (lispname , namebuf , lispnamesize );
987988 return (1 );
988989 }
989990
@@ -1047,7 +1048,7 @@ int lisppathname(char *fullname, char *lispname, int dirp, int versionp)
10471048 * or not. If extension field is not included, we have to add a period
10481049 * to specify empty extension field.
10491050 */
1050- strcpy (fbuf , namebuf );
1051+ strlcpy (fbuf , namebuf , sizeof ( fbuf ) );
10511052 dp = cp = fbuf ;
10521053 while (* cp ) {
10531054 switch (* cp ) {
@@ -1090,15 +1091,15 @@ int lisppathname(char *fullname, char *lispname, int dirp, int versionp)
10901091 if (versionp && * ver != '\0' ) {
10911092 conc_name_and_version (fbuf , ver , namebuf , MAXPATHLEN );
10921093 } else {
1093- strcpy (namebuf , fbuf );
1094+ strlcpy (namebuf , fbuf , sizeof ( namebuf ) );
10941095 }
10951096
10961097 /*
10971098 * Now, it's time to convert the version field.
10981099 */
10991100 if (!dirp && versionp ) UnixVersionToLispVersion (namebuf , 0 );
11001101
1101- strcpy (lispname , namebuf );
1102+ strlcpy (lispname , namebuf , lispnamesize );
11021103 return (1 );
11031104}
11041105
@@ -1189,10 +1190,10 @@ int quote_fname(char *file)
11891190 if (* ver != '\0' ) {
11901191 conc_name_and_version (fbuf , ver , namebuf , sizeof (namebuf ));
11911192 } else {
1192- strcpy (namebuf , fbuf );
1193+ strlcpy (namebuf , fbuf , sizeof ( namebuf ) );
11931194 }
11941195 UnixVersionToLispVersion (namebuf , 1 );
1195- strcpy (file , namebuf );
1196+ strlcpy (file , namebuf , sizeof ( file ) );
11961197 return (1 );
11971198}
11981199
0 commit comments