Bug 2118835

Summary: Review Request: clifm - shell-like, command line terminal file manager
Product: [Fedora] Fedora Reporter: Jonathan Wright <jonathan>
Component: Package ReviewAssignee: Carl George 🤠 <carl>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: benson_muite, carl, package-review
Target Milestone: ---Flags: carl: fedora-review+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2022-08-25 13:24:54 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jonathan Wright 2022-08-16 22:23:49 UTC
Spec URL: https://jonathanspw.fedorapeople.org/clifm.spec
SRPM URL: https://jonathanspw.fedorapeople.org/clifm-1.6-1.fc38.src.rpm

Description: shell-like, command line terminal file manager

Fedora Account System Username: jonathanspw

Comment 1 Benson Muite 2022-08-17 09:14:36 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed



===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[?]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[?]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "GNU General Public License, Version
     2", "*No copyright* GNU General Public License, Version 3", "GNU
     General Public License v2.0 or later", "MIT License", "GNU General
     Public License", "BSD 2-Clause License". 61 files have unknown
     license. Detailed output of licensecheck in
     /home/FedoraPackaging/clifm/2118835-clifm/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[?]: Sources contain only permissible code or content.
[-]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[?]: Package is not known to require an ExcludeArch tag.
[-]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 51200 bytes in 2 files.
[?]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Package contains desktop file if it is a GUI application.
[x]: Package installs a %{name}.desktop using desktop-file-install or
     desktop-file-validate if there is such a file.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[?]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[?]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in clifm-
     bash-completion , clifm-zsh-completion
[?]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[?]: Package should compile and build into binary rpms on all supported
     architectures.
[-]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Cannot parse rpmlint output:


Rpmlint (debuginfo)
-------------------
Cannot parse rpmlint output:



Rpmlint (installed packages)
----------------------------
Cannot parse rpmlint output:


Source checksums
----------------
https://github.com/leo-arch/clifm/archive/v1.6/clifm-1.6.tar.gz :
  CHECKSUM(SHA256) this package     : 303f0ee2c6b19d3612de623c3ae0ee3ac110dcacfc348ec0f1d80015fc5f26e1
  CHECKSUM(SHA256) upstream package : 303f0ee2c6b19d3612de623c3ae0ee3ac110dcacfc348ec0f1d80015fc5f26e1


Requires
--------
clifm (rpmlib, GLIBC filtered):
    /usr/bin/bash
    /usr/bin/python3
    /usr/bin/sh
    hicolor-icon-theme
    libacl.so.1()(64bit)
    libacl.so.1(ACL_1.0)(64bit)
    libc.so.6()(64bit)
    libcap.so.2()(64bit)
    libmagic.so.1()(64bit)
    libreadline.so.8()(64bit)
    rtld(GNU_HASH)

clifm-bash-completion (rpmlib, GLIBC filtered):
    bash-completion
    clifm

clifm-zsh-completion (rpmlib, GLIBC filtered):
    clifm
    zsh

clifm-debuginfo (rpmlib, GLIBC filtered):

clifm-debugsource (rpmlib, GLIBC filtered):



Provides
--------
clifm:
    application()
    application(clifm.desktop)
    clifm
    clifm(x86-64)
    mimehandler(inode/directory)

clifm-bash-completion:
    clifm-bash-completion

clifm-zsh-completion:
    clifm-zsh-completion

clifm-debuginfo:
    clifm-debuginfo
    clifm-debuginfo(x86-64)
    debuginfo(build-id)

clifm-debugsource:
    clifm-debugsource
    clifm-debugsource(x86-64)



Generated by fedora-review 0.8.0 (e988316) last change: 2022-04-07
Command line :/usr/bin/fedora-review -b 2118835
Buildroot used: fedora-rawhide-x86_64
Active plugins: C/C++, Shell-api, Generic
Disabled plugins: SugarActivity, Ocaml, PHP, Haskell, Python, R, Java, Perl, fonts
Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH


$ rpmlint clifm-1.6-1.fc38.x86_64.rpm 
====================================== rpmlint session starts ======================================
rpmlint: 2.2.0
configuration:
    /usr/lib/python3.10/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/licenses.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 32, packages: 1

======= 0 packages and 0 specfiles checked; 0 errors, 0 warnings, 0 badness; has taken 0.1 s =======

$ rpmlint clifm-debuginfo-1.6-1.fc38.x86_64.rpm
====================================== rpmlint session starts ======================================
rpmlint: 2.2.0
configuration:
    /usr/lib/python3.10/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/licenses.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 32, packages: 1

======= 0 packages and 0 specfiles checked; 0 errors, 0 warnings, 0 badness; has taken 0.1 s =======

$ rpmlint clifm-debugsource-1.6-1.fc38.x86_64.rpm
====================================== rpmlint session starts ======================================
rpmlint: 2.2.0
configuration:
    /usr/lib/python3.10/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/licenses.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 32, packages: 1

