|
|
42d3218 |
Patch by Guillem Jover <guillem@debian.org> for arj <= 3.10.22, to
|
|
|
42d3218 |
use a safe strcpy for overlapping strings, among others fixes a build
|
|
|
42d3218 |
problem with a mangled generated .c file by msgbind (thus FTBFS), and
|
|
|
42d3218 |
CRC errors at run-time. For further information, please have a look
|
|
|
42d3218 |
to http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=590354
|
|
|
42d3218 |
|
|
|
42d3218 |
---
|
|
|
42d3218 |
arj.c | 2 +-
|
|
|
42d3218 |
arjdata.c | 9 +--------
|
|
|
42d3218 |
ea_mgr.c | 2 +-
|
|
|
42d3218 |
misc.h | 4 ++++
|
|
|
42d3218 |
msgbind.c | 2 +-
|
|
|
42d3218 |
packager.c | 2 +-
|
|
|
42d3218 |
6 files changed, 9 insertions(+), 12 deletions(-)
|
|
|
42d3218 |
|
|
|
42d3218 |
--- a/arjdata.c
|
|
|
42d3218 |
+++ b/arjdata.c
|
|
|
42d3218 |
@@ -204,13 +204,6 @@ void date_fmt(char *dest)
|
|
|
42d3218 |
#endif
|
|
|
42d3218 |
}
|
|
|
42d3218 |
|
|
|
42d3218 |
-/* A safe strcpy() */
|
|
|
42d3218 |
-
|
|
|
42d3218 |
-static void safe_strcpy(char *dest, char *src)
|
|
|
42d3218 |
-{
|
|
|
42d3218 |
- memmove(dest, src, strlen(src)+1);
|
|
|
42d3218 |
-}
|
|
|
42d3218 |
-
|
|
|
42d3218 |
/* Context substitution routine */
|
|
|
42d3218 |
|
|
|
42d3218 |
char *expand_tags(char *str, int limit)
|
|
|
42d3218 |
@@ -232,7 +225,7 @@ char *expand_tags(char *str, int limit)
|
|
|
42d3218 |
{
|
|
|
42d3218 |
if(*(p+1)==TAG_CHAR)
|
|
|
42d3218 |
{
|
|
|
42d3218 |
- strcpy(p, p+1);
|
|
|
42d3218 |
+ safe_strcpy(p, p+1);
|
|
|
42d3218 |
p++;
|
|
|
42d3218 |
}
|
|
|
42d3218 |
else if(*(p+1)==TAG_SPECIAL_BEGIN&&(et=strchr(p+3, TAG_SPECIAL_END))!=NULL)
|
|
|
42d3218 |
--- a/arj.c
|
|
|
42d3218 |
+++ b/arj.c
|
|
|
42d3218 |
@@ -1169,7 +1169,7 @@ int main(int argc, char *argv[])
|
|
|
42d3218 |
if(strlen(tmp_ptr)<=121)
|
|
|
42d3218 |
tmp_ptr[0]='\0';
|
|
|
42d3218 |
else if(tmp_ptr[120]==' ')
|
|
|
42d3218 |
- strcpy(tmp_ptr, tmp_ptr+121);
|
|
|
42d3218 |
+ safe_strcpy(tmp_ptr, tmp_ptr+121);
|
|
|
42d3218 |
}
|
|
|
42d3218 |
if(cmd==ARJ_CMD_ORDER&&strpbrk(tmp_ptr, wildcard_pattern)!=NULL)
|
|
|
42d3218 |
error(M_ORDER_WILDCARD);
|
|
|
42d3218 |
--- a/ea_mgr.c
|
|
|
42d3218 |
+++ b/ea_mgr.c
|
|
|
42d3218 |
@@ -696,7 +696,7 @@ int resolve_longname(char *dest, char *n
|
|
|
42d3218 |
tmp_name[st_len]='\0';
|
|
|
42d3218 |
if(tmp_name[0]==0xFD&&tmp_name[1]==0xFF)
|
|
|
42d3218 |
{
|
|
|
42d3218 |
- strcpy(tmp_name, (char *)tmp_name+4);
|
|
|
42d3218 |
+ safe_strcpy(tmp_name, (char *)tmp_name+4);
|
|
|
42d3218 |
st_len-=4;
|
|
|
42d3218 |
}
|
|
|
42d3218 |
if(st_len==0||st_len+entry>=FILENAME_MAX)
|
|
|
42d3218 |
--- a/msgbind.c
|
|
|
42d3218 |
+++ b/msgbind.c
|
|
|
42d3218 |
@@ -578,7 +578,7 @@ int main(int argc, char **argv)
|
|
|
42d3218 |
}
|
|
|
42d3218 |
strcat(pool[tpool].data, msgname);
|
|
|
42d3218 |
strcat(pool[tpool].data, ", ");
|
|
|
42d3218 |
- strcpy(msg_buffer, msg_buffer+1);
|
|
|
42d3218 |
+ safe_strcpy(msg_buffer, msg_buffer+1);
|
|
|
42d3218 |
buf_len=strlen(msg_buffer);
|
|
|
42d3218 |
msg_buffer[--buf_len]='\0';
|
|
|
42d3218 |
patch_string(msg_buffer);
|
|
|
42d3218 |
--- a/packager.c
|
|
|
42d3218 |
+++ b/packager.c
|
|
|
42d3218 |
@@ -347,7 +347,7 @@ int main(int argc, char **argv)
|
|
|
42d3218 |
expand_tags(buf, sizeof(buf)-1);
|
|
|
42d3218 |
if((p=strchr(buf, '.'))!=NULL)
|
|
|
42d3218 |
{
|
|
|
42d3218 |
- strcpy(p, p+1);
|
|
|
42d3218 |
+ safe_strcpy(p, p+1);
|
|
|
42d3218 |
if((p=strchr(buf, '.'))!=NULL)
|
|
|
42d3218 |
*p='\0';
|
|
|
42d3218 |
}
|
|
|
42d3218 |
--- a/misc.h
|
|
|
42d3218 |
+++ b/misc.h
|
|
|
42d3218 |
@@ -11,6 +11,10 @@
|
|
|
42d3218 |
#include "arjtypes.h"
|
|
|
42d3218 |
#include "filelist.h"
|
|
|
42d3218 |
|
|
|
42d3218 |
+/* A safe strcpy() */
|
|
|
42d3218 |
+
|
|
|
42d3218 |
+#define safe_strcpy(dest, src) memmove(dest, src, strlen(src)+1);
|
|
|
42d3218 |
+
|
|
|
42d3218 |
/* ASCIIZ string copy macro */
|
|
|
42d3218 |
|
|
|
42d3218 |
#define strcpyn(dest, src, n) \
|