diff -Naur old/auto-apt-0.3.22/auto-apt-pkgcdb.c auto-apt-0.3.22/auto-apt-pkgcdb.c
--- old/auto-apt-0.3.22/auto-apt-pkgcdb.c	2012-01-24 16:36:20.043302663 +0100
+++ auto-apt-0.3.22/auto-apt-pkgcdb.c	2012-02-03 09:25:54.045858173 +0100
@@ -118,10 +118,37 @@
     return validchartab[(c & 0x0FF)];
 }
 
+static unsigned char *
+get_line(FILE *f)
+{
+    unsigned char *buf  = NULL;
+    char *new_buf  = NULL;
+    size_t buf_size = 0;
+    size_t last = 0;
+
+    while (!feof(f)) {
+	buf_size = buf_size ? buf_size * 2 : BUFSIZ;
+	new_buf = realloc(buf, buf_size);
+	if (new_buf == NULL) {
+	    free(buf);
+	    return NULL;
+	}
+	buf = new_buf;
+	if (fgets(buf + last, buf_size - last, f) == NULL) {
+	    free(buf);
+	    return NULL;
+	}
+	last = strlen(buf);
+	if (buf[last - 1] == '\n')
+	    return buf;
+    }
+    return buf;
+}
+
 int
 main(int argc, char **argv)
 {
-    unsigned char buf[PATH_MAX];
+    unsigned char *buf = NULL;
     char *cmd;
     char *dbfile = PKGCDB_FILE;
     char *pathlist = PKGCDB_PATH_LIST;
@@ -190,11 +217,14 @@
 	ta = 0.0;
 	min_t = 9999.9; max_t = 0.0;
 	max_file = NULL;
-	while (fgets(buf, sizeof buf - 1, stdin) != NULL) {
+	while (!feof(stdin)) {
 	    unsigned char *fname, *pkg;
 	    unsigned char *p;
 	    int nslash = 0;
 
+	    buf = get_line(stdin);
+	    if (buf == NULL)
+		break;
 	    if (profile)
 		timer_start(&tv);
 	    if (buf[strlen(buf)-1] == '\n') {
@@ -279,6 +309,7 @@
 	next_line:
 	    ;
 	}
+	free(buf);
 	if (profile)
 	    MSG(("total %f sec/%d = avg %f sec\n"
 		 "     min = %f, max = %f<%s>\n", 
diff -Naur old/auto-apt-0.3.22/pkgcdb/pkgtab.c auto-apt-0.3.22/pkgcdb/pkgtab.c
--- old/auto-apt-0.3.22/pkgcdb/pkgtab.c	2012-01-24 16:36:20.043302663 +0100
+++ auto-apt-0.3.22/pkgcdb/pkgtab.c	2012-01-30 09:05:07.883096049 +0100
@@ -39,7 +39,7 @@
 pkg_intern(StrTable st, char *pkg)
 {
     char *p;
-    char buf[PATH_MAX];
+    char *buf = NULL;
     int i = 0;
     pkg_id pkgid;
 
@@ -58,10 +58,14 @@
 	    continue;
 	}
 	p++;
-	assert(p - pkg < PATH_MAX);
+	buf = (char *)malloc(p - pkg + 1);
+	if (buf == NULL) {
+	    abort();
+	}
 	strncpy(buf, pkg, p - pkg);
 	buf[p - pkg] = '\0';
 	pkgid.s[i] = str_intern(st, buf, 1);
+	free(buf);
 	i++;
 	pkg = p;
 	assert(i < 3);
@@ -80,7 +84,8 @@
     int len = 0;
     int i;
     char *p[3] = { NULL, NULL, NULL };
-    static char buf[PATH_MAX];
+    static char *buf;
+
     for (i = 0; i < 3; i++) {
 	if (pid.s[i] == 0) {
 	    break;
@@ -88,7 +93,13 @@
 	p[i] = str_symbol(st, pid.s[i]);
 	len += strlen(p[i]);
     }
-    assert(len < PATH_MAX);
+    if (buf != NULL) {
+	free(buf);
+    }
+    buf = (char *)malloc(len + 1);
+    if (buf == NULL) {
+	abort();
+    }
     buf[0] = '\0';
     for (i = 0; i < 3; i++) {
 	if (p[i]) {
