]> git.pld-linux.org Git - packages/poldek.git/blame - poldek-ignore-too-long-paths.patch
gettextize to replace config.rpath
[packages/poldek.git] / poldek-ignore-too-long-paths.patch
CommitLineData
5d6ede24
MB
1commit 31658355f3937b67f265e45f70eccfe7af668a70
2Author: Marcin Banasiak <marcin.banasiak@gmail.com>
3Date: Sun Mar 9 22:16:00 2014 +0100
4
5 Ignore paths longer than 255 characters (lp#1288989)
6
7 Index format used by poldek prevents us from storing paths longer than
8 255 characters. Changing this behaviour would break backward
9 compatibility, so simply ignore them.
10
11diff --git a/pkgdir/pkgdir_dirindex.c b/pkgdir/pkgdir_dirindex.c
12index abfd05c..3437ee7 100644
13--- a/pkgdir/pkgdir_dirindex.c
14+++ b/pkgdir/pkgdir_dirindex.c
15@@ -136,6 +136,9 @@ void add_to_path_index(tn_hash *path_index, const char *path, uint32_t package_n
16 unsigned khash = 0;
17 tn_array *keys;
18
19+ if (strlen(path) > 255)
20+ return;
21+
22 if ((keys = n_hash_get_ex(path_index, path, &klen, &khash)) == NULL) {
23 keys = n_array_new(16, free, (tn_fn_cmp)strcmp);
24 n_hash_insert_ex(path_index, path, klen, khash, keys);
25diff --git a/pm/rpm/rpm_pkg_ld.c b/pm/rpm/rpm_pkg_ld.c
26index 5ae167a..3983693 100644
27--- a/pm/rpm/rpm_pkg_ld.c
28+++ b/pm/rpm/rpm_pkg_ld.c
29@@ -259,8 +259,9 @@ static int valid_fname(const char *fname, mode_t mode, const char *pkgname)
30 #endif
31
32 if (strlen(fname) > 255) {
33- logn(LOGERR, _("%s: %s \"%s\" longer than 255 bytes"),
34- pkgname, S_ISDIR(mode) ? _("dirname") : _("filename"), fname);
35+ if (poldek_VERBOSE > 1)
36+ logn(LOGWARN, _("%s: skipped %s \"%s\" longer than 255 bytes"),
37+ pkgname, S_ISDIR(mode) ? _("dirname") : _("filename"), fname);
38 return 0;
39 }
40
41@@ -335,8 +336,11 @@ int pm_rpm_ldhdr_fl(tn_alloc *na, tn_tuple **fl,
42 struct pkgfl_ent *flent;
43
44 fentdirs_items[i] = 0;
45- if (!valid_fname(dirs[i], 0, pkgname))
46- nerr++;
47+ if (!valid_fname(dirs[i], 0, pkgname)) {
48+ skipdirs[i] = NULL;
49+ fentdirs[i] = NULL;
50+ continue;
51+ }
52
53 if (which != PKGFL_ALL) {
54 int is_depdir;
55@@ -374,7 +378,7 @@ int pm_rpm_ldhdr_fl(tn_alloc *na, tn_tuple **fl,
56 int len;
57
58 if (!valid_fname(names[i], modes ? modes[i] : 0, pkgname))
59- nerr++;
60+ continue;
61
62 msg(5, " %d: %s %s/%s \n", i, skipdirs[j] ? "add " : "skip",
63 dirs[j], names[i]);
026e65b4
MB
64
65diff --git a/pm/rpm/rpm_pkg_ld.c b/pm/rpm/rpm_pkg_ld.c
66index 3983693..51e339f 100644
67--- a/pm/rpm/rpm_pkg_ld.c
68+++ b/pm/rpm/rpm_pkg_ld.c
69@@ -277,6 +277,7 @@ int pm_rpm_ldhdr_fl(tn_alloc *na, tn_tuple **fl,
70 int32_t *diridxs;
71 uint32_t *sizes;
72 uint16_t *modes;
73+ size_t *dirslen = NULL;
74 struct flfile *flfile;
75 struct pkgfl_ent **fentdirs = NULL;
76 int *fentdirs_items;
77@@ -329,11 +330,14 @@ int pm_rpm_ldhdr_fl(tn_alloc *na, tn_tuple **fl,
78
79 skipdirs = alloca(sizeof(*skipdirs) * c2);
80 fentdirs = alloca(sizeof(*fentdirs) * c2);
81+ dirslen = alloca(sizeof(size_t) * c2);
82 fentdirs_items = alloca(sizeof(*fentdirs_items) * c2);
83
84 /* skip unneded dirnames */
85 for (i=0; i<c2; i++) {
86 struct pkgfl_ent *flent;
87+
88+ dirslen[i] = strlen(dirs[i]);
89
90 fentdirs_items[i] = 0;
91 if (!valid_fname(dirs[i], 0, pkgname)) {
92@@ -366,7 +370,7 @@ int pm_rpm_ldhdr_fl(tn_alloc *na, tn_tuple **fl,
93 if (diridxs[j] == i)
94 fentdirs_items[i]++;
95
96- flent = pkgfl_ent_new(na, dirs[i], strlen(dirs[i]), fentdirs_items[i]);
97+ flent = pkgfl_ent_new(na, dirs[i], dirslen[i], fentdirs_items[i]);
98 fentdirs[i] = flent;
99 ndirs++;
100 }
101@@ -388,6 +392,15 @@ int pm_rpm_ldhdr_fl(tn_alloc *na, tn_tuple **fl,
102
103 flent = fentdirs[j];
104 len = strlen(names[i]);
105+
106+ /* FIXME: ignore dirpaths longer then 255 characters lp#1288989 */
107+ if (S_ISDIR(modes ? modes[i] : 0) && dirslen[j] + len > 254) {
108+ if (poldek_VERBOSE > 1)
109+ logn(LOGWARN, _("%s: skipped dirname \"%s/%s\": longer than 255 bytes"),
110+ pkgname, flent->dirname, names[i]);
111+ continue;
112+ }
113+
114 if (symlinks) {
115 flfile = flfile_new(na, sizes ? sizes[i] : 0,
116 modes ? modes[i] : 0,
This page took 0.062778 seconds and 4 git commands to generate.