]> git.ipfire.org Git - thirdparty/systemd.git/commit
basic/strv: avoid potential UB with references to array[-1]
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 21 Mar 2022 10:03:00 +0000 (11:03 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 21 Mar 2022 12:48:00 +0000 (13:48 +0100)
commit9b01798b98d1d8e7cecb2eaf49aa6cc39d57ae0d
treeac69fb0674353b783c65d1a797c10be707416718
parente7949be7900af8e045cb530a22d023037eac273c
basic/strv: avoid potential UB with references to array[-1]

"""
Given an array a[N] of N elements of type T:
- Forming a pointer &a[i] (or a + i) with 0 ≤ i ≤ N is safe.
- Forming a pointer &a[i] with i < 0 or i > N causes undefined behavior.
- Dereferencing a pointer &a[i] with 0 ≤ i < N is safe.
- Dereferencing a pointer &a[i] with i < 0 or i ≥ N causes undefined behavior.
"""

As pointed by by @medhefgo, here we were forming a pointer to a[-1]. a itself
wasn't NULL, so a > 0, and a-1 was also >= 0, and this didn't seem to cause any
problems. But it's better to be formally correct, especially if we move the
code to src/fundamental/ later on and compile it differently.

Compilation shows no size change (with -O0 -g) on build/systemd, so this should
have no effect whatsoever.
src/basic/strv.h
src/test/test-strv.c