Lines 830-838
find_files(name, v_filec, v_filev)
Link Here
|
830 |
DIRENTRY *dp; |
830 |
DIRENTRY *dp; |
831 |
struct stat tmp_stbuf, arc_stbuf, fil_stbuf; |
831 |
struct stat tmp_stbuf, arc_stbuf, fil_stbuf; |
832 |
|
832 |
|
833 |
strcpy(newname, name); |
833 |
strncpy(newname, name, sizeof(newname)); |
|
|
834 |
newname[sizeof(newname)-1] = 0; |
834 |
len = strlen(name); |
835 |
len = strlen(name); |
835 |
if (len > 0 && newname[len - 1] != '/') |
836 |
if (len > 0 && newname[len - 1] != '/' && len < (sizeof(newname)-1)) |
836 |
newname[len++] = '/'; |
837 |
newname[len++] = '/'; |
837 |
|
838 |
|
838 |
dirp = opendir(name); |
839 |
dirp = opendir(name); |
Lines 846-851
find_files(name, v_filec, v_filev)
Link Here
|
846 |
|
847 |
|
847 |
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { |
848 |
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { |
848 |
n = NAMLEN(dp); |
849 |
n = NAMLEN(dp); |
|
|
850 |
if (len >= (sizeof(newname)-1) || |
851 |
(len+n) >= (sizeof(newname)-1) || |
852 |
n <= 0 || |
853 |
(len+n) <= 0) |
854 |
break; |
849 |
strncpy(newname + len, dp->d_name, n); |
855 |
strncpy(newname + len, dp->d_name, n); |
850 |
newname[len + n] = '\0'; |
856 |
newname[len + n] = '\0'; |
851 |
if (GETSTAT(newname, &fil_stbuf) < 0) |
857 |
if (GETSTAT(newname, &fil_stbuf) < 0) |
Lines 903-909
build_temporary_name()
Link Here
|
903 |
strcpy(temporary_name, TMP_FILENAME_TEMPLATE); |
909 |
strcpy(temporary_name, TMP_FILENAME_TEMPLATE); |
904 |
} |
910 |
} |
905 |
else { |
911 |
else { |
906 |
sprintf(temporary_name, "%s/lhXXXXXX", extract_directory); |
912 |
snprintf(temporary_name, sizeof(temporary_name), |
|
|
913 |
"%s/lhXXXXXX", extract_directory); |
907 |
} |
914 |
} |
908 |
#ifdef MKSTEMP |
915 |
#ifdef MKSTEMP |
909 |
mkstemp(temporary_name); |
916 |
mkstemp(temporary_name); |
Lines 913-922
build_temporary_name()
Link Here
|
913 |
#else |
920 |
#else |
914 |
char *p, *s; |
921 |
char *p, *s; |
915 |
|
922 |
|
916 |
strcpy(temporary_name, archive_name); |
923 |
strncpy(temporary_name, archive_name, sizeof(temporary_name)); |
|
|
924 |
temporary_name[sizeof(temporary_name)-1] = 0; |
917 |
for (p = temporary_name, s = (char *) 0; *p; p++) |
925 |
for (p = temporary_name, s = (char *) 0; *p; p++) |
918 |
if (*p == '/') |
926 |
if (*p == '/') |
919 |
s = p; |
927 |
s = p; |
|
|
928 |
|
929 |
if( sizeof(temporary_name) - ((size_t) (s-temporary_name)) - 1 |
930 |
<= strlen("lhXXXXXX")) |
931 |
exit(-1); |
932 |
|
920 |
strcpy((s ? s + 1 : temporary_name), "lhXXXXXX"); |
933 |
strcpy((s ? s + 1 : temporary_name), "lhXXXXXX"); |
921 |
#ifdef MKSTEMP |
934 |
#ifdef MKSTEMP |
922 |
mkstemp(temporary_name); |
935 |
mkstemp(temporary_name); |
Lines 1052-1058
open_old_archive()
Link Here
|
1052 |
|
1065 |
|
1053 |
if (open_old_archive_1(archive_name, &fp)) |
1066 |
if (open_old_archive_1(archive_name, &fp)) |
1054 |
return fp; |
1067 |
return fp; |
1055 |
sprintf(expanded_archive_name, "%s.lzh", archive_name); |
1068 |
snprintf(expanded_archive_name, sizeof(expanded_archive_name), |
|
|
1069 |
"%s.lzh", archive_name); |
1056 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
1070 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
1057 |
archive_name = expanded_archive_name; |
1071 |
archive_name = expanded_archive_name; |
1058 |
return fp; |
1072 |
return fp; |
Lines 1061-1067
open_old_archive()
Link Here
|
1061 |
* if ( (errno&0xffff)!=E_PNNF ) { archive_name = |
1075 |
* if ( (errno&0xffff)!=E_PNNF ) { archive_name = |
1062 |
* expanded_archive_name; return NULL; } |
1076 |
* expanded_archive_name; return NULL; } |
1063 |
*/ |
1077 |
*/ |
1064 |
sprintf(expanded_archive_name, "%s.lzs", archive_name); |
1078 |
snprintf(expanded_archive_name, sizeof(expanded_archive_name), |
|
|
1079 |
"%s.lzs", archive_name); |
1065 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
1080 |
if (open_old_archive_1(expanded_archive_name, &fp)) { |
1066 |
archive_name = expanded_archive_name; |
1081 |
archive_name = expanded_archive_name; |
1067 |
return fp; |
1082 |
return fp; |