Commit Graph

15 Commits

Author SHA1 Message Date
Miro Hrončok
65de6e6beb brp-mangle-shebangs: Strip env flags when mangling shebangs
- For example, mangle "#!/usr/bin/env -S vd" to "#!/usr/bin/vd"
- Fixes: rhbz#2265038
2024-02-20 10:16:44 +01:00
Miro Hrončok
faf5c36887 brp-mangle-shebangs: also mangle shebangs of JavaScript executables
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1998924

Unfortunately, the MIME type of JavaScript executables is not text/... but
application/javascript. See RFC 4329.

After considering various approaches to fix this problem, including:

 1) limiting the number of characters `file` reads
 2) using `eu-elfclassify` instead of `file`

This seems like the most sensible approach to fix this one particular problem.
If more instances are found problematic in the future, we'll keep adding the
MIME types.

See the linked bugzilla, the eu-elfclassify pull request [1],
and the devel mailing list thread [2] for details about this problem and
the considered solutions.

[1]: https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/145
[2]: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/K3QCBUXYR6ZA34I777X6F2RYJKKECJLM/
2021-12-08 15:19:35 +00:00
Lumir Balhar
27a8c7a7c2 Fix handling of files without newlines in brp-mangle-shebang
If the file we are trying to mangle a shebang in has
0 lines (as reported by `wc`) `read` command fails
to read the first line and the script fails silently.

Text files without newlines should not be executable as there
is no way for them to contain a shebang.
2021-03-22 14:33:37 +01:00
Denys Vlasenko
140ee1de89
brp-mangle-shebangs: do not stat / touch files needlessly
Run "stat" to get mtime, and "touch -d $saved_mtime"
only if we indeed modify file's shebang.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2019-12-03 13:00:36 +01:00
Denys Vlasenko
618362d6fb
brp-mangle-shebangs: fix unsafe/incorrect command expansion
trim() {
  printf '%s' "$*"
}
...
  read shebang_line < "$f" || :
  orig_shebang=$(trim $(echo "$shebang_line" | grep -Po "#!\K.*" || echo))

The "trimming", i.e. replacement of multiple spaces and removal of leading
and trailing spaces, is achieved because "trim $(cmd)" construct has an
unquoted $(), which is subject to word splitting.

This works, yes. BUT.

It is also subject to glob expansion - any ?s and *s will be attempted
to be expanded as well - definitely NOT what we want!

This change replaces this trick with code which avoids the expansion issue,
and which does not spawn any subprocesses for string manipulations -
this is ~3 times faster (fork+execs are expensive).

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2019-12-03 13:00:36 +01:00
Denys Vlasenko
63d7e4dc11
brp-mangle-shebangs: speed up finding of "text executables" (scripts)
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
2019-12-03 13:00:35 +01:00
Miro Hrončok
b852a706ad Make ambiguous python shebangs error
See https://fedoraproject.org/wiki/Changes/Make_ambiguous_python_shebangs_error
2018-09-10 18:26:02 +02:00
Miro Hrončok
973e5c7052 Mangle /bin shebangs to /usr/bin ones (#1581757) 2018-07-19 12:34:53 +02:00
Peter Jones
f7e8f73ead brp-mangle-shebangs: make it possible to use generated exclusion lists
This patch adds two additional rpm macros, __brp_mangle_shebangs_exclude_file
and __brp_mangle_shebangs_exclude_from_file, to specify files from which
to read the extended regexps used for excluding shebangs and target
files.

Additionally, this adds documentation in the macros file and
--help/--usage/-?/-h to brp-mangle-shebangs, so that it's possible to
actually discover what the intended behavior is without reading the
script itself.

Signed-off-by: Peter Jones <pjones@redhat.com>
2018-05-02 14:38:46 -04:00
Miro Hrončok
8f59b756ca Don't mangle shebangs with whitespace only changes (#1546993) 2018-02-22 11:12:28 +01:00
Igor Gnatenko
40990bb864
brp-mangle-shebangs: add support for whitespaces in file names
Now it starts requiring bash instead of POSIX-compatible shell, but this
is not a problem since other scripts in here do same.

Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
2018-02-15 10:03:34 +01:00
Miro Hrončok
fb05a239d2
Allow to opt-out from shebang mangling for specific paths/shebangs
Introduces __brp_mangle_shebangs_exclude_from and __brp_mangle_shebangs_exclude

 * the first allows to explude specific paths from the mangling
 * the second allows to exlude specific shebangs

Both are used with `grep -E`. Similar escaping rules as in [1] apply.

[1] https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering
2018-02-15 08:47:54 +01:00
Igor Gnatenko
51f1c66748
brp-mangle-shebangs: Simplify/Fix check for shebang starting with "/"
Reported-by: Jun Aruga <jaruga@redhat.com>
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1541057
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
2018-02-08 10:38:45 +01:00
Igor Gnatenko
35f7182912
brp-mangle-shebangs: fix mangling absolute paths in /.../env
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
2018-02-07 18:23:28 +01:00
Miro Hrončok
257a3a95c7 Add brp-mangle-shebangs 2018-01-30 13:31:25 +01:00