======= 0 packages and 0 specfiles checked; 0 errors, 0 warnings, 0 badness; has taken 0.1 s =======

$ rpmlint clifm-bash-completion-1.6-1.fc38.noarch.rpm
====================================== rpmlint session starts ======================================
rpmlint: 2.2.0
configuration:
    /usr/lib/python3.10/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/licenses.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 32, packages: 1

======= 0 packages and 0 specfiles checked; 0 errors, 0 warnings, 0 badness; has taken 0.1 s =======

$ rpmlint clifm-zsh-completion-1.6-1.fc38.noarch.rpm
====================================== rpmlint session starts ======================================
rpmlint: 2.2.0
configuration:
    /usr/lib/python3.10/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/licenses.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 32, packages: 1

======= 0 packages and 0 specfiles checked; 0 errors, 0 warnings, 0 badness; has taken 0.0 s =======

Comments:
a) Please add a build on Copr/Koji
b) License check gives the output below. Does the spec license specification need to be changed? Can printf and qsort be replaced by functions in existing packages?

*No copyright* GNU General Public License, Version 3
----------------------------------------------------
clifm-1.6/misc/colors/base16.cfm
clifm-1.6/misc/colors/default.cfm
clifm-1.6/misc/colors/dracula-vivid.cfm
clifm-1.6/misc/colors/dracula.cfm
clifm-1.6/misc/colors/gruvbox.cfm
clifm-1.6/misc/colors/jellybeans-vivid.cfm
clifm-1.6/misc/colors/light.cfm
clifm-1.6/misc/colors/molokai.cfm
clifm-1.6/misc/colors/nocolor.cfm
clifm-1.6/misc/colors/nord.cfm
clifm-1.6/misc/colors/one-dark.cfm
clifm-1.6/misc/colors/solarized.cfm
clifm-1.6/misc/colors/zenburn.cfm
clifm-1.6/plugins/BFG.sh
clifm-1.6/plugins/batch_copy.sh
clifm-1.6/plugins/batch_create.sh
clifm-1.6/plugins/bm_import.sh
clifm-1.6/plugins/clip.sh
clifm-1.6/plugins/cprm.sh
clifm-1.6/plugins/disk_analyzer.sh
clifm-1.6/plugins/dragondrop.sh
clifm-1.6/plugins/fdups.sh
clifm-1.6/plugins/fzcd.sh
clifm-1.6/plugins/fzfdesel.sh
clifm-1.6/plugins/fzfnav.sh
clifm-1.6/plugins/fzfsel.sh
clifm-1.6/plugins/git_status.sh
clifm-1.6/plugins/ihelp.sh
clifm-1.6/plugins/img_viewer.sh
clifm-1.6/plugins/music_player.sh
clifm-1.6/plugins/pager.sh
clifm-1.6/plugins/pdf_viewer.sh
clifm-1.6/plugins/plugins-helper
clifm-1.6/plugins/recur_rm.sh
clifm-1.6/plugins/rgfind.sh
clifm-1.6/plugins/vid_viewer.sh
clifm-1.6/plugins/wallpaper_setter.sh

BSD 2-Clause License
--------------------
clifm-1.6/misc/tools/manpages_comp_gen.py

GNU General Public License
--------------------------
clifm-1.6/misc/codecov/actions.c.gcov
clifm-1.6/misc/codecov/archives.c.gcov
clifm-1.6/misc/codecov/aux.c.gcov
clifm-1.6/misc/codecov/bookmarks.c.gcov
clifm-1.6/misc/codecov/checks.c.gcov
clifm-1.6/misc/codecov/colors.c.gcov
clifm-1.6/misc/codecov/config.c.gcov
clifm-1.6/misc/codecov/exec.c.gcov
clifm-1.6/misc/codecov/file_operations.c.gcov
clifm-1.6/misc/codecov/history.c.gcov
clifm-1.6/misc/codecov/init.c.gcov
clifm-1.6/misc/codecov/jump.c.gcov
clifm-1.6/misc/codecov/keybinds.c.gcov
clifm-1.6/misc/codecov/listing.c.gcov
clifm-1.6/misc/codecov/main.c.gcov
clifm-1.6/misc/codecov/mime.c.gcov
clifm-1.6/misc/codecov/misc.c.gcov
clifm-1.6/misc/codecov/navigation.c.gcov
clifm-1.6/misc/codecov/profiles.c.gcov
clifm-1.6/misc/codecov/prompt.c.gcov
clifm-1.6/misc/codecov/properties.c.gcov
clifm-1.6/misc/codecov/readline.c.gcov
clifm-1.6/misc/codecov/remotes.c.gcov
clifm-1.6/misc/codecov/search.c.gcov
clifm-1.6/misc/codecov/selection.c.gcov
clifm-1.6/misc/codecov/sort.c.gcov
clifm-1.6/misc/codecov/strings.c.gcov
clifm-1.6/misc/codecov/suggestions.c.gcov
clifm-1.6/misc/codecov/trash.c.gcov

