<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>201656</bug_id>
          
          <creation_ts>2007-12-08 07:56 0000</creation_ts>
          <short_desc>mail-filter/dspam-3.8.0-r8: hash_drv housekeeping (cssclean, csscompress) failures</short_desc>
          <delta_ts>2007-12-12 06:45:19 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Applications</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>dirk-s@muenster.de</reporter>
          <assigned_to>mrness@gentoo.org</assigned_to>
          <cc>steeeeeveee@gmx.net</cc>

      

      
          <long_desc isprivate="0">
            <who>dirk-s@muenster.de</who>
            <bug_when>2007-12-08 07:56:22 0000</bug_when>
            <thetext>The housekeeping jobs (dspam.cron) calls cssclean and csscompress to clean the *.css files. 

1. csscompress gives an error when /tmp is mounted seperately cause the temp-file is just renamed:
rename(/tmp/12233.css, /var/spool/dspam/data/local/dirk/dirk.css): Invalid cross-device link

Solution: Save the temp css file in the same directory as the real css file. The temp file has the name PID.css so it will not conflict with any other file name (see cssclean.c).

2. csscompress: no lock file is written. Is that needed

3. cssclean: lock file is in wrong directory:
open(&quot;/var/spool/dspam/data/local/data/local/dirk/dirk.lock&quot;, O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
open(&quot;/var/spool/dspam/data/local/dirk/dirk.css&quot;, O_RDWR) = 4

4. cssclean: File permissions of *.css files are wrong after usage:
-rw-r--r-- 1 root root  4837344  8. Dez 08:44 dirk.css

Before running cssclean it was: -rw-rw---- 1 dirk dspam

5. cssclean re-initializes the header counters thus causing dspam to return to training mode even though there is a good history remaining. 
dirk
    TP:     0 TN:     0 FP:     0 FN:     0 SC:     0 NC:     0

Solution: 
&gt; filepos += sizeof(struct _hash_drv_header); 
&gt; } 
&gt; + bcopy (old.header, new.header, sizeof(struct _hash_drv_header)); 
&gt; _ hash_drv_close(&amp;new);


Reproducible: Always

Steps to Reproduce:</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2007-12-08 09:15:08 0000</bug_when>
            <thetext>*** Bug 201660 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mrness@gentoo.org</who>
            <bug_when>2007-12-09 11:35:46 0000</bug_when>
            <thetext>1 and 2) csscompress should probably be removed.

3) I will attach a patch shortly

4) that is impossible. cssclean preserve owner, group and mode of css files.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mrness@gentoo.org</who>
            <bug_when>2007-12-09 11:37:20 0000</bug_when>
            <thetext>Created an attachment (id=138068)
cssclean.patch

Please do the following:
  ebuild dspam-3.8.0-r8.ebuild unpack
  apply this patch
  ebuild dspam-3.8.0-r8.ebuild merge
and see if it solves cssclean&apos;s problems.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mrness@gentoo.org</who>
            <bug_when>2007-12-09 11:42:30 0000</bug_when>
            <thetext>Created an attachment (id=138070)
cssclean.patch

Improved patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>dirk-s@muenster.de</who>
            <bug_when>2007-12-09 12:37:16 0000</bug_when>
            <thetext>1. solved
3. lockfile is in same directory as *css
4. csscompress is changing permissions -&gt; my fault
5. headers are fine

If cssclean is doing the job we should remove csscompress from dspam.cron?

csscompress still lacks lock file, preserve owner, .... and header. At least the delete header bug should be fixed.

Thanks for your help!
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mrness@gentoo.org</who>
            <bug_when>2007-12-11 20:55:21 0000</bug_when>
            <thetext>Fixed in -r9, which no longer installs csscompress.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>steeeeeveee@gmx.net</who>
            <bug_when>2007-12-12 01:03:57 0000</bug_when>
            <thetext>Why so fast?

cssclean and csscompress do not do the same.
cssclean: rebuilds the hash database, omitting hapaxes.
csscompress: compresses a hash databases extents.

Using cssclean degenerates the learning because hapaxes tokens get deleted. csscompress on the other hand just compresses the hash databases extents.

It is not exactly the same.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mrness@gentoo.org</who>
            <bug_when>2007-12-12 06:08:24 0000</bug_when>
            <thetext>The only difference between cssclean and csscompress is hapaxes removal, therefore the csscompress execution in cron script was of no consequences. 
