Replace some strtok() with strsep()
authorPeter Eisentraut <[email protected]>
Mon, 22 Jul 2024 13:45:46 +0000 (15:45 +0200)
committerPeter Eisentraut <[email protected]>
Mon, 22 Jul 2024 13:45:46 +0000 (15:45 +0200)
commit5d2e1cc117b38db6bb5dc2e9ae9115304571ac70
treeaf2998a07a70e5cd70aef2e99a11d749764358c4
parent90c1ba52e06d0847e524b6e6c3259ab1843bb05f
Replace some strtok() with strsep()

strtok() considers adjacent delimiters to be one delimiter, which is
arguably the wrong behavior in some cases.  Replace with strsep(),
which has the right behavior: Adjacent delimiters create an empty
token.

Affected by this are parsing of:

- Stored SCRAM secrets
  ("SCRAM-SHA-256$<iterations>:<salt>$<storedkey>:<serverkey>")

- ICU collation attributes
  ("und@colStrength=primary;colCaseLevel=yes") for ICU older than
  version 54

- PG_COLORS environment variable
  ("error=01;31:warning=01;35:note=01;36:locus=01")

- pg_regress command-line options with comma-separated list arguments
  (--dbname, --create-role) (currently only used pg_regress_ecpg)

Reviewed-by: Kyotaro Horiguchi <[email protected]>
Reviewed-by: David Steele <[email protected]>
Discussion: https://www.postgresql.org/message-id/flat/79692bf9-17d3-41e6-b9c9-fc8c3944222a@eisentraut.org
src/backend/libpq/auth-scram.c
src/backend/utils/adt/pg_locale.c
src/common/logging.c
src/test/regress/pg_regress.c