View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000025 | file | General | public | 2018-08-06 06:19 | 2018-08-11 12:18 |
Reporter | cbiedl | Assigned To | christos | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | resolved | Resolution | fixed | ||
Fixed in Version | 5.35 | ||||
Summary | 0000025: Magic strength computation underflow | ||||
Description | This doesn't look good: $ file --list | grep FORTRAN Strength = 18446744073709551613@7: FORTRAN program text [text/x-fortran] The problem is in `apprentice_magic_strength`: The `val` variable is size_t but as result of substraction the computation might underflow. The obvious approach was to guard `val` before such an operation but it turns out some rule start with `!:strength - 1` and the like, so that change would cause other and surprising damage. Suggestion: Make `val` a signed long which should be big enough to avoid overflow. If the resulting value is still negative, set it to one. Also move that operation a block down to a place where it seems more appropriate. This yields (as the only change) $ file --list | grep FORTRAN Strength = 2@7: FORTRAN program text [text/x-fortran] which looks much better. As a side effect, the strength of @42: Perl5 module source text went down by one, so adjust this to maintain the current status which is the result of delicate tuning IIRC. | ||||
Tags | No tags attached. | ||||
|
strength-underflow.patch (1,546 bytes)
commit 47b0e52009f9bcf91ac608efd2965d163c31b515 Author: Christoph Biedl <debian.axhn@manchmal.in-ulm.de> Date: Mon Aug 6 00:52:51 2018 +0200 src/apprentice.c 2018-08-05-225251 checkpoint _M <7b807237> (+45-44) diff --git a/magic/Magdir/perl b/magic/Magdir/perl index 3423b5c3..49572972 100644 --- a/magic/Magdir/perl +++ b/magic/Magdir/perl @@ -40,7 +40,7 @@ 0 search/8192 !p >0 regex \^package[\ \t]+[0-9A-Za-z_:]+\ *; >>0 regex \^1\ *;|\^(use|sub|my)\ .*[(;{=] Perl5 module source text -!:strength + 75 +!:strength + 76 # Perl POD documents # From: Tom Hukins <tom@eborcom.com> diff --git a/src/apprentice.c b/src/apprentice.c index 45cf2a9f..c8697159 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -841,7 +841,8 @@ private size_t apprentice_magic_strength(const struct magic *m) { #define MULT 10U - size_t ts, v, val = 2 * MULT; /* baseline strength */ + size_t ts, v; + long val = 2 * MULT; /* baseline strength */ switch (m->type) { case FILE_DEFAULT: /* make sure this sorts last */ @@ -947,9 +948,6 @@ apprentice_magic_strength(const struct magic *m) abort(); } - if (val == 0) /* ensure we only return 0 for FILE_DEFAULT */ - val = 1; - switch (m->factor_op) { case FILE_FACTOR_OP_NONE: break; @@ -969,6 +967,9 @@ apprentice_magic_strength(const struct magic *m) abort(); } + if (val <= 0) /* ensure we only return 0 for FILE_DEFAULT */ + val = 1; + /* * Magic entries with no description get a bonus because they depend * on subsequent magic entries to print something. |
|
Applied, but with long -> ssize_t |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-08-06 06:19 | cbiedl | New Issue | |
2018-08-06 06:19 | cbiedl | File Added: strength-underflow.patch | |
2018-08-11 12:18 | christos | Assigned To | => christos |
2018-08-11 12:18 | christos | Status | new => assigned |
2018-08-11 12:18 | christos | Status | assigned => resolved |
2018-08-11 12:18 | christos | Resolution | open => fixed |
2018-08-11 12:18 | christos | Fixed in Version | => 5.35 |
2018-08-11 12:18 | christos | Note Added: 0000049 |