]> git.pld-linux.org Git - packages/poldek.git/blob - poldek-ignore-too-long-paths.patch
gettextize to replace config.rpath
[packages/poldek.git] / poldek-ignore-too-long-paths.patch
1 commit 31658355f3937b67f265e45f70eccfe7af668a70
2 Author: Marcin Banasiak <marcin.banasiak@gmail.com>
3 Date:   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
11 diff --git a/pkgdir/pkgdir_dirindex.c b/pkgdir/pkgdir_dirindex.c
12 index 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);
25 diff --git a/pm/rpm/rpm_pkg_ld.c b/pm/rpm/rpm_pkg_ld.c
26 index 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]);
64
65 diff --git a/pm/rpm/rpm_pkg_ld.c b/pm/rpm/rpm_pkg_ld.c
66 index 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.136003 seconds and 3 git commands to generate.