1 diff --git a/configure.ac b/configure.ac
2 index 192a838..4ddd127 100644
5 @@ -200,12 +200,11 @@ AC_CHECK_LIB(bz2, BZ2_decompress,
6 AM_CONDITIONAL(HAVE_BZ2, false))],
7 AM_CONDITIONAL(HAVE_BZ2, false))
9 -AC_CHECK_LIB(rpm, rpmReadPackageFile,
10 - [AC_CHECK_HEADERS([rpm/rpmlib.h],
11 - AM_CONDITIONAL(HAVE_LIBRPM, true)
12 - AC_DEFINE(HAVE_LIBRPM,1,[Have librpm]),
13 - AM_CONDITIONAL(HAVE_LIBRPM, false))],
14 - AM_CONDITIONAL(HAVE_LIBRPM, false))
15 +PKG_CHECK_MODULES(RPM, rpm,
16 + AM_CONDITIONAL(HAVE_LIBRPM, true)
17 + AC_DEFINE([HAVE_LIBRPM],[1], "RPM..."),
18 + AM_CONDITIONAL(HAVE_LIBRPM, false)
21 AC_CHECK_LIB(mpeg2, mpeg2_init,
22 [AC_CHECK_HEADERS([mpeg2dec/mpeg2.h],
23 --- libextractor-1.6/src/plugins/Makefile.am.orig 2017-10-09 15:29:32.000000000 +0200
24 +++ libextractor-1.6/src/plugins/Makefile.am 2017-12-07 18:27:17.926353030 +0100
26 # This Makefile.am is in the public domain
28 -I$(top_srcdir)/src/include \
29 - -I$(top_srcdir)/src/common
30 + -I$(top_srcdir)/src/common \
34 # install plugins under:
35 --- libextractor-1.6/src/plugins/rpm_extractor.c.orig 2017-10-15 20:44:15.000000000 +0200
36 +++ libextractor-1.6/src/plugins/rpm_extractor.c 2017-12-07 18:29:10.923018408 +0100
39 #include "extractor.h"
41 -#include <rpm/rpmlib.h>
42 -#include <rpm/rpmts.h>
43 -#include <rpm/rpmlog.h>
50 #include <pthread_np.h>
52 @@ -128,6 +129,7 @@ pipe_feeder (void * args)
53 * LOG callback called by librpm. Does nothing, we
54 * just need this to override the default behavior.
56 +#ifdef RPMLOG_DEFAULT
58 discard_log_callback (rpmlogRec rec,
60 @@ -135,6 +137,9 @@ discard_log_callback (rpmlogRec rec,
65 +static void discard_log_callback() { }
70 @@ -240,6 +245,12 @@ static struct Matches tests[] = {
75 +static int headerNext(HeaderIterator hi, HE_t he, /*@unused@*/ unsigned int flags)
77 + return headerNextIterator(hi, &he->tag, &he->t, &he->p.ptr, &he->c);
82 * Main entry method for the 'application/x-rpm' extraction plugin.
83 @@ -255,7 +266,7 @@ EXTRACTOR_rpm_extract_method (struct EXT
92 @@ -286,7 +297,11 @@ EXTRACTOR_rpm_extract_method (struct EXT
96 +#ifdef RPMLOG_DEFAULT
97 rpmlogSetCallback (&discard_log_callback, NULL);
99 + rpmlogSetCallback (&discard_log_callback);
101 fdi = fdDup (parg.pi[0]);
103 rc = rpmReadPackageFile (ts, fdi, "GNU libextractor", &hdr);
104 @@ -314,19 +329,38 @@ EXTRACTOR_rpm_extract_method (struct EXT
107 pthread_mutex_unlock (&parg.lock);
109 + hi = headerInit (hdr);
111 hi = headerInitIterator (hdr);
113 - while (1 == headerNext (hi, p))
115 + p = (HE_t)memset(alloca(sizeof(*p)), 0, sizeof(*p));
116 + while (1 == headerNext (hi, p, 0))
117 for (i = 0; 0 != tests[i].rtype; i++)
119 if (tests[i].rtype != p->tag)
124 + case RPM_STRING_TYPE:
126 + pthread_mutex_lock (&parg.lock);
127 + if (0 != ec->proc (ec->cls,
130 + EXTRACTOR_METAFORMAT_UTF8,
133 + strlen (p->p.str) +1)) {
134 + pthread_mutex_unlock (&parg.lock);
137 + pthread_mutex_unlock (&parg.lock);
140 case RPM_STRING_ARRAY_TYPE:
141 case RPM_I18NSTRING_TYPE:
142 - case RPM_STRING_TYPE:
143 - while (NULL != (str = rpmtdNextString (p)))
144 + for(p->ix = 0; p->ix < p->c; p->ix++)
146 pthread_mutex_lock (&parg.lock);
147 if (0 != ec->proc (ec->cls,
148 @@ -334,8 +368,8 @@ EXTRACTOR_rpm_extract_method (struct EXT
150 EXTRACTOR_METAFORMAT_UTF8,
155 + strlen (p->p.argv[p->ix]) + 1))
158 pthread_mutex_unlock (&parg.lock);
159 @@ -344,12 +378,12 @@ EXTRACTOR_rpm_extract_method (struct EXT
160 pthread_mutex_unlock (&parg.lock);
163 - case RPM_INT32_TYPE:
164 + case RPM_UINT32_TYPE:
166 if (p->tag == RPMTAG_BUILDTIME)
169 - uint32_t *v = rpmtdNextUint32 (p);
170 + uint32_t *v = p->p.ui32p;
171 time_t tp = (time_t) *v;
173 if (NULL == ctime_r (&tp, tmp))
174 @@ -374,7 +408,7 @@ EXTRACTOR_rpm_extract_method (struct EXT
178 - uint32_t *s = rpmtdNextUint32 (p);
179 + uint32_t *s = p->p.ui32p;
183 @@ -401,7 +435,6 @@ EXTRACTOR_rpm_extract_method (struct EXT
188 headerFreeIterator (hi);