Browse code

Merge branch 'master' of ssh://git.clam.sourcefire.com/var/lib/git/clamav-devel

Conflicts:
ChangeLog

Tomasz Kojm authored on 2010/10/18 23:10:20
Showing 16 changed files
... ...
@@ -1,6 +1,28 @@
1
+<<<<<<< HEAD
1 2
 Mon Oct 18 15:52:47 CEST 2010 (tk)
2 3
 ----------------------------------
3 4
  * libclamav/matcher.c: fix stack smash with HandlerType (bb#2298)
5
+=======
6
+Mon Oct 18 13:23:42 CEST 2010 (acab)
7
+------------------------------------
8
+ * libclamav/scanners.c: mark embpes as unreliable (bb#2307)
9
+
10
+Mon Oct 18 14:16:11 EEST 2010 (edwin)
11
+-------------------------------------
12
+ * clamconf/clamconf.c, libclamav/others.c: warn about zlib version mismatches (bb #2072)
13
+
14
+Mon Oct 18 13:55:17 EEST 2010 (edwin)
15
+-------------------------------------
16
+ * libclamav/pdf.c: bb #2295
17
+
18
+Mon Oct 18 13:46:59 EEST 2010 (edwin)
19
+-------------------------------------
20
+ * libclamav/builtin_bytecodes.h: disable JIT on CPUs without CMOV (bb #2327).
21
+
22
+Mon Oct 18 12:52:25 EEST 2010 (edwin)
23
+-------------------------------------
24
+ * libclamav/pdf.c: keep parsing after %%EOF (bb #2264).
25
+>>>>>>> 110731e7842dfbfbb73a89c5f773a8e09a76cbb7
4 26
 
5 27
 Mon Oct 18 11:30:01 CEST 2010 (tk)
6 28
 ----------------------------------
... ...
@@ -237,6 +237,8 @@ static void print_platform(struct cli_environment *env)
237 237
     }
238 238
 #endif
239 239
 
240
+    if (strcmp(ZLIB_VERSION, zlibVersion()))
241
+	printf("WARNING: zlib version mismatch: %s (%s)\n", ZLIB_VERSION, zlibVersion());
240 242
 #ifdef ZLIB_VERNUM
241 243
     printf("zlib version: %s (%s), compile flags: %02lx\n",
242 244
 	   ZLIB_VERSION, zlibVersion(), zlibCompileFlags());
... ...
@@ -29,53 +29,64 @@
29 29
  * fallback.
30 30
  * Usually bytecode.cvd will contain this bytecode */
31 31
 
32
-static const char* builtin_bc_startup = "ClamBCafheaie`fld|afefdfggifnf```aa```|biacflfafmfbfcfmb`cnbacacmbacdcicmbgfhcachcgcbchccf``bkbaap`clamcoincidencejb:1378\n"
32
+static const char* builtin_bc_startup = "ClamBCafhmknalkld|afefdfggifnf```aa```|biacflfafmfbfcfmb`cnbacacmbacgcgcmbgfbffcbficbfbfac``bgcaap`clamcoincidencejb:4096\n"
33 33
 "\n"
34
-"Teddaaahdabahdacahdadahdaeahdafahdagahebjfebidebifebhfebgfebffebedebefebdfebcfebadcbgab`bb`bb`bb`bb`bb`bb`bbbfbbfbbfbbfbbfbbfbbfahahahahahahahahahebgeebbfaaaaaaaab`baabb`bb`baacb`bbadb`baacb`bbheb`baacb`bb`bb`baadb`bbadb`bb`baadb`bbadbadb`bdbadahdbkaahdbbcahdbibahdb`eahdbddahdbodahdbdaahdbnbah\n"
35
-"Ebjdaibcdbke|bcaefnfgfifnfefoedfcfofnfffoelfeffgeflf``bbdbke|bkaefnfgfifnfefoeffegnfcfdgifofnfaflfifdgigoelfeffgeflf``agble|baadfefbfeggfoe`gbgifnfdgoeegifnfdg``bcable|afdgefcgdgbc``afbme|b`adfefbfeggfoe`gbgifnfdgoecgdgbg``bhdbne|b`agfefdgoeefnffgifbgofnfmfefnfdg``aaboe|afdgefcgdgac``bidb`f|bdadfifcgafbflfefoebfigdgefcfofdfefoeifff``bjdb`f|aodfifcgafbflfefoejfifdgoeifff``\n"
36
-"G`bha`@`b`aAa`bjfBifBkeBccBdcBmeBhcBfcB`bBdfBefBdgBefBcfBdgBefBdfBlbB`bBjdBidBdeB`bBnfBefBefBdfBcgB`bB`gBefBnfBdgBifBegBmfB`bBofBbgB`bBbfBefBdgBdgBefBbg@`bidBifBccBhcBfc@`bidBifBdcBhcBfc@`bifBbeBgeBheB`bBmfBafB`gB`gBifBnfBgfB`bBdfBefBnfBifBefBdfBnb@`bhfBneBceBedBldBifBnfBegBhgB`bBifBcgB`bB`gBbgBefBfgBefBnfBdgBifBnfBgfB`bBgbBefBhgBefBcfBmfBefBmfBgbB`bBafBcfBcfBefBcgBcgBnbAjBbeBegBnfB`bB`bBgbBcgBefBdgBcgBefBbfBofBofBlfB`bBmbB`eB`bBcfBlfBafBmfBdfBoeBegBcgBefBoeBjfBifBdgB`bBofBnfBgbBnb@`bgfBneB`eBafBheB`bBifBcgB`bB`gBbgBefBfgBefBnfBdgBifBnfBgfB`bBgbBmfB`gBbgBofBdgBefBcfBdgBgbB`bBafBcfBcfBefBcgBcgBnbAjBbeBegBnfB`bBgbB`gBafBhgBcfBdgBlfB`bBmbBcfBmfB`bBlcBefBhgBefBcfBegBdgBafBbfBlfBefBncBgb@`bffBneBbeBgeBheB`bBmfBafB`gB`gBifBnfBgfB`bBdfBefBnfBifBefBdfB`bBffBofBbgB`bBegBnfBkfBnfBofBggBnfB`bBbgBefBafBcgBofBnfBnbB`eBlfBefBafBcgBefB`bBbgBefB`gBofBbgBdgB`bBdgBofB`bBhfBdgBdgB`gBjcBobBobBbfBegBgfBcgBnbBcfBlfBafBmfBafBfgBnbBnfBefBdgAj@`bed@`befBcgBdgBafBbgBdgBegB`gBjcB`bBbfBigBdgBefBcfBofBdfBefB`bBefBhgBefBcfBegBdgBifBofBnfB`bBifBnfB`bBafBegBdgBofB`bBmfBofBdfBef@`bdfBcgBdgBafBbgBdgBegB`gBjcB`bBbfBigBdgBefBcfBofBdfBefB`bBefBhgBefBcfBegBdgBifBofBnfB`bBggBifBdgBhfB`bBifBnfBdgBefBbgB`gBbgBefBdgBefBbgB`bBofBnfBlfBig@`bcfBcgBdgBafBbgBdgBegB`gBjcB`bBbfBigBdgBefBcfBofBdfBefB`bBdfBifBcgBafBbfBlfBefBdf@`bad@Ab`bad@Ac`bad@Ad`bad@Ae`bad@Af`bad@Ag`bad@Ah`bad@Ai`bad@Aj`bad@Ak`bad@Al`\n"
37
-"A`b`bLbahb`bab`babgeab`b`bad`ah`aa`bad`ah`aa`bie`bad`b`b`aa`b`b`aa`b`b`b`b`bad`ah`b`b`b`b`aa`b`b`bad`ah`aa`ah`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`bad`ah`aa`bad`ah`aa`b`b`aa`b`b`b`b`aa`aa`aa`aa`aa`b`b`b`b`b`b`ah`aa`bcd`b`b`aa`bcd`b`b`bcd`b`b`aa`b`b`aa`b`b`b`b`aa`bad`ah`b`b`aa`b`b`aa`bad`ah`b`b`b`b`bad`ah`b`b`b`b`bad`ah`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`bad`ah`b`b`b`b`bcd`b`b`b`b`b`b`bad`ah`b`b`b`b`bcd`b`b`b`b`bcd`b`b`aa`b`b`bcd`b`b`aa`b`b`bcd`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`Fb`kbib\n"
38
-"Bb`bacabbbhdabClnadbadaddbbheabBdadahaegbadaaafeaahae@aTaaafb`aaa\n"
39
-"BbadagdbbheabB`adahahgbagaaaieaahahAaaTaaaiabae\n"
40
-"BbieajdbbheabAidbadakdbbieaj@db`balkbakAn`Addaaameab`bal@db`b`bbAadaaTaaamadac\n"
41
-"Bb`bankbakAo`Addaaaoeab`ban@db`baa`aaob`b`bbaaaaTbaad\n"
42
-"Bb`bb`abbaab`ab`bbaaabcbjdAm`@db`aTbaae\n"
43
-"BbadbbadbbheabBeadahbcagbbbab`bbda`abcab`bbeak`bdaAadaabfaeab`bbea@dTaabfaafal\n"
44
-"Bb`bbgaabcbjdB`a`@dAadbadbhadbbheabBaadahbiagbbhaaabjaeaahbiaAjaTaabjaagb`a\n"
45
-"Bahbkagbbbab`bbla`abkab`bbmak`blaAbdaabnaeab`bbma@dTaabnaaiah\n"
46
-"Bb`bboaabcbjdBaa`@dAadTbab`a\n"
47
-"Bb`bb`bk`blaAhdaababeab`bb`b@dTaababakaj\n"
48
-"Bb`bbbbabcbjdBba`@dAadTbab`a\n"
49
-"Bb`bbcbabcbjdBca`@dAadTbab`a\n"
50
-"BbadbdbdbbheabBaadahbebgbbdbaabfbeaahbebAjaTaabfbanam\n"
51
-"BbadbgbdbbheabBbadahbhbgbbgbaabibeaahbhbAfaTaabibanb`a\n"
52
-"Bb`bbjbk`bdaB`adaabkbeab`bbjb@dTaabkbb`aao\n"
53
-"Bb`bblbabcbjdBba`@dAadTbab`a\n"
54
-"Bb`bbmbabcbidBda`@d@daabnbnab`bbmbAadTaabnbbdabaa\n"
55
-"Baabobnab`bbmbAbdTaabobbcabba\n"
56
-"Baab`ceab`bbmbAbdTaab`cbgabha\n"
57
-"Baabaceab`bbmbAadTaabacbfabha\n"
58
-"Baabbceab`bbmb@dTaabbcbeabha\n"
59
-"Bb`bbccabbafBea`@dTbabha\n"
60
-"Bb`bbdcabbafBfa`@dTbabha\n"
61
-"Bb`bbecabbafBga`@dTbabha\n"
62
-"Bahbfcgbadaabgceaahbfc@aTaabgcbjabia\n"
63
-"BbcdbhcdbbheabAddb`bbicgbbhcaabjceab`bbic@db`b`bbEamjnmd`Taabjcbhbbja\n"
64
-"BbcdbkcdbbheabAfdb`bblcgbbkcbcdbmcdbbheabAedb`bbncgbbmcaabociab`bblcbncb`b`bbEbmjnmd`Taabocbhbbka\n"
65
-"Bb`bb`dab`bbdaabadeab`bbncb`db`b`bbEcmjnmd`Taabadblabhb\n"
66
-"Bb`bbbdgbbkcb`bbcdab`bcdaabddeab`bbbdbcdb`b`bbEdmjnmd`Taabddbmabhb\n"
67
-"BbadbeddbbheabAndahbfdgbbedb`bbgd`abfdaabhdlbb`bbid`abhdaabjdeab`bbgdbidb`b`bbEemjnmd`Taabjdbnabhb\n"
68
-"BbadbkddbbheabBaadahbldgbbkdb`bbmd`abldb`bbndh`bmdBhadbadboddbbheabB`adahb`egbbodb`bbae`ab`eb`bbbeh`baeBdadbadbcedbbheabBcadahbdegbbceb`bbee`abdeb`bbfeh`beeB`adb`bbgegbbmcb`bbheh`bgeAhdb`bbiegbbkcb`bbjel`bbebndb`bbkel`bjebheb`bblel`bkebieb`bbmel`blebfeb`bbneh`bgdBladbadboedbbheabAodahb`fgbboeb`bbaf`ab`fb`bbbfh`bafBhadbcdbcfdbbheabAddb`bbdfgbbcfb`bbefl`bdfbneb`bbffl`befbbfbadbgfdbbheabBeadahbhfgbbgfb`bbif`abhfb`bbjfh`bifBhadbcdbkfdbbheabAcdb`bblfgbbkfb`bbmfl`bjfblfbcdbnfdbbheab@db`bbofgbbnfaab`geab`bbmebofTaab`gb`bboa\n"
69
-"Bb`bbagabaagbmeTcab`bEfmjnmd\n"
70
-"BbcdbbgdbbheabAadb`bbcggbbbgaabdgeab`bbffbcgTaabdgbbbbab\n"
71
-"Bb`bbegabaagbffTcab`bEgmjnmd\n"
72
-"BbcdbfgdbbheabAbdb`bbgggbbfgaabhgeab`bbmfbggTaabhgbdbbcb\n"
73
-"Bb`bbigabaagbmfTcab`bEhmjnmd\n"
74
-"Bb`bbjgabbaaHonnkm``odHm``oonnkdaabkgeab`bbjgHhgfedcbadTaabkgbfbbeb\n"
75
-"Bb`bblgabaagbjgTcab`bEimjnmd\n"
76
-"Bb`bbmgababcaDm``odaabngeab`bbmgDo``mdb`b`bbHnejkjgjmd`Taabngbhbbgb\n"
77
-"Bb`bbogabaagbmgTcab`bF`amjnmd\n"
78
-"Bb`bb`hbb`b`hTcab`bb`hE\n"
34
+"Teddaaahdabahdacahdadahdaeahdafahdagahebfgebidebegebdgebgdebkdebcgebbgebageb`gebofebnfebmfebedeblfebkfebjfebadcbgab`bb`bb`bb`bb`bb`bb`bbifbifbifbifbifbifbifahahahahahahahahahebneebifaaaaaaaab`baabb`bb`baacb`bbadb`baacb`bboeb`baacb`bb`bb`baadb`bbadb`bb`baadb`bbadbadb`bdbadahdbkaahdbbcahdbibahdb`eahdbddahdbodahdbdaahdaiahdakahdamahdahahdbgcahdbnbah\n"
35
+"Ebjdaibcdbbf|bcaefnfgfifnfefoedfcfofnfffoelfeffgeflf``bbdbbf|bkaefnfgfifnfefoeffegnfcfdgifofnfaflfifdgigoelfeffgeflf``agbcf|baadfefbfeggfoe`gbgifnfdgoeegifnfdg``bcabcf|afdgefcgdgbc``afbdf|b`adfefbfeggfoe`gbgifnfdgoecgdgbg``bhdbef|b`agfefdgoeefnffgifbgofnfmfefnfdg``aabff|afdgefcgdgac``bidbgf|bdadfifcgafbflfefoebfigdgefcfofdfefoeifff``bjdbgf|aodfifcgafbflfefoejfifdgoeifff``\n"
36
+"G`b`c`@`b`aAa`bfgBifBkeBccBdcBmeBhcBfcB`bBdfBefBdgBefBcfBdgBefBdfBlbB`bBjdBidBdeB`bBnfBefBefBdfBcgB`bB`gBefBnfBdgBifBegBmfB`bBofBbgB`bBbfBefBdgBdgBefBbg@`bidBifBccBhcBfc@`bidBifBdcBhcBfc@`begBcdB`eBeeB`bBdfBofBefBcgBnfBgbBdgB`bBcgBegB`gB`gBofBbgBdgB`bBcdBmdBodBfeBlbB`bBggBofBegBlfBdfB`bBnfBefBefBdfB`bBldBldBfeBmdB`bBbcBnbBhcB`bBdgBofB`bBggBofBbgBkfBab@`bidBifBecBhcBfc@`bdgB`gBefBnfBdgBifBegBmf@`bidBifBfcBhcBfc@`bgdBkfBfc@`bidBkfBfcBmbBbc@`bidBkfBfcBmbBcc@`bkdBafBdgBhfBlfBofBnf@`bcgBafBdgBhfBlfBofBnfBmbBdgBbfBifBbgBdf@`bbgBggBifBnfBcfBhfBifB`gBmbBcfBfc@`bagBggBifBnfBcfBhfBifB`gBbc@`bgdBcfBcc@`b`gBbeBgeBheB`bBmfBafB`gB`gBifBnfBgfB`bBdfBefBnfBifBefBdfBnb@`bofBneBceBedBldBifBnfBegBhgB`bBifBcgB`bB`gBbgBefBfgBefBnfBdgBifBnfBgfB`bBgbBefBhgBefBcfBmfBefBmfBgbB`bBafBcfBcfBefBcgBcgBnbAjBbeBegBnfB`bB`bBgbBcgBefBdgBcgBefBbfBofBofBlfB`bBmbB`eB`bBcfBlfBafBmfBdfBoeBegBcgBefBoeBjfBifBdgB`bBofBnfBgbBnb@`bnfBneB`eBafBheB`bBifBcgB`bB`gBbgBefBfgBefBnfBdgBifBnfBgfB`bBgbBmfB`gBbgBofBdgBefBcfBdgBgbB`bBafBcfBcfBefBcgBcgBnbAjBbeBegBnfB`bBgbB`gBafBhgBcfBdgBlfB`bBmbBcfBmfB`bBlcBefBhgBefBcfBegBdgBafBbfBlfBefBncBgb@`bmfBneBbeBgeBheB`bBmfBafB`gB`gBifBnfBgfB`bBdfBefBnfBifBefBdfB`bBffBofBbgB`bBegBnfBkfBnfBofBggBnfB`bBbgBefBafBcgBofBnfBnbB`eBlfBefBafBcgBefB`bBbgBefB`gBofBbgBdgB`bBdgBofB`bBhfBdgBdgB`gBjcBobBobBbfBegBgfBcgBnbBcfBlfBafBmfBafBfgBnbBnfBefBdgAj@`bed@`blfBcgBdgBafBbgBdgBegB`gBjcB`bBbfBigBdgBefBcfBofBdfBefB`bBefBhgBefBcfBegBdgBifBofBnfB`bBifBnfB`bBafBegBdgBofB`bBmfBofBdfBef@`bkfBcgBdgBafBbgBdgBegB`gBjcB`bBbfBigBdgBefBcfBofBdfBefB`bBefBhgBefBcfBegBdgBifBofBnfB`bBggBifBdgBhfB`bBifBnfBdgBefBbgB`gBbgBefBdgBefBbgB`bBofBnfBlfBig@`bjfBcgBdgBafBbgBdgBegB`gBjcB`bBbfBigBdgBefBcfBofBdfBefB`bBdfBifBcgBafBbfBlfBefBdf@`bad@Ab`bad@Ac`bad@Ad`bad@Ae`bad@Af`bad@Ag`bad@Ah`bad@Ai`bad@Aj`bad@Ak`bad@Al`bad@Am`bad@An`bad@Ao`bad@B`a`bad@Baa`bad@Bba`bad@Bca`bad@Bda`bad@Bea`bad@Bfa`bad@Bga`bad@Bha`\n"
37
+"A`b`bLbjib`bab`bab`babneab`b`bad`ah`aa`bad`ah`aa`b`f`bad`b`b`aa`b`b`aa`b`b`b`b`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`aa`b`b`b`b`bad`ah`b`b`b`b`aa`b`b`bad`ah`aa`ah`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`bad`ah`aa`bad`ah`aa`b`b`aa`b`b`b`b`aa`aa`aa`aa`aa`b`b`b`b`b`b`ah`aa`bcd`b`b`aa`bcd`b`b`bcd`b`b`aa`b`b`aa`b`b`b`b`aa`bad`ah`b`b`aa`b`b`aa`bad`ah`b`b`b`b`bad`ah`b`b`b`b`bad`ah`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`b`bad`ah`b`b`b`b`bcd`b`b`b`b`b`b`bad`ah`b`b`b`b`bcd`b`b`b`b`bcd`b`b`aa`b`b`bcd`b`b`aa`b`b`bcd`b`b`aa`b`b`b`b`aa`b`b`b`b`aa`b`b`b`b`Fbombdc\n"
38
+"Bb`badabbbhdacClnadbadaedbboeacBdadahafgbaeaaageaahaf@aTaaagbkaaa\n"
39
+"BbadahdbboeacB`adahaigbahaaajeaahaiAaaTaaajabb`a\n"
40
+"Bb`fakdbboeacAidbadaldbb`fak@db`bamkbalBja`Addaaaneab`bam@db`b`bbAadabTaaanadac\n"
41
+"Bb`baokbalBka`Addaab`aeab`bao@db`bab`ab`ab`b`bbababTbaad\n"
42
+"Bb`bbaabbabbaab`bbbaabcbjdBia`@dbaab`bbcakbalBma`Addaabdaeab`bbca@db`b`bbAadaaTaabdaaoae\n"
43
+"Bb`bbeakbalBna`Agdaabfaeab`bbea@db`b`bbAadaaTaabfaaoaf\n"
44
+"Bb`bbgakbalBoa`Addaabhaeab`bbga@db`b`bbAadaaTaabhaaoag\n"
45
+"Bb`bbiakbalB`b`Abdaabjaeab`bbia@db`b`bbAadaaTaabjaaoah\n"
46
+"Bb`bbkakbalBab`Addaablaeab`bbka@db`b`bbAadaaTaablaaoai\n"
47
+"Bb`bbmakbalBbb`Addaabnaeab`bbma@db`b`bbAadaaTaabnaaoaj\n"
48
+"Bb`bboakbalBcb`Afdaab`beab`bboa@db`b`bbAadaaTaab`baoak\n"
49
+"Bb`bbabkbalBdb`Aldaabbbeab`bbab@db`b`bbAadaaTaabbbaoal\n"
50
+"Bb`bbcbkbalBeb`Ajdaabdbeab`bbcb@db`b`bbAadaaTaabdbaoam\n"
51
+"Bb`bbebkbalBfb`Ahdaabfbeab`bbeb@db`b`bbAadaaTaabfbaoan\n"
52
+"Bb`bbgbkbalBgb`Abdaabhbeab`bbgb@db`baa`abhbb`b`bbaaaaTbaao\n"
53
+"Bb`bbibbbaabibb`bbjbabcbjdBla`@dbibTbab`a\n"
54
+"BbadbkbdbboeacBeadahblbgbbkbb`bbmb`ablbb`bbnbk`bmbAadaabobeab`bbnb@dTaabobbaabga\n"
55
+"Bb`bb`cabcbjdBhb`@dAadbadbacdbboeacBaadahbbcgbbacaabcceaahbbcAjaTaabccbbabka\n"
56
+"Bahbdcgbbkbb`bbec`abdcb`bbfck`becAbdaabgceab`bbfc@dTaabgcbdabca\n"
57
+"Bb`bbhcabcbjdBib`@dAadTbabka\n"
58
+"Bb`bbick`becAhdaabjceab`bbic@dTaabjcbfabea\n"
59
+"Bb`bbkcabcbjdBjb`@dAadTbabka\n"
60
+"Bb`bblcabcbjdBkb`@dAadTbabka\n"
61
+"BbadbmcdbboeacBaadahbncgbbmcaaboceaahbncAjaTaabocbiabha\n"
62
+"Bbadb`ddbboeacBbadahbadgbb`daabbdeaahbadAfaTaabbdbiabka\n"
63
+"Bb`bbcdk`bmbB`adaabddeab`bbcd@dTaabddbkabja\n"
64
+"Bb`bbedabcbjdBjb`@dAadTbabka\n"
65
+"Bb`bbfdabcbidBlb`@d@daabgdnab`bbfdAadTaabgdboabla\n"
66
+"Baabhdnab`bbfdAbdTaabhdbnabma\n"
67
+"Baabideab`bbfdAbdTaabidbbbbcb\n"
68
+"Baabjdeab`bbfdAadTaabjdbabbcb\n"
69
+"Baabkdeab`bbfd@dTaabkdb`bbcb\n"
70
+"Bb`bbldabbafBmb`@dTbabcb\n"
71
+"Bb`bbmdabbafBnb`@dTbabcb\n"
72
+"Bb`bbndabbafBob`@dTbabcb\n"
73
+"Bahbodgbaeaab`eeaahbod@aTaab`ebebbdb\n"
74
+"BbcdbaedbboeacAddb`bbbegbbaeaabceeab`bbbe@db`b`bbEamjnmd`Taabcebccbeb\n"
75
+"BbcdbdedbboeacAfdb`bbeegbbdebcdbfedbboeacAedb`bbgegbbfeaabheiab`bbeebgeb`b`bbEbmjnmd`Taabhebccbfb\n"
76
+"Bb`bbieab`bbdaabjeeab`bbgebieb`b`bbEcmjnmd`Taabjebgbbcc\n"
77
+"Bb`bbkegbbdeb`bbleab`bcdaabmeeab`bbkebleb`b`bbEdmjnmd`Taabmebhbbcc\n"
78
+"BbadbnedbboeacAndahboegbbneb`bb`f`aboeaabaflbb`bbbf`abafaabcfeab`bb`fbbfb`b`bbEemjnmd`Taabcfbibbcc\n"
79
+"BbadbdfdbboeacBaadahbefgbbdfb`bbff`abefb`bbgfh`bffBhadbadbhfdbboeacB`adahbifgbbhfb`bbjf`abifb`bbkfh`bjfBdadbadblfdbboeacBcadahbmfgbblfb`bbnf`abmfb`bbofh`bnfB`adb`bb`ggbbfeb`bbagh`b`gAhdb`bbbggbbdeb`bbcgl`bkfbgfb`bbdgl`bcgbagb`bbegl`bdgbbgb`bbfgl`begbofb`bbggh`b`fBladbadbhgdbboeacAodahbiggbbhgb`bbjg`abigb`bbkgh`bjgBhadbcdblgdbboeacAddb`bbmggbblgb`bbngl`bmgbggb`bbogl`bngbkgbadb`hdbboeacBeadahbahgbb`hb`bbbh`abahb`bbchh`bbhBhadbcdbdhdbboeacAcdb`bbehgbbdhb`bbfhl`bchbehbcdbghdbboeac@db`bbhhgbbghaabiheab`bbfgbhhTaabihbkbbjb\n"
80
+"Bb`bbjhabaagbfgTcab`bEfmjnmd\n"
81
+"BbcdbkhdbboeacAadb`bblhgbbkhaabmheab`bbogblhTaabmhbmbblb\n"
82
+"Bb`bbnhabaagbogTcab`bEgmjnmd\n"
83
+"BbcdbohdbboeacAbdb`bb`igbbohaabaieab`bbfhb`iTaabaibobbnb\n"
84
+"Bb`bbbiabaagbfhTcab`bEhmjnmd\n"
85
+"Bb`bbciabbaaHonnkm``odHm``oonnkdaabdieab`bbciHhgfedcbadTaabdibacb`c\n"
86
+"Bb`bbeiabaagbciTcab`bEimjnmd\n"
87
+"Bb`bbfiababcaDm``odaabgieab`bbfiDo``mdb`b`bbHnejkjgjmd`Taabgibccbbc\n"
88
+"Bb`bbhiabaagbfiTcab`bF`amjnmd\n"
89
+"Bb`bbiibb`biiTcab`bbiiE\n"
79 90
 ;
80 91
 /* source-code for builtin_bc_startup: */
81 92
 #if 0
... ...
@@ -97,6 +108,21 @@ int entrypoint()
97 97
       disable_jit_if("i[34]86 detected, JIT needs pentium or better",0,
98 98
                      !memcmp(env.cpu,"i386",4) ||
99 99
                      !memcmp(env.cpu,"i486",4));
100
+      /* FIXME: update embedded LLVM to 2.8 which correctly skips CMOV if CPU
101
+       * doesn't support it.
102
+       * For now disable JIT on CPUs without cmov */
103
+      disable_jit_if("CPU doesn't support CMOV, would need LLVM 2.8 to work!",0,
104
+		     !memcmp(env.cpu,"i586",4) ||
105
+		     !memcmp(env.cpu,"pentium",7) ||
106
+		     !memcmp(env.cpu,"i686",4) ||
107
+		     !memcmp(env.cpu,"k6",2) ||
108
+		     !memcmp(env.cpu,"k6-2",4) ||
109
+		     !memcmp(env.cpu,"k6-3",4) ||
110
+		     !memcmp(env.cpu,"athlon",6) ||
111
+		     !memcmp(env.cpu,"athlon-tbird",12) ||
112
+		     !memcmp(env.cpu,"winchip-c6",10) ||
113
+		     !memcmp(env.cpu,"winchip2",8) ||
114
+		     !memcmp(env.cpu,"c3",2));
100 115
       break;
101 116
     default:
102 117
       break;
... ...
@@ -1629,10 +1629,15 @@ int cli_bytecode_run(const struct cli_all_bc *bcs, const struct cli_bc *bc, stru
1629 1629
     if (test_mode) {
1630 1630
 	jit_ev = cli_events_new(BCEV_LASTEVENT);
1631 1631
 	interp_ev = cli_events_new(BCEV_LASTEVENT);
1632
-	if (!jit_ev || !interp_ev)
1632
+	if (!jit_ev || !interp_ev) {
1633
+	    cli_events_free(jit_ev);
1634
+	    cli_events_free(interp_ev);
1633 1635
 	    return CL_EMEM;
1636
+	}
1634 1637
 	if (register_events(jit_ev) == -1 ||
1635 1638
 	    register_events(interp_ev) == -1) {
1639
+	    cli_events_free(jit_ev);
1640
+	    cli_events_free(interp_ev);
1636 1641
 	    return CL_EBYTECODE_TESTFAIL;
1637 1642
 	}
1638 1643
     }
... ...
@@ -1655,6 +1660,8 @@ int cli_bytecode_run(const struct cli_all_bc *bcs, const struct cli_bc *bc, stru
1655 1655
 	inst.u.ops.opsizes = ctx->opsizes;
1656 1656
 	cli_dbgmsg("Bytecode %u: executing in interpeter mode\n", bc->id);
1657 1657
 
1658
+	ctx->on_jit = 0;
1659
+
1658 1660
 	cli_event_time_start(interp_ev, BCEV_EXEC_TIME);
1659 1661
 	ret = cli_vm_execute(ctx->bc, ctx, &func, &inst);
1660 1662
 	cli_event_time_stop(interp_ev, BCEV_EXEC_TIME);
... ...
@@ -1674,6 +1681,7 @@ int cli_bytecode_run(const struct cli_all_bc *bcs, const struct cli_bc *bc, stru
1674 1674
 	ctx->bc_events = jit_ev;
1675 1675
 	cli_dbgmsg("Bytecode %u: executing in JIT mode\n", bc->id);
1676 1676
 
1677
+	ctx->on_jit = 1;
1677 1678
 	cli_event_time_start(jit_ev, BCEV_EXEC_TIME);
1678 1679
 	ret = cli_vm_execute_jit(bcs, ctx, &bc->funcs[ctx->funcid]);
1679 1680
 	cli_event_time_stop(jit_ev, BCEV_EXEC_TIME);
... ...
@@ -1699,7 +1707,7 @@ int cli_bytecode_run(const struct cli_all_bc *bcs, const struct cli_bc *bc, stru
1699 1699
 			bc->id, interp_errors, jit_errors);
1700 1700
 	    ok = 0;
1701 1701
 	}
1702
-	if (cli_event_diff_all(interp_ev, jit_ev, NULL)) {
1702
+	if (!ctx->no_diff && cli_event_diff_all(interp_ev, jit_ev, NULL)) {
1703 1703
 	    cli_infomsg(cctx, "bytecode %d execution different with JIT and interpreter, see --debug for details\n",
1704 1704
 			bc->id);
1705 1705
 	    ok = 0;
... ...
@@ -1720,9 +1728,14 @@ int cli_bytecode_run(const struct cli_all_bc *bcs, const struct cli_bc *bc, stru
1720 1720
 	}
1721 1721
 	/*cli_event_debug(jit_ev, BCEV_EXEC_TIME);
1722 1722
 	cli_event_debug(interp_ev, BCEV_EXEC_TIME);*/
1723
-	if (!ok)
1723
+	if (!ok) {
1724
+	    cli_events_free(jit_ev);
1725
+	    cli_events_free(interp_ev);
1724 1726
 	    return CL_EBYTECODE_TESTFAIL;
1727
+	}
1725 1728
     }
1729
+    cli_events_free(jit_ev);
1730
+    cli_events_free(interp_ev);
1726 1731
     return ret;
1727 1732
 }
1728 1733
 
... ...
@@ -1340,9 +1340,9 @@ int32_t cli_bcapi_version_compare(struct cli_bc_ctx *ctx , const uint8_t* lhs, u
1340 1340
 	if (!isdigit(lhs[i]) || !isdigit(rhs[j]))
1341 1341
 	    return lhs[i] < rhs[j] ? -1 : 1;
1342 1342
 	while (isdigit(lhs[i]) && i < lhs_len)
1343
-	    li = 10*li + (lhs[i] - '0');
1343
+	    li = 10*li + (lhs[i++] - '0');
1344 1344
 	while (isdigit(rhs[j]) && j < rhs_len)
1345
-	    ri = 10*ri + (rhs[j] - '0');
1345
+	    ri = 10*ri + (rhs[j++] - '0');
1346 1346
 	if (li < ri)
1347 1347
 	    return -1;
1348 1348
 	if (li > ri)
... ...
@@ -1502,3 +1502,8 @@ int32_t cli_bcapi_pdf_get_dumpedobjid(struct cli_bc_ctx *ctx)
1502 1502
     return ctx->pdf_dumpedid;
1503 1503
 }
1504 1504
 
1505
+int32_t cli_bcapi_running_on_jit(struct cli_bc_ctx *ctx )
1506
+{
1507
+    ctx->no_diff = 1;
1508
+    return ctx->on_jit;
1509
+}
... ...
@@ -977,5 +977,11 @@ int32_t pdf_get_dumpedobjid(void);
977 977
 int32_t matchicon(const uint8_t* group1, int32_t group1_len,
978 978
                   const uint8_t* group2, int32_t group2_len);
979 979
 /* ---------------- END 0.96.2 APIs   ----------------------------------- */
980
+/* ----------------- BEGIN 0.96.4 APIs ---------------------------------- */
981
+/* Returns whether running on JIT. As side-effect it disables
982
+ * interp / JIT comparisons in test mode (errors are still checked) */
983
+int32_t running_on_jit(void);
984
+
985
+/* ----------------- END 0.96.4 APIs ---------------------------------- */
980 986
 #endif
981 987
 #endif
... ...
@@ -122,6 +122,7 @@ int32_t cli_bcapi_pdf_get_offset(struct cli_bc_ctx *ctx , int32_t);
122 122
 int32_t cli_bcapi_pdf_get_phase(struct cli_bc_ctx *ctx );
123 123
 int32_t cli_bcapi_pdf_get_dumpedobjid(struct cli_bc_ctx *ctx );
124 124
 int32_t cli_bcapi_matchicon(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, const uint8_t*, int32_t);
125
+int32_t cli_bcapi_running_on_jit(struct cli_bc_ctx *ctx );
125 126
 
126 127
 const struct cli_apiglobal cli_globals[] = {
127 128
 /* Bytecode globals BEGIN */
... ...
@@ -146,8 +147,8 @@ static uint16_t cli_tmp4[]={16, 8, 8, 32, 32, 32, 32, 32, 32, 32, 32, 32, 16, 16
146 146
 static uint16_t cli_tmp5[]={32, 16, 16, 32, 32, 32, 16, 16};
147 147
 static uint16_t cli_tmp6[]={32};
148 148
 static uint16_t cli_tmp7[]={32};
149
-static uint16_t cli_tmp8[]={32, 65, 32, 65, 32};
150
-static uint16_t cli_tmp9[]={32};
149
+static uint16_t cli_tmp8[]={32};
150
+static uint16_t cli_tmp9[]={32, 65, 32, 65, 32};
151 151
 static uint16_t cli_tmp10[]={32, 32};
152 152
 static uint16_t cli_tmp11[]={32, 32, 32};
153 153
 static uint16_t cli_tmp12[]={65, 32, 32};
... ...
@@ -179,8 +180,8 @@ const struct cli_bc_type cli_apicall_types[]={
179 179
 	{DStructType, cli_tmp5, 8, 0, 0},
180 180
 	{DArrayType, cli_tmp6, 1, 0, 0},
181 181
 	{DArrayType, cli_tmp7, 64, 0, 0},
182
-	{DFunctionType, cli_tmp8, 5, 0, 0},
183
-	{DFunctionType, cli_tmp9, 1, 0, 0},
182
+	{DFunctionType, cli_tmp8, 1, 0, 0},
183
+	{DFunctionType, cli_tmp9, 5, 0, 0},
184 184
 	{DFunctionType, cli_tmp10, 2, 0, 0},
185 185
 	{DFunctionType, cli_tmp11, 3, 0, 0},
186 186
 	{DFunctionType, cli_tmp12, 3, 0, 0},
... ...
@@ -230,7 +231,7 @@ const struct cli_apicall cli_apicalls[]={
230 230
 	{"fill_buffer", 20, 0, 4},
231 231
 	{"extract_new", 10, 4, 2},
232 232
 	{"read_number", 10, 5, 2},
233
-	{"hashset_new", 9, 0, 5},
233
+	{"hashset_new", 8, 0, 5},
234 234
 	{"hashset_add", 11, 2, 0},
235 235
 	{"hashset_remove", 11, 3, 0},
236 236
 	{"hashset_contains", 11, 4, 0},
... ...
@@ -257,7 +258,7 @@ const struct cli_apicall cli_apicalls[]={
257 257
 	{"iexp", 13, 2, 7},
258 258
 	{"isin", 13, 3, 7},
259 259
 	{"icos", 13, 4, 7},
260
-	{"memstr", 8, 0, 8},
260
+	{"memstr", 9, 0, 8},
261 261
 	{"hex2ui", 11, 8, 0},
262 262
 	{"atoi", 19, 13, 1},
263 263
 	{"debug_print_str_start", 19, 14, 1},
... ...
@@ -272,19 +273,19 @@ const struct cli_apicall cli_apicalls[]={
272 272
 	{"map_getvalue", 12, 2, 6},
273 273
 	{"map_done", 10, 20, 2},
274 274
 	{"file_find_limit", 14, 4, 9},
275
-	{"engine_functionality_level", 9, 1, 5},
276
-	{"engine_dconf_level", 9, 2, 5},
277
-	{"engine_scan_options", 9, 3, 5},
278
-	{"engine_db_options", 9, 4, 5},
275
+	{"engine_functionality_level", 8, 1, 5},
276
+	{"engine_dconf_level", 8, 2, 5},
277
+	{"engine_scan_options", 8, 3, 5},
278
+	{"engine_db_options", 8, 4, 5},
279 279
 	{"extract_set_container", 10, 21, 2},
280 280
 	{"input_switch", 10, 22, 2},
281 281
 	{"get_environment", 15, 17, 1},
282 282
 	{"disable_bytecode_if", 14, 5, 9},
283 283
 	{"disable_jit_if", 14, 6, 9},
284
-	{"version_compare", 8, 1, 8},
284
+	{"version_compare", 9, 1, 8},
285 285
 	{"check_platform", 13, 5, 7},
286
-	{"pdf_get_obj_num", 9, 5, 5},
287
-	{"pdf_get_flags", 9, 6, 5},
286
+	{"pdf_get_obj_num", 8, 5, 5},
287
+	{"pdf_get_flags", 8, 6, 5},
288 288
 	{"pdf_set_flags", 10, 23, 2},
289 289
 	{"pdf_lookupobj", 10, 24, 2},
290 290
 	{"pdf_getobjsize", 10, 25, 2},
... ...
@@ -293,9 +294,10 @@ const struct cli_apicall cli_apicalls[]={
293 293
 	{"pdf_getobjflags", 10, 27, 2},
294 294
 	{"pdf_setobjflags", 11, 10, 0},
295 295
 	{"pdf_get_offset", 10, 28, 2},
296
-	{"pdf_get_phase", 9, 7, 5},
297
-	{"pdf_get_dumpedobjid", 9, 8, 5},
298
-	{"matchicon", 8, 2, 8}
296
+	{"pdf_get_phase", 8, 7, 5},
297
+	{"pdf_get_dumpedobjid", 8, 8, 5},
298
+	{"matchicon", 9, 2, 8},
299
+	{"running_on_jit", 8, 9, 5}
299 300
 /* Bytecode APIcalls END */
300 301
 };
301 302
 const cli_apicall_int2 cli_apicalls0[] = {
... ...
@@ -377,7 +379,8 @@ const cli_apicall_allocobj cli_apicalls5[] = {
377 377
 	(cli_apicall_allocobj)cli_bcapi_pdf_get_obj_num,
378 378
 	(cli_apicall_allocobj)cli_bcapi_pdf_get_flags,
379 379
 	(cli_apicall_allocobj)cli_bcapi_pdf_get_phase,
380
-	(cli_apicall_allocobj)cli_bcapi_pdf_get_dumpedobjid
380
+	(cli_apicall_allocobj)cli_bcapi_pdf_get_dumpedobjid,
381
+	(cli_apicall_allocobj)cli_bcapi_running_on_jit
381 382
 };
382 383
 const cli_apicall_bufget cli_apicalls6[] = {
383 384
 	(cli_apicall_bufget)cli_bcapi_buffer_pipe_read_get,
... ...
@@ -120,5 +120,6 @@ int32_t cli_bcapi_pdf_get_offset(struct cli_bc_ctx *ctx , int32_t);
120 120
 int32_t cli_bcapi_pdf_get_phase(struct cli_bc_ctx *ctx );
121 121
 int32_t cli_bcapi_pdf_get_dumpedobjid(struct cli_bc_ctx *ctx );
122 122
 int32_t cli_bcapi_matchicon(struct cli_bc_ctx *ctx , const uint8_t*, int32_t, const uint8_t*, int32_t);
123
+int32_t cli_bcapi_running_on_jit(struct cli_bc_ctx *ctx );
123 124
 
124 125
 #endif
... ...
@@ -34,8 +34,9 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
34 34
     for (i=0;i<bcs->count;i++) {
35 35
 	if (bcs->all_bcs[i].state == bc_skip)
36 36
 	    continue;
37
-	if (bcs->all_bcs[i].state != bc_loaded) {
38
-	    cli_warnmsg("Cannot prepare for JIT, because it has already been converted to interpreter");
37
+	if (bcs->all_bcs[i].state != bc_loaded &&
38
+	    bcs->all_bcs[i].kind != BC_STARTUP) {
39
+	    cli_warnmsg("Cannot prepare for JIT, because it has already been converted to interpreter\n");
39 40
 	    return CL_EBYTECODE;
40 41
 	}
41 42
     }
... ...
@@ -225,6 +225,8 @@ struct cli_bc_ctx {
225 225
     const struct cli_environment *env;
226 226
     unsigned bytecode_disable_status;
227 227
     cli_events_t *bc_events;
228
+    int on_jit;
229
+    int no_diff;
228 230
 };
229 231
 struct cli_all_bc;
230 232
 int cli_vm_execute(const struct cli_bc *bc, struct cli_bc_ctx *ctx, const struct cli_bc_func *func, const struct cli_bc_inst *inst);
... ...
@@ -2022,6 +2022,8 @@ int cli_bytecode_prepare_jit(struct cli_all_bc *bcs)
2022 2022
 
2023 2023
 	for (unsigned i=0;i<bcs->count;i++) {
2024 2024
 	    const struct cli_bc_func *func = &bcs->all_bcs[i].funcs[0];
2025
+	    if (bcs->all_bcs[i].state == bc_interp)
2026
+		continue; /* probably BC_STARTUP */
2025 2027
 	    bcs->engine->compiledFunctions[func] = EE->getPointerToFunction(Functions[i]);
2026 2028
 	    bcs->all_bcs[i].state = bc_jit;
2027 2029
 	}
... ...
@@ -67,6 +67,7 @@
67 67
 #include "default.h"
68 68
 #include "scanners.h"
69 69
 #include "bytecode.h"
70
+#include "bytecode_api_impl.h"
70 71
 
71 72
 int (*cli_unrar_open)(int fd, const char *dirname, unrar_state_t *state);
72 73
 int (*cli_unrar_extract_next_prepare)(unrar_state_t *state, const char *dirname);
... ...
@@ -261,6 +262,19 @@ int cl_init(unsigned int initoptions)
261 261
 	struct timeval tv;
262 262
 	unsigned int pid = (unsigned int) getpid();
263 263
 
264
+	const char *zlibver = zlibVersion();
265
+	int cmp = cli_bcapi_version_compare(NULL, zlibver, strlen(zlibver),
266
+					    ZLIB_VERSION, strlen(ZLIB_VERSION));
267
+	if (cmp) {
268
+	    cli_dbgmsg("zlib version at runtime: %s, compile time: %s\n",
269
+		       zlibver, ZLIB_VERSION);
270
+	}
271
+	if (cmp < 0) {
272
+	    cli_warnmsg("zlib version at runtime is older than compile time: %s < %s\n",
273
+			zlibver, ZLIB_VERSION);
274
+	    cli_infomsg(NULL, "Make sure zlib is built as shared library, and that the new zlib library is installed in the proper place\n");
275
+	}
276
+
264 277
     {
265 278
 	unrar_main_header_t x;
266 279
 	if (((char*)&x.flags - (char*)&x) != 3) {
... ...
@@ -899,7 +899,7 @@ static void pdf_parseobj(struct pdf_struct *pdf, struct pdf_obj *obj)
899 899
     dict_length = q3 - dict;
900 900
 
901 901
     /*  process pdf names */
902
-    for (q = dict;dict_length;) {
902
+    for (q = dict;dict_length > 0;) {
903 903
 	int escapes = 0;
904 904
 	q2 = memchr(q, '/', dict_length);
905 905
 	if (!q2)
... ...
@@ -907,7 +907,7 @@ static void pdf_parseobj(struct pdf_struct *pdf, struct pdf_obj *obj)
907 907
 	dict_length -= q2 - q;
908 908
 	q = q2;
909 909
 	/* normalize PDF names */
910
-	for (i = 0;dict_length && (i < sizeof(pdfname)-1); i++) {
910
+	for (i = 0;dict_length > 0 && (i < sizeof(pdfname)-1); i++) {
911 911
 	    q++;
912 912
 	    dict_length--;
913 913
 	    if (*q == '#') {
... ...
@@ -929,8 +929,8 @@ static void pdf_parseobj(struct pdf_struct *pdf, struct pdf_obj *obj)
929 929
 	    pdfobj_flag(pdf, obj, LINEARIZED_PDF);
930 930
 	    objstate = STATE_NONE;
931 931
 	}
932
-	if (objstate == STATE_JAVASCRIPT ||
933
-	    objstate == STATE_OPENACTION) {
932
+	if (dict_length > 0 && (objstate == STATE_JAVASCRIPT ||
933
+	    objstate == STATE_OPENACTION)) {
934 934
 	    if (objstate == STATE_OPENACTION)
935 935
 		pdfobj_flag(pdf, obj, HAS_OPENACTION);
936 936
 	    q2 = pdf_nextobject(q, dict_length);
... ...
@@ -941,7 +941,7 @@ static void pdf_parseobj(struct pdf_struct *pdf, struct pdf_obj *obj)
941 941
 		if (q2 && isdigit(*q2)) {
942 942
 		    objid |= atoi(q2) & 0xff;
943 943
 		    q2 = pdf_nextobject(q2, dict_length);
944
-		    if (*q2 == 'R') {
944
+		    if (q2 && *q2 == 'R') {
945 945
 			struct pdf_obj *obj2;
946 946
 			cli_dbgmsg("cli_pdf: found %s stored in indirect object %u %u\n",
947 947
 				   pdfname,
... ...
@@ -1043,7 +1043,7 @@ int cli_pdf(const char *dir, cli_ctx *ctx, off_t offset)
1043 1043
 	cli_dbgmsg("cli_pdf: %%%%EOF not found\n");
1044 1044
     } else {
1045 1045
 	const char *t;
1046
-	size = q - eofmap + map_off;
1046
+	/*size = q - eofmap + map_off;*/
1047 1047
 	q -= 9;
1048 1048
 	for (;q > eofmap;q--) {
1049 1049
 	    if (memcmp(q, "startxref", 9) == 0)
... ...
@@ -1636,6 +1636,7 @@ static int cli_scanembpe(cli_ctx *ctx, off_t offset)
1636 1636
 	char *buff;
1637 1637
 	char *tmpname;
1638 1638
 	fmap_t *map = *ctx->fmap;
1639
+	unsigned int corrupted_input;
1639 1640
 
1640 1641
     tmpname = cli_gentemp(ctx->engine->tmpdir);
1641 1642
     if(!tmpname)
... ...
@@ -1686,7 +1687,11 @@ static int cli_scanembpe(cli_ctx *ctx, off_t offset)
1686 1686
 
1687 1687
     ctx->recursion++;
1688 1688
     lseek(fd, 0, SEEK_SET);
1689
-    if((ret = cli_magic_scandesc(fd, ctx)) == CL_VIRUS) {
1689
+    corrupted_input = ctx->corrupted_input;
1690
+    ctx->corrupted_input = 1;
1691
+    ret = cli_magic_scandesc(fd, ctx);
1692
+    ctx->corrupted_input = corrupted_input;
1693
+    if(ret == CL_VIRUS) {
1690 1694
 	cli_dbgmsg("cli_scanembpe: Infected with %s\n", *ctx->virname);
1691 1695
 	close(fd);
1692 1696
 	if(!ctx->engine->keeptmp) {
... ...
@@ -47,7 +47,7 @@ die()
47 47
 
48 48
 # Setup test directory to avoid temporary and output file clashes
49 49
 test_start() {
50
-    ulimit -t 120; ulimit -d 512000;
50
+    ulimit -t 120 || true; ulimit -d 512000 || true;
51 51
     ulimit -v 512000 || true;
52 52
     (cd test-$1 2>/dev/null && killclamd || true)
53 53
     rm -rf test-$1
... ...
@@ -2,7 +2,7 @@
2 2
 # Helper script to run a program under electric-fence / duma
3 3
 
4 4
 # prevent core dumps
5
-ulimit -c 0
5
+ulimit -c 0 || true
6 6
 LD_PRELOAD=$LIBPRELOAD
7 7
 export LD_PRELOAD
8 8
 export CK_DEFAULT_TIMEOUT=40