- 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:
Dmitry Marakasov 2014-11-01 13:59:42 +00:00
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

View file

@ -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 \

View 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);