GNU General Public License v2.0 or later
----------------------------------------
clifm-1.6/src/actions.c
clifm-1.6/src/actions.h
clifm-1.6/src/archives.c
clifm-1.6/src/archives.h
clifm-1.6/src/autocmds.c
clifm-1.6/src/autocmds.h
clifm-1.6/src/aux.c
clifm-1.6/src/aux.h
clifm-1.6/src/bookmarks.c
clifm-1.6/src/bookmarks.h
clifm-1.6/src/builtins.h
clifm-1.6/src/checks.c
clifm-1.6/src/checks.h
clifm-1.6/src/cleaner_table.h
clifm-1.6/src/colors.c
clifm-1.6/src/colors.h
clifm-1.6/src/config.c
clifm-1.6/src/config.h
clifm-1.6/src/exec.c
clifm-1.6/src/exec.h
clifm-1.6/src/file_operations.c
clifm-1.6/src/file_operations.h
clifm-1.6/src/helpers.h
clifm-1.6/src/highlight.c
clifm-1.6/src/highlight.h
clifm-1.6/src/history.c
clifm-1.6/src/history.h
clifm-1.6/src/init.c
clifm-1.6/src/init.h
clifm-1.6/src/jump.c
clifm-1.6/src/jump.h
clifm-1.6/src/keybinds.c
clifm-1.6/src/keybinds.h
clifm-1.6/src/listing.c
clifm-1.6/src/listing.h
clifm-1.6/src/main.c
clifm-1.6/src/media.c
clifm-1.6/src/media.h
clifm-1.6/src/messages.h
clifm-1.6/src/mime.c
clifm-1.6/src/mime.h
clifm-1.6/src/misc.c
clifm-1.6/src/misc.h
clifm-1.6/src/name_cleaner.c
clifm-1.6/src/name_cleaner.h
clifm-1.6/src/navigation.c
clifm-1.6/src/navigation.h
clifm-1.6/src/profiles.c
clifm-1.6/src/profiles.h
clifm-1.6/src/prompt.c
clifm-1.6/src/prompt.h
clifm-1.6/src/properties.c
clifm-1.6/src/properties.h
clifm-1.6/src/readline.c
clifm-1.6/src/readline.h
clifm-1.6/src/remotes.c
clifm-1.6/src/remotes.h
clifm-1.6/src/sanitize.c
clifm-1.6/src/sanitize.h
clifm-1.6/src/search.c
clifm-1.6/src/search.h
clifm-1.6/src/selection.c
clifm-1.6/src/selection.h
clifm-1.6/src/settings.h
clifm-1.6/src/sort.c
clifm-1.6/src/sort.h
clifm-1.6/src/strings.c
clifm-1.6/src/strings.h
clifm-1.6/src/suggestions.c
clifm-1.6/src/suggestions.h
clifm-1.6/src/tabcomp.c
clifm-1.6/src/tabcomp.h
clifm-1.6/src/tags.c
clifm-1.6/src/tags.h
clifm-1.6/src/term_info.h
clifm-1.6/src/trash.c
clifm-1.6/src/trash.h

GNU General Public License, Version 2
-------------------------------------
clifm-1.6/LICENSE

MIT License
-----------
clifm-1.6/src/printf.c
clifm-1.6/src/printf.h
clifm-1.6/src/qsort.h

