- Fix UB which leads to guaranteed crash when built with clang 3.4.1+ (e.g. on FreeBSD 10.1+)
Reported by: Alex Petrov
This commit is contained in:
parent
242a0d4308
commit
46b5ac239b
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=372013
2 changed files with 61 additions and 1 deletions
|
@ -3,7 +3,7 @@
|
|||
|
||||
PORTNAME= catdoc
|
||||
PORTVERSION= 0.94.2
|
||||
PORTREVISION= 2
|
||||
PORTREVISION= 3
|
||||
CATEGORIES= textproc
|
||||
MASTER_SITES= http://mirror.amdmi3.ru/distfiles/ \
|
||||
LOCAL/amdmi3 \
|
||||
|
|
60
textproc/catdoc/files/patch-src__fileutil.c
Normal file
60
textproc/catdoc/files/patch-src__fileutil.c
Normal file
|
@ -0,0 +1,60 @@
|
|||
diff --git src/fileutil.c src/fileutil.c
|
||||
index d902a6a..6afddec 100644
|
||||
--- src/fileutil.c
|
||||
+++ src/fileutil.c
|
||||
@@ -71,13 +71,12 @@ char *find_file(char *name, const char *path)
|
||||
char *q;
|
||||
char path_buf[PATH_BUF_SIZE];
|
||||
char dir_sep[2]={DIR_SEP,0};
|
||||
- for (p=path;p;p=q+1) {
|
||||
+ for (p=path;p;) {
|
||||
q=strchr(p,LIST_SEP);
|
||||
|
||||
if (q) {
|
||||
if (!prepare_path_buf(path_buf,p,q)) continue;
|
||||
} else {
|
||||
- q--;
|
||||
if (!prepare_path_buf(path_buf,p,p+strlen(p))) continue;
|
||||
}
|
||||
strcat(path_buf,dir_sep); /* always one char */
|
||||
@@ -88,6 +87,11 @@ char *find_file(char *name, const char *path)
|
||||
free(name);
|
||||
return strdup(path_buf);
|
||||
}
|
||||
+ if (q) {
|
||||
+ p = q + 1;
|
||||
+ } else {
|
||||
+ p = NULL;
|
||||
+ }
|
||||
}
|
||||
/* if we are here, nothing found */
|
||||
free(name);
|
||||
@@ -186,7 +190,7 @@ void list_charsets(void) {
|
||||
int count,glob_flags=GLOB_ERR;
|
||||
#endif
|
||||
char **ptr;
|
||||
- for (p=charset_path;p;p=q+1) {
|
||||
+ for (p=charset_path;p;) {
|
||||
q=strchr(p,LIST_SEP);
|
||||
|
||||
if (q) {
|
||||
@@ -197,7 +201,6 @@ void list_charsets(void) {
|
||||
strncpy(path_buf,p,q-p);
|
||||
path_buf[q-p]=0;
|
||||
} else {
|
||||
- q--;
|
||||
if (strlen(p)>=PATH_BUF_SIZE) continue;
|
||||
strcpy(path_buf,p);
|
||||
}
|
||||
@@ -244,6 +247,11 @@ void list_charsets(void) {
|
||||
}
|
||||
glob_flags|=GLOB_APPEND;
|
||||
#endif
|
||||
+ if (q) {
|
||||
+ p = q + 1;
|
||||
+ } else {
|
||||
+ p = NULL;
|
||||
+ }
|
||||
}
|
||||
#ifdef __MSDOS__
|
||||
fputs("utf-8\n",stdout);
|
Loading…
Reference in a new issue