- plug a bunch of mem. leaks
from pterjan @ mandriva, via landry@
This commit is contained in:
parent
42771f89de
commit
4f8240b546
@ -1,9 +1,9 @@
|
||||
# $OpenBSD: Makefile,v 1.8 2007/08/30 13:04:15 jasper Exp $
|
||||
# $OpenBSD: Makefile,v 1.9 2007/11/20 21:05:30 jasper Exp $
|
||||
|
||||
COMMENT= widgets library
|
||||
|
||||
DISTNAME= Mowitz-0.3.0
|
||||
PKGNAME= ${DISTNAME:L}p0
|
||||
PKGNAME= ${DISTNAME:L}p1
|
||||
SHARED_LIBS += Mowitz 3.0 # .3.0
|
||||
CATEGORIES= x11 devel
|
||||
|
||||
|
191
x11/mowitz/patches/patch-Mowitz_MwFilesel_c
Normal file
191
x11/mowitz/patches/patch-Mowitz_MwFilesel_c
Normal file
@ -0,0 +1,191 @@
|
||||
$OpenBSD: patch-Mowitz_MwFilesel_c,v 1.1 2007/11/20 21:05:30 jasper Exp $
|
||||
--- Mowitz/MwFilesel.c.orig Thu Jan 16 21:31:13 2003
|
||||
+++ Mowitz/MwFilesel.c Tue Nov 20 21:54:19 2007
|
||||
@@ -80,7 +80,7 @@ getdirent(char ***ldirp, int *ndirp, char ***lfilep, i
|
||||
{
|
||||
DIR *dird;
|
||||
struct dirent *dire;
|
||||
- char fn[1024];
|
||||
+ char fn[PATH_MAX];
|
||||
struct stat buf;
|
||||
char **ldir = NULL, **lfile = NULL;
|
||||
int ndir = 0, mdir = 0, nfile = 0, mfile = 0;
|
||||
@@ -90,7 +90,10 @@ getdirent(char ***ldirp, int *ndirp, char ***lfilep, i
|
||||
return 1;
|
||||
}
|
||||
while ((dire = readdir(dird))) {
|
||||
- sprintf(fn, "%s/%s", path, dire->d_name);
|
||||
+ if (snprintf(fn, PATH_MAX, "%s/%s", path, dire->d_name) >= PATH_MAX) {
|
||||
+ fprintf(stderr, "Path too long %s/%s\n", path, dire->d_name);
|
||||
+ continue;
|
||||
+ }
|
||||
if ((stat(fn, &buf))) {
|
||||
fprintf(stderr, "Can't stat %s\n", fn);
|
||||
continue;
|
||||
@@ -169,13 +172,17 @@ static void make_dirmenu(char *);
|
||||
static void fsel_scan(void)
|
||||
{
|
||||
String string;
|
||||
- char dir[1024];
|
||||
+ char dir[PATH_MAX];
|
||||
char pattern[1024];
|
||||
char *pst;
|
||||
|
||||
if (files != NULL)
|
||||
freedirent(dirs, ndirs, files, nfiles);
|
||||
-
|
||||
+
|
||||
+ if (strnlen(MwLabelGet(fsel_dirbutton), PATH_MAX)>=PATH_MAX) {
|
||||
+ fprintf(stderr, "Path too long %s\n", MwLabelGet(fsel_dirbutton));
|
||||
+ return;
|
||||
+ }
|
||||
strcpy(dir, MwLabelGet(fsel_dirbutton));
|
||||
string = MwLabelGet(fsel_formatbutton);
|
||||
pst = strchr(string, '(');
|
||||
@@ -183,15 +190,20 @@ static void fsel_scan(void)
|
||||
/* apparently no pattern here; use foolproof default */
|
||||
strcpy(pattern, "*");
|
||||
} else {
|
||||
+ if (strnlen(pst+1, 1024) >= 1024) {
|
||||
+ fprintf(stderr, "Pattern too long %s\n", pattern);
|
||||
+ return;
|
||||
+ }
|
||||
strcpy(pattern, pst+1);
|
||||
if ((pst = strchr(pattern, ')')))
|
||||
*pst = '\0';
|
||||
}
|
||||
if (getdirent(&dirs, &ndirs, &files, &nfiles, dir, pattern)) {
|
||||
fprintf(stderr, "Grmbl. getdirent() failed\n");
|
||||
+ } else {
|
||||
+ make_files(files, nfiles);
|
||||
+ make_dirs(dirs, ndirs);
|
||||
}
|
||||
- make_files(files, nfiles);
|
||||
- make_dirs(dirs, ndirs);
|
||||
make_dirmenu(dir);
|
||||
}
|
||||
|
||||
@@ -248,22 +260,24 @@ static void file_select(Widget w, XtPointer client_dat
|
||||
|
||||
static void dir_select(Widget w, XtPointer client_data, XtPointer call_data)
|
||||
{
|
||||
- char path[1024];
|
||||
- char newpath[1024];
|
||||
+ char path[PATH_MAX];
|
||||
+ char newpath[PATH_MAX];
|
||||
|
||||
XawListReturnStruct *list_struct = (XawListReturnStruct *)call_data;
|
||||
String string = list_struct->string;
|
||||
|
||||
- sprintf(path, "%s/%s", MwLabelGet(fsel_dirbutton), string);
|
||||
-
|
||||
- if (!realpath(path, newpath))
|
||||
- fprintf(stderr, "Couldn't realpath %s\n", path);
|
||||
-
|
||||
- MwLabelSet(fsel_dirbutton, newpath);
|
||||
-
|
||||
- XawListUnhighlight(fsel_filelist);
|
||||
- XawListUnhighlight(fsel_dirlist);
|
||||
- fsel_scan();
|
||||
+ if(snprintf(path, PATH_MAX, "%s/%s", MwLabelGet(fsel_dirbutton), string) >= PATH_MAX) {
|
||||
+ fprintf(stderr, "Path too long %s/%s\n", MwLabelGet(fsel_dirbutton), string);
|
||||
+ } else {
|
||||
+ if (!realpath(path, newpath)) {
|
||||
+ fprintf(stderr, "Couldn't realpath %s\n", path);
|
||||
+ } else {
|
||||
+ MwLabelSet(fsel_dirbutton, newpath);
|
||||
+ XawListUnhighlight(fsel_filelist);
|
||||
+ XawListUnhighlight(fsel_dirlist);
|
||||
+ fsel_scan();
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
static void make_menu(char **menu_entry_names, Widget menu)
|
||||
@@ -299,17 +313,14 @@ static struct {
|
||||
|
||||
static void change_dir(Widget w, XtPointer client_data, XtPointer call_data)
|
||||
{
|
||||
- char path[1024];
|
||||
- char newpath[1024];
|
||||
+ char newpath[PATH_MAX];
|
||||
|
||||
- strcpy(path, (char *)client_data);
|
||||
-
|
||||
- if (!realpath(path, newpath))
|
||||
- fprintf(stderr, "Couldn't realpath %s\n", path);
|
||||
-
|
||||
- MwLabelSet(fsel_dirbutton, newpath);
|
||||
-
|
||||
- fsel_scan();
|
||||
+ if (!realpath((char *)client_data, newpath)) {
|
||||
+ fprintf(stderr, "Couldn't realpath %s\n", (char *)client_data);
|
||||
+ } else {
|
||||
+ MwLabelSet(fsel_dirbutton, newpath);
|
||||
+ fsel_scan();
|
||||
+ }
|
||||
}
|
||||
|
||||
static void make_dirmenu(char *dir)
|
||||
@@ -357,16 +368,33 @@ static int status;
|
||||
|
||||
static void fsel_done(Widget w, XtPointer client_data, XtPointer call_data)
|
||||
{
|
||||
- char path[1024], newpath[1024];
|
||||
+ char path[PATH_MAX], newpath[PATH_MAX];
|
||||
struct stat buf;
|
||||
String string;
|
||||
+ int failed = 0;
|
||||
XtVaGetValues(fsel_filetext,
|
||||
XtNstring, &string, (char *)0);
|
||||
- if (string[0] == '/') strcpy(path, string);
|
||||
- else sprintf(path, "%s/%s", MwLabelGet(fsel_dirbutton), string);
|
||||
- realpath(path, newpath);
|
||||
- if (!stat(newpath, &buf) &&
|
||||
- (S_IFDIR & buf.st_mode)) {
|
||||
+
|
||||
+ if (string[0] == '/') {
|
||||
+ if (strlen(string) >= PATH_MAX) {
|
||||
+ fprintf(stderr, "Filename too long %s\n", string);
|
||||
+ failed = 1;
|
||||
+ } else {
|
||||
+ strcpy(path, string);
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (snprintf(path, PATH_MAX, "%s/%s", MwLabelGet(fsel_dirbutton), string) >= PATH_MAX) {
|
||||
+ fprintf(stderr, "Path too long %s/%s\n", MwLabelGet(fsel_dirbutton), string);
|
||||
+ failed = 1;
|
||||
+ }
|
||||
+ }
|
||||
+ if(!failed && !realpath(path, newpath)) {
|
||||
+ newpath[0] = '\0';
|
||||
+ fprintf(stderr, "Couldn't realpath %s\n", path);
|
||||
+ failed = 1;
|
||||
+ }
|
||||
+ if (failed ||
|
||||
+ (!stat(newpath, &buf) && (S_IFDIR & buf.st_mode))) {
|
||||
MwLabelSet(fsel_dirbutton, newpath);
|
||||
XtVaSetValues(fsel_filetext,
|
||||
XtNstring, "", (char *)0);
|
||||
@@ -690,7 +718,7 @@ int MwFileselInput(Widget pw, char *path, char *name,
|
||||
String string;
|
||||
XtAppContext app_context = XtWidgetToApplicationContext(pw);
|
||||
int i;
|
||||
- char newpath[1024];
|
||||
+ char newpath[PATH_MAX];
|
||||
|
||||
if (!realpath(path, newpath))
|
||||
getcwd(newpath, sizeof newpath);
|
||||
@@ -744,5 +772,12 @@ int MwFileselInput(Widget pw, char *path, char *name,
|
||||
strcpy(path, MwLabelGet(fsel_dirbutton));
|
||||
strcpy(fmt, MwLabelGet(fsel_formatbutton));
|
||||
return status;
|
||||
+}
|
||||
+
|
||||
+size_t
|
||||
+strnlen (const char *string, size_t maxlen)
|
||||
+{
|
||||
+ const char *end = memchr (string, '\0', maxlen);
|
||||
+ return end ? (size_t) (end - string) : maxlen;
|
||||
}
|
||||
|
12
x11/mowitz/patches/patch-Mowitz_MwXFormat_c
Normal file
12
x11/mowitz/patches/patch-Mowitz_MwXFormat_c
Normal file
@ -0,0 +1,12 @@
|
||||
$OpenBSD: patch-Mowitz_MwXFormat_c,v 1.1 2007/11/20 21:05:30 jasper Exp $
|
||||
--- Mowitz/MwXFormat.c.orig Fri Nov 16 19:55:40 2007
|
||||
+++ Mowitz/MwXFormat.c Fri Nov 16 19:56:02 2007
|
||||
@@ -490,7 +490,7 @@ static XFontStruct *load_cached_font(char *result, cha
|
||||
if (!strcmp(loaded_fonts[i].name, result))
|
||||
return loaded_fonts[i].fs;
|
||||
}
|
||||
- loaded_fonts = MwRealloc(loaded_fonts, (i+1)*sizeof(*loaded_fonts));
|
||||
+ loaded_fonts = MwRealloc(loaded_fonts, (i+2)*sizeof(*loaded_fonts));
|
||||
loaded_fonts[i].name = MwStrdup(result);
|
||||
fs = XLoadQueryFont(dpy, result);
|
||||
if (fs == NULL) {
|
Loading…
Reference in New Issue
Block a user