Unknown or generated
--------------------
clifm-1.6/.github/ISSUE_TEMPLATE/config.yml
clifm-1.6/.github/ISSUE_TEMPLATE/feature-request.md
clifm-1.6/.github/ISSUE_TEMPLATE/issue_template.md
clifm-1.6/.github/workflows/cmake.yml
clifm-1.6/.github/workflows/codecov.yml
clifm-1.6/.github/workflows/codeql-analysis.yml
clifm-1.6/CHANGELOG
clifm-1.6/CMakeLists.txt
clifm-1.6/CONTACT.md
clifm-1.6/CONTRIBUTING.md
clifm-1.6/Dockerfile
clifm-1.6/Makefile
clifm-1.6/README.md
clifm-1.6/_config.yml
clifm-1.6/functions/cd_on_quit.sh
clifm-1.6/functions/file_picker.sh
clifm-1.6/functions/subshell_notice.sh
clifm-1.6/misc/actions.cfm
clifm-1.6/misc/clifm.1.pdf
clifm-1.6/misc/clifm.desktop
clifm-1.6/misc/clifmrc
clifm-1.6/misc/cmake/Makefile
clifm-1.6/misc/completions.bash
clifm-1.6/misc/completions.zsh
clifm-1.6/misc/freebsd/us.clifm.kbd
clifm-1.6/misc/haiku/Makefile
clifm-1.6/misc/haiku/keybindings.cfm
clifm-1.6/misc/haiku/readline.cfm
clifm-1.6/misc/keybindings.cfm
clifm-1.6/misc/logo/clifm.svg
clifm-1.6/misc/manpage
clifm-1.6/misc/mimelist.cfm
clifm-1.6/misc/nets.cfm
clifm-1.6/misc/prompts.cfm
clifm-1.6/misc/readline.cfm
clifm-1.6/misc/tools/deroff.py
clifm-1.6/plugins/BFG.cfg
clifm-1.6/plugins/colors.sh
clifm-1.6/plugins/finder.sh
clifm-1.6/plugins/fzfdirhist.sh
clifm-1.6/plugins/fzfhist.sh
clifm-1.6/plugins/jumper.sh
clifm-1.6/plugins/kbgen.c
clifm-1.6/plugins/mime_list.sh
clifm-1.6/plugins/update.sh
clifm-1.6/src/README.md
clifm-1.6/src/_clang-format
clifm-1.6/src/_clang-tidy
clifm-1.6/src/icons-emoji.h
clifm-1.6/src/icons-in-terminal.h
clifm-1.6/src/icons-nerdfont.h
clifm-1.6/src/icons.h
clifm-1.6/translations/chinese/clifm.po
clifm-1.6/translations/clifm.pot
clifm-1.6/translations/french/clifm.po
clifm-1.6/translations/german/clifm.po
clifm-1.6/translations/italian/clifm.po
clifm-1.6/translations/japanese/clifm.po
clifm-1.6/translations/norwegian/clifm.po
clifm-1.6/translations/portuguese/clifm.po
clifm-1.6/translations/spanish/clifm.po

Comment 2 Jonathan Wright 2022-08-17 16:29:14 UTC
Clarified licenses.

Documented why qsort.h is packaged and also ensured system printf is used (added an rm).

Spec URL: https://jonathanspw.fedorapeople.org/clifm.spec
SRPM URL: https://jonathanspw.fedorapeople.org/clifm-1.6-1.fc38.src.rpm

Koji build: https://koji.fedoraproject.org/koji/taskinfo?taskID=90929635

Comment 3 Benson Muite 2022-08-21 09:44:45 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed



===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "GNU General Public License, Version
     2", "*No copyright* GNU General Public License, Version 3", "GNU
     General Public License v2.0 or later", "MIT License", "GNU General
     Public License", "BSD 2-Clause License". 61 files have unknown
     license. Detailed output of licensecheck in
     /home/FedoraPackaging/clifm/2118835-clifm/licensecheck.txt
[ ]: License file installed when any subpackage combination is installed.
[!]: If the package is under multiple licenses, the licensing breakdown
     must be documented in the spec.
[x]: %build honors applicable compiler flags or justifies otherwise.
[?]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[?]: Sources contain only permissible code or content.
[-]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[-]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 51200 bytes in 2 files.
[?]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Package contains desktop file if it is a GUI application.
[x]: Package installs a %{name}.desktop using desktop-file-install or
     desktop-file-validate if there is such a file.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[?]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in clifm-
     bash-completion , clifm-zsh-completion
[?]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Cannot parse rpmlint output:


Rpmlint (debuginfo)
-------------------
Cannot parse rpmlint output:



Rpmlint (installed packages)
----------------------------
Cannot parse rpmlint output:


Source checksums
----------------
https://github.com/leo-arch/clifm/archive/v1.6/clifm-1.6.tar.gz :
  CHECKSUM(SHA256) this package     : 303f0ee2c6b19d3612de623c3ae0ee3ac110dcacfc348ec0f1d80015fc5f26e1
  CHECKSUM(SHA256) upstream package : 303f0ee2c6b19d3612de623c3ae0ee3ac110dcacfc348ec0f1d80015fc5f26e1


Requires
--------
clifm (rpmlib, GLIBC filtered):
    /usr/bin/bash
    /usr/bin/python3
    /usr/bin/sh
    hicolor-icon-theme
    libacl.so.1()(64bit)
    libacl.so.1(ACL_1.0)(64bit)
    libc.so.6()(64bit)
    libcap.so.2()(64bit)
    libmagic.so.1()(64bit)
    libreadline.so.8()(64bit)
    rtld(GNU_HASH)

clifm-bash-completion (rpmlib, GLIBC filtered):
    bash-completion
    clifm

clifm-zsh-completion (rpmlib, GLIBC filtered):
    clifm
    zsh

clifm-debuginfo (rpmlib, GLIBC filtered):

clifm-debugsource (rpmlib, GLIBC filtered):



Provides
--------
clifm:
    application()
    application(clifm.desktop)
    bundled(qsort)
    clifm
    clifm(x86-64)
    mimehandler(inode/directory)

clifm-bash-completion:
    clifm-bash-completion

clifm-zsh-completion:
    clifm-zsh-completion

