Re: If Conditional Logic Error in Bash

2022-11-23 Thread Chet Ramey
On 11/23/22 5:31 AM, Neko-san via Bug reports for the GNU Bourne Again 
SHell wrote:

Example:
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=unreal-engine=c866141788f5c52cd32ddfaea3e8f5f5ca57b3ae#n135

There's a logic bug at play in Bash where having a value optionally be either a 
string (in this case true/false) or an integer, checked by an if statement, can 
throw an error claiming that an integer is expected even though a || operator 
is used to make integers optional.


This is just bad code.

The line in question is:

if [ "${_use_system_clang}" == true ] || [ "${_use_system_clang}" -eq 1 ]; then

Consider what happens if `_use_system_clang' is set to any non-integer
value other than `true' (e.g. `false', as in this report).

The first test command fails, so the || list executes the second test,
which expands to

[ false -eq 1 ]

Since the `-eq' operator requires integer operands, you get this error:


line 135: [: false: integer expression expected.



--
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/




If Conditional Logic Error in Bash

2022-11-23 Thread Neko-san via Bug reports for the GNU Bourne Again SHell
Example:
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=unreal-engine=c866141788f5c52cd32ddfaea3e8f5f5ca57b3ae#n135

There's a logic bug at play in Bash where having a value optionally be either a 
string (in this case true/false) or an integer, checked by an if statement, can 
throw an error claiming that an integer is expected even though a || operator 
is used to make integers optional.

The example above uses Arch Linux's "PKGBUILD" format, but this is irrelevant 
because it's actually just a bash script that's fed to Arch's "makepkg" and 
executed with bash.

Additional info:
* Arch Linux Package version (for reference): 5.1.016-1 * Error message:

line 135: [: false: integer expression expected.