Commit Graph

86 Commits (6a84d70439f03815080a3805fb10c81ffc8eece8)

Author SHA1 Message Date
huyubiao 6d1f160e89 argvsplit: fix some quoting rules 2023-05-02 11:45:42 -07:00
Taylor R Campbell 212c85863a Avoid undefined behaviour with the ctype(3) functions.
fix https://github.com/pkgconf/pkgconf/issues/291

As defined in the C standard:

        In all cases the argument is an int, the value of which shall
        be representable as an unsigned char or shall equal the value
        of the macro EOF.  If the argument has any other value, the
        behavior is undefined.

This is because they're designed to work with the int values returned
by getc or fgetc; they need extra work to handle a char value.

If EOF is -1 (as it almost always is), with 8-bit bytes, the allowed
inputs to the ctype(3) functions are:

        {-1, 0, 1, 2, 3, ..., 255}.

However, on platforms where char is signed, such as x86 with the
usual ABI, code like

        char *ptr = ...;
        ... isspace(*ptr) ...

may pass in values in the range:

        {-128, -127, -126, ..., -2, -1, 0, 1, ..., 127}.

This has two problems:

1. Inputs in the set {-128, -127, -126, ..., -2} are forbidden.

2. The non-EOF byte 0xff is conflated with the value EOF = -1, so
   even though the input is not forbidden, it may give the wrong
   answer.

Casting char to unsigned int first before passing the result to
ctype(3) doesn't help: inputs like -128 are unchanged by this cast,
because (on a two's-complement machine with 32-bit int and unsigned
int), converting the signed char with integer value -128 to unsigned
int gives integer value 2^32 - 128 = 0xffffff80, which is out of
range, and which is converted in int back to -128, which is also out
of range.

It is necessary to cast char inputs to unsigned char first; you can
then cast to unsigned int if you like but there's no need because the
functions will always convert the argument to int by definition.  So
the above fragment needs to be:

        char *ptr = ...;
        ... isspace((unsigned char)*ptr) ...

This patch changes unsigned int casts to unsigned char casts, and
adds unsigned char casts where they are missing.
2023-05-02 11:43:56 -07:00
Ziemowit Łąski 1c3f246198 pkgconf: Handle spaces correctly when expanding variables
Given the following .pc fragment:

includedir=/mingw64/include
Cflags: -I${includedir} -I${includedir}/taglib

Should includedir be assigned the value 'C:/Program\ Files/Git/mingw64/include', the expansion of ${includedir} will be chopped off after the first space:

Cflags: -IC:/Program\

With this patch, the expansion is corrected:

Cflags: -IC:/Program\ Files/Git/mingw64/include -IC:/Program\ Files/Git/mingw64/include/taglib