clifm-debuginfo:
    clifm-debuginfo
    clifm-debuginfo(x86-64)
    debuginfo(build-id)

clifm-debugsource:
    clifm-debugsource
    clifm-debugsource(x86-64)



Generated by fedora-review 0.8.0 (e988316) last change: 2022-04-07
Command line :/usr/bin/fedora-review -b 2118835
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: PHP, Perl, Python, Java, R, Ocaml, Haskell, fonts, SugarActivity
Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH

Comments:
a) Packaging qsort separately as a header only library would be helpful.  It would make it easier to find. It is also in a separate repository, https://github.com/svpv/qsort and seems to be developed separately. It should be packaged as a static library https://docs.fedoraproject.org/en-US/packaging-guidelines/#_packaging_header_only_libraries - clifm can also use the slower system qsort
b) Licensing needs more explanation, may be good to list licenses used on each file.
c) The build log contains some warnings about possible memory overflows:
In function 'xstrnlen',
    inlined from 'print_entry_props.isra' at /builddir/build/BUILD/clifm-1.6/src/properties.c:651:18:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 46 [-Wstringop-overre
ad]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 46 [-Wstringop-overre
ad]
In function 'xstrsncpy',
    inlined from 'print_bookmark_dir_suggestion' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1088:3,
    inlined from 'check_bookmarks' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1141:5,
    inlined from 'rl_suggestions.isra' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1950:15:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4099 bytes into a region of size 4098 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/suggestions.c: In function 'rl_suggestions.isra':
/builddir/build/BUILD/clifm-1.6/src/suggestions.c:1083:14: note: destination object 'tmp' of size 4098
 1083 |         char tmp[PATH_MAX + 2];
      |              ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrnlen',
    inlined from 'regen_config' at /builddir/build/BUILD/clifm-1.6/src/config.c:83:53,
    inlined from 'edit_function' at /builddir/build/BUILD/clifm-1.6/src/config.c:122:10:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 18 [-Wstringop-overre
ad]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/config.c: In function 'edit_function':
/builddir/build/BUILD/clifm-1.6/src/config.c:80:22: note: source object allocated here
   80 |                 char date[18];
      |                      ^
In function 'xstrsncpy',
    inlined from 'print_bookmark_dir_suggestion' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1088:3,
    inlined from 'check_bookmarks' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1141:5,
    inlined from 'rl_suggestions.isra' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1950:15:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/suggestions.c: In function 'rl_suggestions.isra':
/builddir/build/BUILD/clifm-1.6/src/suggestions.c:1083:14: note: at offset 4098 into destination object 'tmp' of size 4098
 1083 |         char tmp[PATH_MAX + 2];
      |              ^
In function 'xstrsncpy',
    inlined from 'print_bookmark_dir_suggestion' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1088:3,
    inlined from 'check_bookmarks' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1141:5,
    inlined from 'rl_suggestions.isra' at /builddir/build/BUILD/clifm-1.6/src/suggestions.c:1950:15:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4099 bytes into a region of size 4098 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/suggestions.c: In function 'rl_suggestions.isra':
/builddir/build/BUILD/clifm-1.6/src/suggestions.c:1083:14: note: destination object 'tmp' of size 4098
 1083 |         char tmp[PATH_MAX + 2];
      |              ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'construct_sel_path' at /builddir/build/BUILD/clifm-1.6/src/selection.c:485:2:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4097 bytes into a region of size 4096 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/selection.c: In function 'construct_sel_path':
/builddir/build/BUILD/clifm-1.6/src/selection.c:484:14: note: destination object 'tmpdir' of size 4096
  484 |         char tmpdir[PATH_MAX];
      |              ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'construct_sel_path' at /builddir/build/BUILD/clifm-1.6/src/selection.c:485:2:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/selection.c: In function 'construct_sel_path':
/builddir/build/BUILD/clifm-1.6/src/selection.c:484:14: note: at offset 4096 into destination object 'tmpdir' of size 4096
  484 |         char tmpdir[PATH_MAX];
      |              ^
In function 'xstrsncpy',
    inlined from 'construct_sel_path' at /builddir/build/BUILD/clifm-1.6/src/selection.c:485:2:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4097 bytes into a region of size 4096 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/selection.c: In function 'construct_sel_path':
/builddir/build/BUILD/clifm-1.6/src/selection.c:484:14: note: destination object 'tmpdir' of size 4096
  484 |         char tmpdir[PATH_MAX];
      |              ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrnlen',
    inlined from 'mount_dev' at /builddir/build/BUILD/clifm-1.6/src/media.c:452:16:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 4092 [-Wstringop-over
read]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/media.c: In function 'mount_dev':
/builddir/build/BUILD/clifm-1.6/src/media.c:433:14: note: source object allocated here
  433 |         char out_line[PATH_MAX];
      |              ^