While I agree that hapaxes shouldn&apos;t be removed on a daily basis, having another program that simply don&apos;t do that is hardly a solution. The solution would require a &quot;last update&quot; field stored in hash records.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>steeeeeveee@gmx.net</who>
            <bug_when>2007-12-12 06:15:18 0000</bug_when>
            <thetext>(In reply to comment #8)
&gt; The only difference between cssclean and csscompress is hapaxes removal,
&gt; therefore the csscompress execution in cron script was of no consequences. 
&gt; While I agree that hapaxes shouldn&apos;t be removed on a daily basis, having
&gt; another program that simply don&apos;t do that is hardly a solution. The solution
&gt; would require a &quot;last update&quot; field stored in hash records.
&gt; 
The CSS (CRM114 Sparse Spectra) storage does not have that feature. Date/time is irrelevant for CSS.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mrness@gentoo.org</who>
            <bug_when>2007-12-12 06:29:09 0000</bug_when>
            <thetext>(In reply to comment #9)
&gt; The CSS (CRM114 Sparse Spectra) storage does not have that feature. Date/time
&gt; is irrelevant for CSS.

This field would be used only for deciding if hash records can to be removed or not. Otherwise you get stuck with this half baked cssclean.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>steeeeeveee@gmx.net</who>
            <bug_when>2007-12-12 06:45:19 0000</bug_when>
            <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; The CSS (CRM114 Sparse Spectra) storage does not have that feature. Date/time
&gt; &gt; is irrelevant for CSS.
&gt; 
&gt; This field would be used only for deciding if hash records can to be removed or
&gt; not. Otherwise you get stuck with this half baked cssclean.
&gt; 
I know but this would break the compatibility to CRM114.
</thetext>
          </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138068</attachid>
            <date>2007-12-09 11:37 0000</date>
            <desc>cssclean.patch</desc>
            <filename>cssclean.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTnJ1IGRzcGFtLTMuOC4wLm9yaWcvc3JjL2hhc2hfZHJ2LmMgZHNwYW0tMy44LjAvc3Jj
L2hhc2hfZHJ2LmMKLS0tIGRzcGFtLTMuOC4wLm9yaWcvc3JjL2hhc2hfZHJ2LmMJMjAwNy0xMi0w
OSAxMzoyNDo1NS4wMDAwMDAwMDAgKzAyMDAKKysrIGRzcGFtLTMuOC4wL3NyYy9oYXNoX2Rydi5j
CTIwMDctMTItMDkgMTM6MjU6NDYuMDAwMDAwMDAwICswMjAwCkBAIC0yNTEsMTQgKzI1MSwxNCBA
QAogCiBpbnQKIF9oYXNoX2Rydl9sb2NrX2dldCAoCi0gIGNvbnN0IGNoYXIgKmhvbWUsCisgIERT
UEFNX0NUWCAqQ1RYLAogICBzdHJ1Y3QgX2hhc2hfZHJ2X3N0b3JhZ2UgKnMsCiAgIGNvbnN0IGNo
YXIgKnVzZXJuYW1lKQogewogICBjaGFyIGZpbGVuYW1lW01BWF9GSUxFTkFNRV9MRU5HVEhdOwog
ICBpbnQgcjsKIAotICBfZHNfdXNlcmRpcl9wYXRoKGZpbGVuYW1lLCBob21lLCB1c2VybmFtZSwg
ImxvY2siKTsKKyAgX2RzX3VzZXJkaXJfcGF0aChmaWxlbmFtZSwgQ1RYLT5ob21lLCB1c2VybmFt
ZSwgImxvY2siKTsKICAgX2RzX3ByZXBhcmVfcGF0aF9mb3IoZmlsZW5hbWUpOwogCiAgIHMtPmxv
Y2sgPSBmb3BlbihmaWxlbmFtZSwgImEiKTsKQEAgLTI5NCw2ICsyOTQsNTcgQEAKICAgcmV0dXJu
IHI7CiB9CiAKK0ZJTEUqCitfaGFzaF90b29sc19sb2NrX2dldCAoY29uc3QgY2hhciAqY3NzZmls
ZW5hbWUpCit7CisgIGNoYXIgZmlsZW5hbWVbTUFYX0ZJTEVOQU1FX0xFTkdUSF07CisgIGNoYXIg
KnBQZXJpb2Q7CisgIGludCByOworICBGSUxFKiBsb2NrZmlsZSA9IE5VTEw7CisKKyAgaWYgKGNz
c2ZpbGVuYW1lID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisgIHBQZXJpb2QgPSBzdHJyY2hy
KGNzc2ZpbGVuYW1lLCAnLicpOworICBpZiAocFBlcmlvZCA9PSBOVUxMIHx8IHN0cmNtcChwUGVy
aW9kICsgMSwgImNzcyIpIHx8IHBQZXJpb2QgLSBjc3NmaWxlbmFtZSArIDUgPj0gc2l6ZW9mKGZp
bGVuYW1lKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgc3RybmNweShmaWxlbmFtZSwgY3NzZmlsZW5h
bWUsIHBQZXJpb2QgLSBjc3NmaWxlbmFtZSArIDEpOworICBzdHJjcHkoZmlsZW5hbWUgKyAocFBl
cmlvZCAtIGNzc2ZpbGVuYW1lICsgMSksICJsb2NrIik7CisgIF9kc19wcmVwYXJlX3BhdGhfZm9y
KGZpbGVuYW1lKTsKKworICBsb2NrZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOworICBpZiAo
bG9ja2ZpbGUgPT0gTlVMTCkgeworICAgIExPRyhMT0dfRVJSLCBFUlJfSU9fRklMRV9PUEVOLCBm
aWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByID0g
X2RzX2dldF9mY250bF9sb2NrKGZpbGVubyhsb2NrZmlsZSkpOworICBpZiAocikgeworICAgIGZj
bG9zZShsb2NrZmlsZSk7CisJbG9ja2ZpbGUgPSBOVUxMOworICAgIExPRyhMT0dfRVJSLCBFUlJf
SU9fTE9DSywgZmlsZW5hbWUsIHIsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKyAgcmV0dXJuIGxv
Y2tmaWxlOworfQorCitpbnQKK19oYXNoX3Rvb2xzX2xvY2tfZnJlZSAoCisgIGNvbnN0IGNoYXIg
KmNzc2ZpbGVuYW1lLAorICBGSUxFKiBsb2NrZmlsZSkKK3sKKyAgaW50IHI7CisKKyAgaWYgKGNz
c2ZpbGVuYW1lID09IE5VTEwgfHwgbG9ja2ZpbGUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKwor
ICByID0gX2RzX2ZyZWVfZmNudGxfbG9jayhmaWxlbm8obG9ja2ZpbGUpKTsKKyAgaWYgKCFyKSB7
CisgICAgZmNsb3NlKGxvY2tmaWxlKTsKKyAgfSBlbHNlIHsKKyAgICBMT0coTE9HX0VSUiwgRVJS
X0lPX0xPQ0tfRlJFRSwgY3NzZmlsZW5hbWUsIHIsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKwor
ICByZXR1cm4gcjsKK30KKwogaW50IF9oYXNoX2Rydl9vcGVuKAogICBjb25zdCBjaGFyICpmaWxl
bmFtZSwgCiAgIGhhc2hfZHJ2X21hcF90IG1hcCwgCkBAIC00OTAsNyArNTQxLDcgQEAKICAgICBl
bHNlCiAgICAgICBfZHNfdXNlcmRpcl9wYXRoKGRiLCBDVFgtPmhvbWUsIENUWC0+Z3JvdXAsICJj
c3MiKTsKIAotICAgIGxvY2tfcmVzdWx0ID0gX2hhc2hfZHJ2X2xvY2tfZ2V0IChDVFgtPmhvbWUs
IHMsIAorICAgIGxvY2tfcmVzdWx0ID0gX2hhc2hfZHJ2X2xvY2tfZ2V0IChDVFgsIHMsIAogICAg
ICAgKENUWC0+Z3JvdXApID8gQ1RYLT5ncm91cCA6IENUWC0+dXNlcm5hbWUpOwogICAgIGlmIChs
b2NrX3Jlc3VsdCA8IDApIAogICAgICAgZ290byBCQUlMOwpkaWZmIC1OcnUgZHNwYW0tMy44LjAu
b3JpZy9zcmMvaGFzaF9kcnYuaCBkc3BhbS0zLjguMC9zcmMvaGFzaF9kcnYuaAotLS0gZHNwYW0t
My44LjAub3JpZy9zcmMvaGFzaF9kcnYuaAkyMDA3LTEyLTA5IDEzOjI0OjU1LjAwMDAwMDAwMCAr
MDIwMAorKysgZHNwYW0tMy44LjAvc3JjL2hhc2hfZHJ2LmgJMjAwNy0xMi0wOSAxMzoyNTo0Ni4w
MDAwMDAwMDAgKzAyMDAKQEAgLTg4LDcgKzg4LDcgQEAKICAgKERTUEFNX0NUWCAqIENUWCk7CiAK
IGludCBfaGFzaF9kcnZfbG9ja19nZXQgKAotICBjb25zdCBjaGFyICpob21lLCAKKyAgRFNQQU1f
Q1RYICpDVFgsCiAgIHN0cnVjdCBfaGFzaF9kcnZfc3RvcmFnZSAqcywgCiAgIGNvbnN0IGNoYXIg
KnVzZXJuYW1lKTsKIApAQCAtOTYsNiArOTYsMTMgQEAKICAgc3RydWN0IF9oYXNoX2Rydl9zdG9y
YWdlICpzLAogICBjb25zdCBjaGFyICp1c2VybmFtZSk7CiAKKy8qIGxvY2sgdmFyaWFudCB1c2Vk
IGJ5IGNzcyB0b29scyAqLworRklMRSogX2hhc2hfdG9vbHNfbG9ja19nZXQgKGNvbnN0IGNoYXIg
KmNzc2ZpbGVuYW1lKTsKKworaW50IF9oYXNoX3Rvb2xzX2xvY2tfZnJlZSAoCisgIGNvbnN0IGNo
YXIgKmNzc2ZpbGVuYW1lLAorICBGSUxFKiBsb2NrZmlsZSk7CisKIGludCBfaGFzaF9kcnZfb3Bl
bigKICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgIGhhc2hfZHJ2X21hcF90IG1hcCwKZGlmZiAt
TnJ1IGRzcGFtLTMuOC4wLm9yaWcvc3JjL3Rvb2xzLmhhc2hfZHJ2L2Nzc2NsZWFuLmMgZHNwYW0t
My44LjAvc3JjL3Rvb2xzLmhhc2hfZHJ2L2Nzc2NsZWFuLmMKLS0tIGRzcGFtLTMuOC4wLm9yaWcv
c3JjL3Rvb2xzLmhhc2hfZHJ2L2Nzc2NsZWFuLmMJMjAwNy0xMi0wOSAxMzoyNDo1NS4wMDAwMDAw
MDAgKzAyMDAKKysrIGRzcGFtLTMuOC4wL3NyYy90b29scy5oYXNoX2Rydi9jc3NjbGVhbi5jCTIw
MDctMTItMDkgMTM6MTU6MjIuMDAwMDAwMDAwICswMjAwCkBAIC05NywxNCArOTcsMTMgQEAKIGlu
dCBjc3NjbGVhbihjb25zdCBjaGFyICpmaWxlbmFtZSkgewogICBpbnQgaTsKICAgaGFzaF9kcnZf
aGVhZGVyX3QgaGVhZGVyOwotICBzdHJ1Y3QgX2hhc2hfZHJ2X3N0b3JhZ2UgczsKKyAgRklMRSog
bG9ja2ZpbGU7CiAgIHZvaWQgKm9mZnNldDsKICAgc3RydWN0IF9oYXNoX2Rydl9tYXAgb2xkLCBu
ZXc7CiAgIGhhc2hfZHJ2X3NwYW1fcmVjb3JkX3QgcmVjOwogICB1bnNpZ25lZCBsb25nIGZpbGVw
b3M7Ci0gIGNoYXIgbmV3ZmlsZVtQQVRIX01BWF07Ci0gIGNoYXIgKm9sZGZpbGU7Ci0gIGNoYXIg
KmhvbWUsICp1c2VybmFtZTsKKyAgY2hhciAqZGlyID0gTlVMTDsKKyAgY2hhciAqbmV3ZmlsZSA9
IE5VTEw7CiAgIHN0cnVjdCBzdGF0IHN0OwogCiAgIHVuc2lnbmVkIGxvbmcgaGFzaF9yZWNfbWF4
ID0gSEFTSF9SRUNfTUFYOwpAQCAtMTM4LDUxICsxMzcsNDYgQEAKICAgaWYgKFJFQURfQVRUUklC
KCJIYXNoTWF4U2VlayIpKQogICAgICBtYXhfc2VlayA9IHN0cnRvbChSRUFEX0FUVFJJQigiSGFz
aE1heFNlZWsiKSwgTlVMTCwgMCk7CiAKLSAgb2xkZmlsZSA9IHN0cmR1cChmaWxlbmFtZSk7Ci0g
IGlmICghb2xkZmlsZSkKKyAgaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkgPCAwKQogICAgIHJldHVy
biBFRkFJTFVSRTsKLSAgb2xkZmlsZSA9IGRpcm5hbWUob2xkZmlsZSk7CQkvKiBvbGRmaWxlIG1h
eSBub3QgYmUgZnJlZSdkIG5vdyAqLwotICBzbnByaW50ZihuZXdmaWxlLCBzaXplb2YobmV3Zmls
ZSksICIlcy8ldS5jc3MiLCBvbGRmaWxlLCAodW5zaWduZWQgaW50KSBnZXRwaWQoKSk7CiAKLSAg
Lyogc2V0IGhvbWUgYW5kIHVzZXJuYW1lICovCi0gIHVzZXJuYW1lID0gc3RyZHVwKG9sZGZpbGUp
OwotICBob21lID0gc3RyZHVwKG9sZGZpbGUpOwotICBpZiAoIXVzZXJuYW1lIHx8ICFob21lKQot
ICAgIHJldHVybiBFRkFJTFVSRTsKLSAgdXNlcm5hbWUgPSBiYXNlbmFtZSh1c2VybmFtZSk7CS8q
IHVzZXJuYW1lIG1heSBub3QgYmUgZnJlZSdkIG5vdyAqLwotICBob21lID0gZGlybmFtZShob21l
KTsJCQkvKiBob21lIG1heSBub3QgYmUgZnJlZSdkIG5vdyAqLwotICAvKiBtYWtlIHN1cmUgYXQg
bGVhc3QgL3R3by9kaXJzL3RvLmNzcyBmb3Igc2FuZSBvcGVyYXRpb24gKi8KLSAgaWYgKCFzdHJj
bXAodXNlcm5hbWUsIGhvbWUpKQorICAvKiBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSBuYW1lICov
CisgIGRpciA9IHN0cmR1cChmaWxlbmFtZSk7CisgIGlmIChkaXIgPT0gTlVMTCkKICAgICByZXR1
cm4gRUZBSUxVUkU7Ci0KLSAgaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkgPCAwKQorICBuZXdmaWxl
ID0gdGVtcG5hbShkaXJuYW1lKGRpciksICJjc3MiKTsKKyAgaWYgKG5ld2ZpbGUgPT0gTlVMTCkK
ICAgICByZXR1cm4gRUZBSUxVUkU7CiAKLSAgaWYgKF9oYXNoX2Rydl9sb2NrX2dldCAoaG9tZSwg
JnMsIHVzZXJuYW1lKSA8IDApCisgIGxvY2tmaWxlID0gX2hhc2hfdG9vbHNfbG9ja19nZXQgKGZp
bGVuYW1lKTsKKyAgaWYgKGxvY2tmaWxlID09IE5VTEwpCiAgICAgcmV0dXJuIEVGQUlMVVJFOwog
CiAgIGlmIChfaGFzaF9kcnZfb3BlbihmaWxlbmFtZSwgJm9sZCwgMCwgbWF4X3NlZWssCiAgICAg
ICAgICAgICAgICAgICAgICBtYXhfZXh0ZW50cywgZXh0ZW50X3NpemUsIHBjdGluY3JlYXNlLCBm
bGFncykpCi0gICAgZ290byB1bmxvY2s7CisgICAgZ290byBlbmQ7CiAKICAgaWYgKF9oYXNoX2Ry
dl9vcGVuKG5ld2ZpbGUsICZuZXcsIGhhc2hfcmVjX21heCwgbWF4X3NlZWssCiAgICAgICAgICAg
ICAgICAgICAgICBtYXhfZXh0ZW50cywgZXh0ZW50X3NpemUsIHBjdGluY3JlYXNlLCBmbGFncykp
IHsKICAgICBfaGFzaF9kcnZfY2xvc2UoJm9sZCk7Ci0gICAgZ290byB1bmxvY2s7CisgICAgZ290
byBlbmQ7CiAgIH0KKyAgCisgIC8qIHByZXNlcnZlIGNvdW50ZXJzICovCisgIG1lbWNweShuZXcu
aGVhZGVyLCBvbGQuaGVhZGVyLCBzaXplb2YoKm5ldy5oZWFkZXIpKTsKIAogICBpZiAoZmNob3du
KG5ldy5mZCwgc3Quc3RfdWlkLCBzdC5zdF9naWQpIDwgMCkgewogICAgIF9oYXNoX2Rydl9jbG9z
ZSgmbmV3KTsKICAgICBfaGFzaF9kcnZfY2xvc2UoJm9sZCk7CiAgICAgdW5saW5rKG5ld2ZpbGUp
OwotICAgIGdvdG8gdW5sb2NrOworICAgIGdvdG8gZW5kOwogICB9CiAKICAgaWYgKGZjaG1vZChu
ZXcuZmQsIHN0LnN0X21vZGUpIDwgMCkgewogICAgIF9oYXNoX2Rydl9jbG9zZSgmbmV3KTsKICAg
ICBfaGFzaF9kcnZfY2xvc2UoJm9sZCk7CiAgICAgdW5saW5rKG5ld2ZpbGUpOwotICAgIGdvdG8g
dW5sb2NrOworICAgIGdvdG8gZW5kOwogICB9CiAKICAgZmlsZXBvcyA9IHNpemVvZihzdHJ1Y3Qg
X2hhc2hfZHJ2X2hlYWRlcik7CkBAIC0xOTYsNyArMTkwLDcgQEAKICAgICAgICAgICBfaGFzaF9k
cnZfY2xvc2UoJm5ldyk7CiAgICAgICAgICAgX2hhc2hfZHJ2X2Nsb3NlKCZvbGQpOwogICAgICAg
ICAgIHVubGluayhuZXdmaWxlKTsKLSAgICAgICAgICBnb3RvIHVubG9jazsKKyAgICAgICAgICBn
b3RvIGVuZDsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZmlsZXBvcyArPSBzaXplb2Yoc3Ry
dWN0IF9oYXNoX2Rydl9zcGFtX3JlY29yZCk7CkBAIC0yMDksMTEgKzIwMywxNSBAQAogICBfaGFz
aF9kcnZfY2xvc2UoJm5ldyk7CiAgIF9oYXNoX2Rydl9jbG9zZSgmb2xkKTsKICAgaWYgKHJlbmFt
ZShuZXdmaWxlLCBmaWxlbmFtZSkgPCAwKQotICAgIGdvdG8gdW5sb2NrOworICAgIGdvdG8gZW5k
OwogICByYyA9IDA7CiAKLXVubG9jazoKLSAgX2hhc2hfZHJ2X2xvY2tfZnJlZSgmcywgdXNlcm5h
bWUpOworZW5kOgorICBpZiAoZGlyKQorICAgIGZyZWUoZGlyKTsKKyAgaWYgKG5ld2ZpbGUpCisg
ICAgZnJlZShuZXdmaWxlKTsKKyAgX2hhc2hfdG9vbHNfbG9ja19mcmVlKGZpbGVuYW1lLCBsb2Nr
ZmlsZSk7CiAgIHJldHVybiByYzsKIH0KIAo=
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138070</attachid>
            <date>2007-12-09 11:42 0000</date>
            <desc>cssclean.patch</desc>
            <filename>cssclean.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTnJ1IGRzcGFtLTMuOC4wLm9yaWcvc3JjL2hhc2hfZHJ2LmMgZHNwYW0tMy44LjAvc3Jj
L2hhc2hfZHJ2LmMKLS0tIGRzcGFtLTMuOC4wLm9yaWcvc3JjL2hhc2hfZHJ2LmMJMjAwNy0xMi0w
OSAxMzozOTozNy4wMDAwMDAwMDAgKzAyMDAKKysrIGRzcGFtLTMuOC4wL3NyYy9oYXNoX2Rydi5j
CTIwMDctMTItMDkgMTM6NDA6MjcuMDAwMDAwMDAwICswMjAwCkBAIC0yNTEsMTQgKzI1MSwxNCBA
QAogCiBpbnQKIF9oYXNoX2Rydl9sb2NrX2dldCAoCi0gIGNvbnN0IGNoYXIgKmhvbWUsCisgIERT
UEFNX0NUWCAqQ1RYLAogICBzdHJ1Y3QgX2hhc2hfZHJ2X3N0b3JhZ2UgKnMsCiAgIGNvbnN0IGNo
YXIgKnVzZXJuYW1lKQogewogICBjaGFyIGZpbGVuYW1lW01BWF9GSUxFTkFNRV9MRU5HVEhdOwog
ICBpbnQgcjsKIAotICBfZHNfdXNlcmRpcl9wYXRoKGZpbGVuYW1lLCBob21lLCB1c2VybmFtZSwg
ImxvY2siKTsKKyAgX2RzX3VzZXJkaXJfcGF0aChmaWxlbmFtZSwgQ1RYLT5ob21lLCB1c2VybmFt
ZSwgImxvY2siKTsKICAgX2RzX3ByZXBhcmVfcGF0aF9mb3IoZmlsZW5hbWUpOwogCiAgIHMtPmxv
Y2sgPSBmb3BlbihmaWxlbmFtZSwgImEiKTsKQEAgLTI5NCw2ICsyOTQsNTcgQEAKICAgcmV0dXJu
IHI7CiB9CiAKK0ZJTEUqCitfaGFzaF90b29sc19sb2NrX2dldCAoY29uc3QgY2hhciAqY3NzZmls
ZW5hbWUpCit7CisgIGNoYXIgZmlsZW5hbWVbTUFYX0ZJTEVOQU1FX0xFTkdUSF07CisgIGNoYXIg
KnBQZXJpb2Q7CisgIGludCByOworICBGSUxFKiBsb2NrZmlsZSA9IE5VTEw7CisKKyAgaWYgKGNz
c2ZpbGVuYW1lID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisgIHBQZXJpb2QgPSBzdHJyY2hy
KGNzc2ZpbGVuYW1lLCAnLicpOworICBpZiAocFBlcmlvZCA9PSBOVUxMIHx8IHN0cmNtcChwUGVy
aW9kICsgMSwgImNzcyIpIHx8IHBQZXJpb2QgLSBjc3NmaWxlbmFtZSArIDUgPj0gc2l6ZW9mKGZp
bGVuYW1lKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgc3RybmNweShmaWxlbmFtZSwgY3NzZmlsZW5h
bWUsIHBQZXJpb2QgLSBjc3NmaWxlbmFtZSArIDEpOworICBzdHJjcHkoZmlsZW5hbWUgKyAocFBl
cmlvZCAtIGNzc2ZpbGVuYW1lICsgMSksICJsb2NrIik7CisgIF9kc19wcmVwYXJlX3BhdGhfZm9y
KGZpbGVuYW1lKTsKKworICBsb2NrZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOworICBpZiAo
bG9ja2ZpbGUgPT0gTlVMTCkgeworICAgIExPRyhMT0dfRVJSLCBFUlJfSU9fRklMRV9PUEVOLCBm
aWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByID0g
X2RzX2dldF9mY250bF9sb2NrKGZpbGVubyhsb2NrZmlsZSkpOworICBpZiAocikgeworICAgIGZj
bG9zZShsb2NrZmlsZSk7CisJbG9ja2ZpbGUgPSBOVUxMOworICAgIExPRyhMT0dfRVJSLCBFUlJf
SU9fTE9DSywgZmlsZW5hbWUsIHIsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKyAgcmV0dXJuIGxv
Y2tmaWxlOworfQorCitpbnQKK19oYXNoX3Rvb2xzX2xvY2tfZnJlZSAoCisgIGNvbnN0IGNoYXIg
KmNzc2ZpbGVuYW1lLAorICBGSUxFKiBsb2NrZmlsZSkKK3sKKyAgaW50IHI7CisKKyAgaWYgKGNz
c2ZpbGVuYW1lID09IE5VTEwgfHwgbG9ja2ZpbGUgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKwor
ICByID0gX2RzX2ZyZWVfZmNudGxfbG9jayhmaWxlbm8obG9ja2ZpbGUpKTsKKyAgaWYgKCFyKSB7
CisgICAgZmNsb3NlKGxvY2tmaWxlKTsKKyAgfSBlbHNlIHsKKyAgICBMT0coTE9HX0VSUiwgRVJS
X0lPX0xPQ0tfRlJFRSwgY3NzZmlsZW5hbWUsIHIsIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKwor
ICByZXR1cm4gcjsKK30KKwogaW50IF9oYXNoX2Rydl9vcGVuKAogICBjb25zdCBjaGFyICpmaWxl
bmFtZSwgCiAgIGhhc2hfZHJ2X21hcF90IG1hcCwgCkBAIC00OTAsNyArNTQxLDcgQEAKICAgICBl
bHNlCiAgICAgICBfZHNfdXNlcmRpcl9wYXRoKGRiLCBDVFgtPmhvbWUsIENUWC0+Z3JvdXAsICJj
c3MiKTsKIAotICAgIGxvY2tfcmVzdWx0ID0gX2hhc2hfZHJ2X2xvY2tfZ2V0IChDVFgtPmhvbWUs
IHMsIAorICAgIGxvY2tfcmVzdWx0ID0gX2hhc2hfZHJ2X2xvY2tfZ2V0IChDVFgsIHMsIAogICAg
ICAgKENUWC0+Z3JvdXApID8gQ1RYLT5ncm91cCA6IENUWC0+dXNlcm5hbWUpOwogICAgIGlmIChs
b2NrX3Jlc3VsdCA8IDApIAogICAgICAgZ290byBCQUlMOwpkaWZmIC1OcnUgZHNwYW0tMy44LjAu
b3JpZy9zcmMvaGFzaF9kcnYuaCBkc3BhbS0zLjguMC9zcmMvaGFzaF9kcnYuaAotLS0gZHNwYW0t
My44LjAub3JpZy9zcmMvaGFzaF9kcnYuaAkyMDA3LTEyLTA5IDEzOjM5OjM3LjAwMDAwMDAwMCAr
MDIwMAorKysgZHNwYW0tMy44LjAvc3JjL2hhc2hfZHJ2LmgJMjAwNy0xMi0wOSAxMzo0MDoyNy4w
MDAwMDAwMDAgKzAyMDAKQEAgLTg4LDcgKzg4LDcgQEAKICAgKERTUEFNX0NUWCAqIENUWCk7CiAK
IGludCBfaGFzaF9kcnZfbG9ja19nZXQgKAotICBjb25zdCBjaGFyICpob21lLCAKKyAgRFNQQU1f
Q1RYICpDVFgsCiAgIHN0cnVjdCBfaGFzaF9kcnZfc3RvcmFnZSAqcywgCiAgIGNvbnN0IGNoYXIg
KnVzZXJuYW1lKTsKIApAQCAtOTYsNiArOTYsMTMgQEAKICAgc3RydWN0IF9oYXNoX2Rydl9zdG9y
YWdlICpzLAogICBjb25zdCBjaGFyICp1c2VybmFtZSk7CiAKKy8qIGxvY2sgdmFyaWFudCB1c2Vk
IGJ5IGNzcyB0b29scyAqLworRklMRSogX2hhc2hfdG9vbHNfbG9ja19nZXQgKGNvbnN0IGNoYXIg
KmNzc2ZpbGVuYW1lKTsKKworaW50IF9oYXNoX3Rvb2xzX2xvY2tfZnJlZSAoCisgIGNvbnN0IGNo
YXIgKmNzc2ZpbGVuYW1lLAorICBGSUxFKiBsb2NrZmlsZSk7CisKIGludCBfaGFzaF9kcnZfb3Bl
bigKICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgIGhhc2hfZHJ2X21hcF90IG1hcCwKZGlmZiAt
TnJ1IGRzcGFtLTMuOC4wLm9yaWcvc3JjL3Rvb2xzLmhhc2hfZHJ2L2Nzc2NsZWFuLmMgZHNwYW0t
My44LjAvc3JjL3Rvb2xzLmhhc2hfZHJ2L2Nzc2NsZWFuLmMKLS0tIGRzcGFtLTMuOC4wLm9yaWcv
c3JjL3Rvb2xzLmhhc2hfZHJ2L2Nzc2NsZWFuLmMJMjAwNy0xMi0wOSAxMzozOTozNy4wMDAwMDAw
MDAgKzAyMDAKKysrIGRzcGFtLTMuOC4wL3NyYy90b29scy5oYXNoX2Rydi9jc3NjbGVhbi5jCTIw
MDctMTItMDkgMTM6NDE6MTQuMDAwMDAwMDAwICswMjAwCkBAIC05NywxNCArOTcsMTMgQEAKIGlu
dCBjc3NjbGVhbihjb25zdCBjaGFyICpmaWxlbmFtZSkgewogICBpbnQgaTsKICAgaGFzaF9kcnZf
aGVhZGVyX3QgaGVhZGVyOwotICBzdHJ1Y3QgX2hhc2hfZHJ2X3N0b3JhZ2UgczsKKyAgRklMRSog
bG9ja2ZpbGU7CiAgIHZvaWQgKm9mZnNldDsKICAgc3RydWN0IF9oYXNoX2Rydl9tYXAgb2xkLCBu
ZXc7CiAgIGhhc2hfZHJ2X3NwYW1fcmVjb3JkX3QgcmVjOwogICB1bnNpZ25lZCBsb25nIGZpbGVw
b3M7Ci0gIGNoYXIgbmV3ZmlsZVtQQVRIX01BWF07Ci0gIGNoYXIgKm9sZGZpbGU7Ci0gIGNoYXIg
KmhvbWUsICp1c2VybmFtZTsKKyAgY2hhciAqZGlyID0gTlVMTDsKKyAgY2hhciAqbmV3ZmlsZSA9
IE5VTEw7CiAgIHN0cnVjdCBzdGF0IHN0OwogCiAgIHVuc2lnbmVkIGxvbmcgaGFzaF9yZWNfbWF4
ID0gSEFTSF9SRUNfTUFYOwpAQCAtMTM4LDUxICsxMzcsNDYgQEAKICAgaWYgKFJFQURfQVRUUklC
KCJIYXNoTWF4U2VlayIpKQogICAgICBtYXhfc2VlayA9IHN0cnRvbChSRUFEX0FUVFJJQigiSGFz
aE1heFNlZWsiKSwgTlVMTCwgMCk7CiAKLSAgb2xkZmlsZSA9IHN0cmR1cChmaWxlbmFtZSk7Ci0g
IGlmICghb2xkZmlsZSkKLSAgICByZXR1cm4gRUZBSUxVUkU7Ci0gIG9sZGZpbGUgPSBkaXJuYW1l
KG9sZGZpbGUpOwkJLyogb2xkZmlsZSBtYXkgbm90IGJlIGZyZWUnZCBub3cgKi8KLSAgc25wcmlu
dGYobmV3ZmlsZSwgc2l6ZW9mKG5ld2ZpbGUpLCAiJXMvJXUuY3NzIiwgb2xkZmlsZSwgKHVuc2ln
bmVkIGludCkgZ2V0cGlkKCkpOwotCi0gIC8qIHNldCBob21lIGFuZCB1c2VybmFtZSAqLwotICB1
c2VybmFtZSA9IHN0cmR1cChvbGRmaWxlKTsKLSAgaG9tZSA9IHN0cmR1cChvbGRmaWxlKTsKLSAg
aWYgKCF1c2VybmFtZSB8fCAhaG9tZSkKLSAgICByZXR1cm4gRUZBSUxVUkU7Ci0gIHVzZXJuYW1l
ID0gYmFzZW5hbWUodXNlcm5hbWUpOwkvKiB1c2VybmFtZSBtYXkgbm90IGJlIGZyZWUnZCBub3cg
Ki8KLSAgaG9tZSA9IGRpcm5hbWUoaG9tZSk7CQkJLyogaG9tZSBtYXkgbm90IGJlIGZyZWUnZCBu
b3cgKi8KLSAgLyogbWFrZSBzdXJlIGF0IGxlYXN0IC90d28vZGlycy90by5jc3MgZm9yIHNhbmUg
b3BlcmF0aW9uICovCi0gIGlmICghc3RyY21wKHVzZXJuYW1lLCBob21lKSkKLSAgICByZXR1cm4g
RUZBSUxVUkU7Ci0KICAgaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkgPCAwKQogICAgIHJldHVybiBF
RkFJTFVSRTsKIAotICBpZiAoX2hhc2hfZHJ2X2xvY2tfZ2V0IChob21lLCAmcywgdXNlcm5hbWUp
IDwgMCkKLSAgICByZXR1cm4gRUZBSUxVUkU7CisgIC8qIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxl
IG5hbWUgKi8KKyAgZGlyID0gc3RyZHVwKGZpbGVuYW1lKTsKKyAgaWYgKGRpciA9PSBOVUxMKQor
ICAgIGdvdG8gZW5kOworICBuZXdmaWxlID0gdGVtcG5hbShkaXJuYW1lKGRpciksICJjc3MiKTsK
KyAgaWYgKG5ld2ZpbGUgPT0gTlVMTCkKKyAgICBnb3RvIGVuZDsKKworICBsb2NrZmlsZSA9IF9o
YXNoX3Rvb2xzX2xvY2tfZ2V0IChmaWxlbmFtZSk7CisgIGlmIChsb2NrZmlsZSA9PSBOVUxMKQor
ICAgIGdvdG8gZW5kOwogCiAgIGlmIChfaGFzaF9kcnZfb3BlbihmaWxlbmFtZSwgJm9sZCwgMCwg
bWF4X3NlZWssCiAgICAgICAgICAgICAgICAgICAgICBtYXhfZXh0ZW50cywgZXh0ZW50X3NpemUs
IHBjdGluY3JlYXNlLCBmbGFncykpCi0gICAgZ290byB1bmxvY2s7CisgICAgZ290byBlbmQ7CiAK
ICAgaWYgKF9oYXNoX2Rydl9vcGVuKG5ld2ZpbGUsICZuZXcsIGhhc2hfcmVjX21heCwgbWF4X3Nl
ZWssCiAgICAgICAgICAgICAgICAgICAgICBtYXhfZXh0ZW50cywgZXh0ZW50X3NpemUsIHBjdGlu
Y3JlYXNlLCBmbGFncykpIHsKICAgICBfaGFzaF9kcnZfY2xvc2UoJm9sZCk7Ci0gICAgZ290byB1
bmxvY2s7CisgICAgZ290byBlbmQ7CiAgIH0KKyAgCisgIC8qIHByZXNlcnZlIGNvdW50ZXJzICov
CisgIG1lbWNweShuZXcuaGVhZGVyLCBvbGQuaGVhZGVyLCBzaXplb2YoKm5ldy5oZWFkZXIpKTsK
IAogICBpZiAoZmNob3duKG5ldy5mZCwgc3Quc3RfdWlkLCBzdC5zdF9naWQpIDwgMCkgewogICAg
IF9oYXNoX2Rydl9jbG9zZSgmbmV3KTsKICAgICBfaGFzaF9kcnZfY2xvc2UoJm9sZCk7CiAgICAg
dW5saW5rKG5ld2ZpbGUpOwotICAgIGdvdG8gdW5sb2NrOworICAgIGdvdG8gZW5kOwogICB9CiAK
ICAgaWYgKGZjaG1vZChuZXcuZmQsIHN0LnN0X21vZGUpIDwgMCkgewogICAgIF9oYXNoX2Rydl9j
bG9zZSgmbmV3KTsKICAgICBfaGFzaF9kcnZfY2xvc2UoJm9sZCk7CiAgICAgdW5saW5rKG5ld2Zp
bGUpOwotICAgIGdvdG8gdW5sb2NrOworICAgIGdvdG8gZW5kOwogICB9CiAKICAgZmlsZXBvcyA9
IHNpemVvZihzdHJ1Y3QgX2hhc2hfZHJ2X2hlYWRlcik7CkBAIC0xOTYsNyArMTkwLDcgQEAKICAg
ICAgICAgICBfaGFzaF9kcnZfY2xvc2UoJm5ldyk7CiAgICAgICAgICAgX2hhc2hfZHJ2X2Nsb3Nl
KCZvbGQpOwogICAgICAgICAgIHVubGluayhuZXdmaWxlKTsKLSAgICAgICAgICBnb3RvIHVubG9j
azsKKyAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZmlsZXBv
cyArPSBzaXplb2Yoc3RydWN0IF9oYXNoX2Rydl9zcGFtX3JlY29yZCk7CkBAIC0yMDksMTEgKzIw
MywxNSBAQAogICBfaGFzaF9kcnZfY2xvc2UoJm5ldyk7CiAgIF9oYXNoX2Rydl9jbG9zZSgmb2xk
KTsKICAgaWYgKHJlbmFtZShuZXdmaWxlLCBmaWxlbmFtZSkgPCAwKQotICAgIGdvdG8gdW5sb2Nr
OworICAgIGdvdG8gZW5kOwogICByYyA9IDA7CiAKLXVubG9jazoKLSAgX2hhc2hfZHJ2X2xvY2tf
ZnJlZSgmcywgdXNlcm5hbWUpOworZW5kOgorICBpZiAoZGlyKQorICAgIGZyZWUoZGlyKTsKKyAg
aWYgKG5ld2ZpbGUpCisgICAgZnJlZShuZXdmaWxlKTsKKyAgX2hhc2hfdG9vbHNfbG9ja19mcmVl
KGZpbGVuYW1lLCBsb2NrZmlsZSk7CiAgIHJldHVybiByYzsKIH0KIAo=
</data>        

          </attachment>
    </bug>

</bugzilla>