svn commit: r372013 - in head/textproc/catdoc: . files

Dmitry Marakasov amdmi3 at FreeBSD.org
Sat Nov 1 13:59:43 UTC 2014


Author: amdmi3
Date: Sat Nov  1 13:59:42 2014
New Revision: 372013
URL: https://svnweb.freebsd.org/changeset/ports/372013
QAT: https://qat.redports.org/buildarchive/r372013/

Log:
  - Fix UB which leads to guaranteed crash when built with clang 3.4.1+ (e.g. on FreeBSD 10.1+)
  
  Reported by:	Alex Petrov

Added:
  head/textproc/catdoc/files/patch-src__fileutil.c   (contents, props changed)
Modified:
  head/textproc/catdoc/Makefile

Modified: head/textproc/catdoc/Makefile
==============================================================================
--- head/textproc/catdoc/Makefile	Sat Nov  1 13:49:40 2014	(r372012)
+++ head/textproc/catdoc/Makefile	Sat Nov  1 13:59:42 2014	(r372013)
@@ -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 \

Added: head/textproc/catdoc/files/patch-src__fileutil.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/textproc/catdoc/files/patch-src__fileutil.c	Sat Nov  1 13:59:42 2014	(r372013)
@@ -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);


More information about the svn-ports-all mailing list