Create spaces-in-paths.pc
2023-01-20 22:18:26 +00:00
Ariadne Conill 3e481581ba add billion-laughs test fixture 2023-01-20 22:01:38 +00:00
Ariadne Conill 4e8f376c5d tests: add fixtures for github #258 2022-08-08 05:26:00 +00:00
Ariadne Conill 666b520273 tests: add tests for SPDX license assertions 2022-08-07 04:40:31 +00:00
Ariadne Conill 18e2406002 tests: add omg-sysroot-uninstalled fixture 2022-07-26 18:03:15 +00:00
Ariadne Conill 9950312fde tests: add additional test fixtures 2022-06-26 19:34:39 +00:00
Ariadne Conill 19b1befb5d add additional sysroot testcase fixtures 2022-06-26 19:21:52 +00:00
Ariadne Conill 347281ebfe tests: add fragment-comment testcase (ref #215) 2021-03-18 05:39:45 -06:00
Ariadne Conill 3783d65784 tests: add malformed-version fixture 2019-07-12 06:15:35 -05:00
William Pitcock 737e326ae1 tests: add orphaned requires.private testcase 2019-01-14 14:04:50 -06:00
William Pitcock 47284486df regress: add test for empty tuple buffer overflow issue 2018-07-28 19:45:57 -05:00
William Pitcock 8f6e071d58 tests: add test fixture for bogus .pc files 2018-06-16 16:35:19 -05:00
William Pitcock ae7faf73fd tests: add testcase for tuple dequoting bug (legacy github bug #186) 2018-06-14 16:11:21 -05:00
William Pitcock 854a6adfe9 tests: add tuple-quoting fixture 2018-06-14 15:31:00 -05:00
William Pitcock 3f753fa3dd libpkgconf: dependency: preference uncoloured nodes in event of a dependency collision 2018-03-18 19:03:18 -05:00
William Pitcock 9a53290d8a tests: add new test fixtures for Requires.internal 2018-03-18 18:00:04 -05:00
William Pitcock 7cce958d78 msvc: handle quoting correctly for cmd.exe 2018-01-05 11:31:43 -06:00
William Pitcock 6073a49229 tests: add testcases for #163 2017-12-14 22:13:19 -06:00
William Pitcock 7b1fac4c99 tests: remove fragment-quoting-4 and fragment-quoting-6 tests as they are not relevant anymore 2017-12-11 17:41:08 -06:00
William Pitcock 95b68f7c02 tests: add testcase for #140 2017-09-23 00:08:12 -05:00
William Pitcock 72cf871421 tests: regress: add malformed quoting test 2017-09-19 21:35:18 -05:00
William Pitcock 95b4930aac tests: add test for github #123 2017-07-16 17:33:42 -05:00
William Pitcock 0262b8251d libpkgconf: pkgconf_pkg_find(): correctly handle failure from pkgconf_pkg_new_from_file() 2017-05-19 23:33:49 -05:00
William Pitcock ce47fa8d89 tests: add reduced version of freebsd gtk+-3.0 crappy output situation as a testcase 2017-05-05 01:40:09 -05:00
William Pitcock 77ca17b6ff tests: back out go-style test, just verify the output because shells are terrible 2017-03-29 18:00:10 -05:00
William Pitcock f5ce5fd755 testsuite: add a parser test from Go (redhat #1437101) 2017-03-29 16:58:04 -05:00
William Pitcock a3fa9732b3 testsuite: add testsuite cases for inverse quoting situations 2017-02-25 13:57:38 -06:00
William Pitcock d558e30ab3 libpkgconf: argvsplit: quoting logic was simplified too much 2017-02-07 10:25:38 -06:00
William Pitcock 02ad6d1ab9 testsuite: add regression test for #111 2017-02-03 12:58:11 -06:00
William Pitcock 8b043a10ce testsuite: add tests for variable whitespace 2017-01-26 12:55:48 -06:00
William Pitcock 52b58ce5f5 tests: regress: add another test case for -idirafter ordering (noticed on pkg-config bugzilla) 2016-12-30 20:25:02 -06:00
William Pitcock 951a844c94 tests: add tests for the fragment mergeback changes 2016-12-30 12:45:29 -06:00
William Pitcock ad1e414dee libpkgconf: fragment: handle -idirafter in the same way as -isystem
(https://bugs.freedesktop.org/show_bug.cgi?id=97337)
2016-12-30 02:47:42 -06:00
William Pitcock 9a89bd051d testsuite: add a test for #99 2016-10-25 14:03:25 -05:00
William Pitcock c81f72bf3c tests: provides: provide a PKG_CMP_NOT_EQUAL dependency node 2016-09-09 14:45:33 -05:00
William Pitcock 892a03cd8c pkg: fill in a lot of the fuzzy matching stuff (but some of it may be wrong, needs to be looked at) 2016-09-09 01:04:26 -05:00
William Pitcock d304d9cb2e pkg: add support for 'simple' Provides rule entries (#95) 2016-09-08 22:10:24 -05:00
William Pitcock 21c7355ca8 testsuite: improve --print-provides test by adding a provides.pc file 2016-08-26 21:36:18 -05:00
William Pitcock 834e21d37e testsuite: add tests for normal fragments and whitespace munging, too (closes #94) 2016-08-24 19:00:10 -05:00
William Pitcock 25b730fbf6 testsuite: add a test for explicit depgraph breakage 2016-05-19 17:37:27 -05:00
William Pitcock c6676e9de4 testsuite: add a test for #87 2016-05-19 16:47:11 -05:00
Baptiste Daroussin 32bd6bd700 Add a regression tests about define-variable 2015-12-07 23:36:45 +01:00
William Pitcock abbd6b06d4 Revert "Merge pull request #81 from dankegel/quotefest"
This reverts commit 42551f6364, reversing
changes made to 938bb9e694.
2015-09-27 16:10:33 -05:00
Dan Kegel d0bbc686bf Add tests for libraries quoted with double quotes, make them pass 2015-09-10 16:49:52 -07:00
Dan Kegel b88808f708 Test escaped space in a library name 2015-09-10 16:36:07 -07:00
William Pitcock d67a04011f testsuite: use /test as an explicit prefix on all tests 2015-07-20 03:10:27 -05:00
Baptiste Daroussin 72c6e9237b Ensure -I is never merged back as well 2015-07-19 23:00:35 +02:00
Baptiste Daroussin 5a8dadafc6 Ensure -L is never merged back 2015-07-19 22:49:36 +02:00