In function 'xstrnlen',
    inlined from 'mount_dev' at /builddir/build/BUILD/clifm-1.6/src/media.c:456:17:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 4092 [-Wstringop-over
read]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/media.c: In function 'mount_dev':
/builddir/build/BUILD/clifm-1.6/src/media.c:433:14: note: source object allocated here
  433 |         char out_line[PATH_MAX];
      |              ^
In function 'xstrnlen',
    inlined from 'construct_rm_cmd' at /builddir/build/BUILD/clifm-1.6/src/file_operations.c:414:11,
    inlined from 'bulk_remove_files' at /builddir/build/BUILD/clifm-1.6/src/file_operations.c:450:15,
    inlined from 'bulk_remove' at /builddir/build/BUILD/clifm-1.6/src/file_operations.c:536:8:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 5 [-Wstringop-overrea
d]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
In function 'xstrsncpy',
    inlined from 'expand_prompt_name' at /builddir/build/BUILD/clifm-1.6/src/misc.c:1141:3:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'expand_prompt_name':
/builddir/build/BUILD/clifm-1.6/src/main.c:274:9: note: destination object 'cur_prompt_name' of size 255
  274 |         cur_prompt_name[NAME_MAX] = "",
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'expand_prompt_name' at /builddir/build/BUILD/clifm-1.6/src/misc.c:1141:3:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'expand_prompt_name':
/builddir/build/BUILD/clifm-1.6/src/main.c:274:9: note: at offset 255 into destination object 'cur_prompt_name' of size 255
  274 |         cur_prompt_name[NAME_MAX] = "",
      |         ^
In function 'xstrsncpy',
    inlined from 'expand_prompt_name' at /builddir/build/BUILD/clifm-1.6/src/misc.c:1141:3:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'expand_prompt_name':
/builddir/build/BUILD/clifm-1.6/src/main.c:274:9: note: destination object 'cur_prompt_name' of size 255
  274 |         cur_prompt_name[NAME_MAX] = "",
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrnlen',
    inlined from 'log_function' at /builddir/build/BUILD/clifm-1.6/src/history.c:134:19:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 129 [-Wstringop-overr
ead]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
In function 'xstrnlen',
    inlined from 'gen_hostname' at /builddir/build/BUILD/clifm-1.6/src/prompt.c:312:15,
    inlined from 'decode_prompt' at /builddir/build/BUILD/clifm-1.6/src/prompt.c:643:12:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 64 [-Wstringop-overre
ad]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'decode_prompt':
/builddir/build/BUILD/clifm-1.6/src/main.c:276:9: note: source object allocated here
  276 |         hostname[HOST_NAME_MAX],
      |         ^
In function 'xstrnlen',
    inlined from 'gen_workspace' at /builddir/build/BUILD/clifm-1.6/src/prompt.c:223:9,
    inlined from 'decode_prompt' at /builddir/build/BUILD/clifm-1.6/src/prompt.c:650:12:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 106 [-Wstringop-overr
ead]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/prompt.c: In function 'decode_prompt':
/builddir/build/BUILD/clifm-1.6/src/prompt.c:202:14: note: source object allocated here
  202 |         char s[__WS_STR_LEN];
      |              ^
In function 'xstrnlen',
    inlined from 'get_shell_cmd_opts' at /builddir/build/BUILD/clifm-1.6/src/readline.c:138:14:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 255 [-Wstringop-overr
ead]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/readline.c: In function 'get_shell_cmd_opts':
/builddir/build/BUILD/clifm-1.6/src/readline.c:131:14: note: source object allocated here
  131 |         char line[NAME_MAX];
      |              ^
In function 'xstrsncpy',
    inlined from 'my_rl_path_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:1081:9:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4097 bytes into a region of size 4096 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'my_rl_path_completion':
/builddir/build/BUILD/clifm-1.6/src/main.c:281:9: note: destination object '_fmatch' of size 4096
  281 |         _fmatch[PATH_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'my_rl_path_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:1106:9:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4097 bytes into a region of size 4096 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'my_rl_path_completion':
/builddir/build/BUILD/clifm-1.6/src/main.c:281:9: note: destination object '_fmatch' of size 4096
  281 |         _fmatch[PATH_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'my_rl_path_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:1106:9:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'my_rl_path_completion':
/builddir/build/BUILD/clifm-1.6/src/main.c:281:9: note: at offset 4096 into destination object '_fmatch' of size 4096
  281 |         _fmatch[PATH_MAX],
      |         ^
In function 'xstrsncpy',
    inlined from 'my_rl_path_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:1081:9:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'my_rl_path_completion':
/builddir/build/BUILD/clifm-1.6/src/main.c:281:9: note: at offset 4096 into destination object '_fmatch' of size 4096
  281 |         _fmatch[PATH_MAX],
      |         ^
In function 'xstrsncpy',
    inlined from 'my_rl_path_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:1081:9:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4097 bytes into a region of size 4096 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'my_rl_path_completion':
/builddir/build/BUILD/clifm-1.6/src/main.c:281:9: note: destination object '_fmatch' of size 4096
  281 |         _fmatch[PATH_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'my_rl_path_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:1106:9:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 4097 bytes into a region of size 4096 overflows the d
estination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'my_rl_path_completion':
/builddir/build/BUILD/clifm-1.6/src/main.c:281:9: note: destination object '_fmatch' of size 4096
  281 |         _fmatch[PATH_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrnlen',
    inlined from 'get_properties' at /builddir/build/BUILD/clifm-1.6/src/properties.c:299:18:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 46 [-Wstringop-overre
ad]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 46 [-Wstringop-overre
ad]
In function 'xstrsncpy',
    inlined from 'my_rl_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:2781:5:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/readline.c: In function 'my_rl_completion':
/builddir/build/BUILD/clifm-1.6/src/readline.c:2776:30: note: destination object 'lw' of size 255
 2776 |                         char lw[NAME_MAX]; *lw = '\0'; /* Last word before the dash */
      |                              ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'my_rl_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:2781:5:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/readline.c: In function 'my_rl_completion':
/builddir/build/BUILD/clifm-1.6/src/readline.c:2776:30: note: at offset 255 into destination object 'lw' of size 255
 2776 |                         char lw[NAME_MAX]; *lw = '\0'; /* Last word before the dash */
      |                              ^
In function 'xstrsncpy',
    inlined from 'my_rl_completion' at /builddir/build/BUILD/clifm-1.6/src/readline.c:2781:5:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/readline.c: In function 'my_rl_completion':
/builddir/build/BUILD/clifm-1.6/src/readline.c:2776:30: note: destination object 'lw' of size 255
 2776 |                         char lw[NAME_MAX]; *lw = '\0'; /* Last word before the dash */
      |                              ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'check_options' at /builddir/build/BUILD/clifm-1.6/src/init.c:3064:3:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'check_options':
/builddir/build/BUILD/clifm-1.6/src/main.c:275:9: note: destination object 'div_line' of size 255
  275 |         div_line[NAME_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'check_options' at /builddir/build/BUILD/clifm-1.6/src/init.c:3064:3:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'check_options':
/builddir/build/BUILD/clifm-1.6/src/main.c:275:9: note: at offset 255 into destination object 'div_line' of size 255
  275 |         div_line[NAME_MAX],
      |         ^
In function 'xstrsncpy',
    inlined from 'check_options' at /builddir/build/BUILD/clifm-1.6/src/init.c:3064:3:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'check_options':
/builddir/build/BUILD/clifm-1.6/src/main.c:275:9: note: destination object 'div_line' of size 255
  275 |         div_line[NAME_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'set_div_line' at /builddir/build/BUILD/clifm-1.6/src/config.c:1565:2:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'set_div_line':
/builddir/build/BUILD/clifm-1.6/src/main.c:275:9: note: destination object 'div_line' of size 255
  275 |         div_line[NAME_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrsncpy',
    inlined from 'set_div_line' at /builddir/build/BUILD/clifm-1.6/src/config.c:1565:2:
/builddir/build/BUILD/clifm-1.6/src/strings.c:199:28: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
  199 |                 dst[n - 1] = '\0';
      |                            ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'set_div_line':
/builddir/build/BUILD/clifm-1.6/src/main.c:275:9: note: at offset 255 into destination object 'div_line' of size 255
  275 |         div_line[NAME_MAX],
      |         ^
In function 'xstrsncpy',
    inlined from 'set_div_line' at /builddir/build/BUILD/clifm-1.6/src/config.c:1565:2:
/builddir/build/BUILD/clifm-1.6/src/strings.c:197:21: warning: 'memccpy' writing 256 bytes into a region of size 255 overflows the des
tination [-Wstringop-overflow=]
  197 |         char *end = memccpy(dst, src, '\0', n);
      |                     ^
/builddir/build/BUILD/clifm-1.6/src/main.c: In function 'set_div_line':
/builddir/build/BUILD/clifm-1.6/src/main.c:275:9: note: destination object 'div_line' of size 255
  275 |         div_line[NAME_MAX],
      |         ^
/usr/include/string.h:54:14: note: in a call to function 'memccpy' declared with attribute 'access (write_only, 1, 4)'
   54 | extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
      |              ^
In function 'xstrnlen',
    inlined from 'read_config' at /builddir/build/BUILD/clifm-1.6/src/config.c:2087:26:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 8 [-Wstringop-overrea
d]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^
/builddir/build/BUILD/clifm-1.6/src/config.c: In function 'read_config':
/builddir/build/BUILD/clifm-1.6/src/config.c:2069:30: note: source object allocated here
 2069 |                         char opt_str[SUG_STRATS + 1] = "";
      |                              ^
In function 'xstrnlen',
    inlined from 'get_last_path.isra' at /builddir/build/BUILD/clifm-1.6/src/init.c:2254:28:
/builddir/build/BUILD/clifm-1.6/src/strings.c:185:33: warning: 'memchr' specified bound 4096 exceeds source size 4094 [-Wstringop-over
read]
  185 |         return (size_t)((char *)memchr(s, '\0', MAX_STR_LEN) - s);
      |                                 ^

Comment 4 Jonathan Wright 2022-08-21 17:01:46 UTC
> a) Packaging qsort separately as a header only library would be helpful.  It would make it easier to find. It is also in a separate repository, https://github.com/svpv/qsort and seems to be developed separately. It should be packaged as a static library https://docs.fedoraproject.org/en-US/packaging-guidelines/#_packaging_header_only_libraries - clifm can also use the slower system qsort

I've submitted https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=2120099.

In the meantime I'll use system qsort (which is was actually doing already anyway).  An extra flag is required to enable the included qsort so when the review above is complete I'll have to create a patch to use it and I'll submit that patch upstream of course.

> b) Licensing needs more explanation, may be good to list licenses used on each file.

Doing each file would be a bit elaborate IMO.  Luckily the breakdown is pretty well defined by directory so I added a source directory breakdown for things that go into the resulting package.

> c) The build log contains some warnings about possible memory overflows:

I'm not really sure what I can do about this as a packager but I'll do some research on the topic and report it to upstream.

Spec URL: https://jonathanspw.fedorapeople.org/clifm.spec
SRPM URL: https://jonathanspw.fedorapeople.org/clifm-1.6-1.fc38.src.rpm

Comment 5 Benson Muite 2022-08-21 18:18:44 UTC
For memory overflows, possibly the code can be patched to ensure the warnings are removed - this would likely require changing array bounds.

Comment 6 Jonathan Wright 2022-08-21 18:28:31 UTC
That is beyond my level of expertise in C so I opened an issue upstream.

Comment 7 Jonathan Wright 2022-08-21 19:55:26 UTC
Upstream has acknowledged the issue and will get it fixed.

https://github.com/leo-arch/clifm/issues/154

Comment 8 Carl George 🤠 2022-08-24 00:42:34 UTC
I recommend dropping the bash-completion and zsh-completion subpackages.  That was an old solution to the problem of completion files parent directories not being owned.  The idea was those directories were owned by the related shells, but rather than requiring all shells you ship completion files for, to have the requirement split out to subpackages.  Now, the filesystem package owns the completion file parent directories, so you can just drop those files in there, owned by the main package, without requiring the related shells.

Comment 9 Jonathan Wright 2022-08-24 01:42:29 UTC
Fixed the completion sub-packages.  Docs weren't clear on that.

Pushed version up to pre-1.7 commit so that we can release this to EPEL/Fedora stable and not have to worry about the backwards-incompatible change between 1.6 and 1.7.

Thanks for your help on figuring out the version tags to accomplish this :)

Spec URL: https://jonathanspw.fedorapeople.org/clifm.spec
SRPM URL: https://jonathanspw.fedorapeople.org/clifm-1.7~^1.bd9457f-1.fc38.src.rpm

Comment 10 Carl George 🤠 2022-08-24 02:05:32 UTC
I don't see anything that is licensed as GPL-1.0-only, so that one should be removed from the License field.

The tarball name is wrong, but it appears to contain the intended snapshot content, so I'll trust the review as long as the tarball is imported with the correct name.

Fix those last two things, but otherwise PACKAGE APPROVED.


Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated


===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "GNU General Public License, Version
     2", "*No copyright* GNU General Public License, Version 3", "GNU
     General Public License v2.0 or later", "GNU General Public License",
     "BSD 2-Clause License". 62 files have unknown license. Detailed output
     of licensecheck in
     /home/carl/packaging/reviews/clifm/2118835-clifm/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: If the package is under multiple licenses, the licensing breakdown
     must be documented in the spec.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[x]: Package is not known to require an ExcludeArch tag.
[-]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 61440 bytes in 2 files.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Package contains desktop file if it is a GUI application.
[x]: Package installs a %{name}.desktop using desktop-file-install or
     desktop-file-validate if there is such a file.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[-]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Fully versioned dependency in subpackages if applicable.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.

Comment 11 Tomas Hrcka 2022-08-25 06:15:04 UTC
(fedscm-admin):  The Pagure repository was created at https://src.fedoraproject.org/rpms/clifm

Comment 12 Fedora Update System 2022-08-25 13:23:35 UTC
FEDORA-2022-836baf2e94 has been submitted as an update to Fedora 38. https://bodhi.fedoraproject.org/updates/FEDORA-2022-836baf2e94

Comment 13 Fedora Update System 2022-08-25 13:24:54 UTC
FEDORA-2022-836baf2e94 has been pushed to the Fedora 38 stable repository.
If problem still persists, please make note of it in this bug report.