All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Douglas Anderson <dianders@chromium.org>
Cc: Devicetree-compiler@vger.kernel.org,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Konrad Dybcio" <konradybcio@kernel.org>,
	"Peter Griffin" <peter.griffin@linaro.org>,
	"Saravana Kannan" <saravanak@kernel.org>,
	Devicetree@vger.kernel.org, "Simon Glass" <sjg@chromium.org>,
	"Chen-Yu Tsai" <wenst@chromium.org>,
	"Julius Werner" <jwerner@chromium.org>,
	"Brian Norris" <briannorris@chromium.org>,
	linux-kernel@vger.kernel.org,
	"Tudor Ambarus" <tudor.ambarus@linaro.org>,
	"André Draszik" <andre.draszik@linaro.org>
Subject: Re: [PATCH v3 04/15] pylibfdt: Handle empty properties in as_str() and as_stringlist()
Date: Mon, 2 Nov 2026 15:33:33 +1100	[thread overview]
Message-ID: <augSnIzaWsUqepc6@gractus.seuss> (raw)
In-Reply-To: <20261101220224.1436242-5-dianders@chromium.org>

[-- Attachment #1: Type: text/plain, Size: 3545 bytes --]

On Sun, Nov 01, 2026 at 02:01:11PM -0800, Douglas Anderson wrote:
> Currently, calling `Property.as_str()` or `Property.as_stringlist()` on
> an empty `Property` (`b''`) raises `IndexError: bytearray index out of
> range` when indexing `self[-1]`.
> 
> Update `Property.as_str()` to raise `ValueError('Property lacks nul
> termination')` on an empty property, and update
> `Property.as_stringlist()` to return `[]` on an empty property. Add unit
> tests in `tests/pylibfdt_tests.py`.
> 
> Assisted-by: Gemini:gemini-pro-prerelease
> Signed-off-by: Douglas Anderson <dianders@chromium.org>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

> ---
> 
> Changes in v3:
> - Split Property.as_str() and Property.as_stringlist() empty-property
>   handling into a standalone patch and add direct Property unit tests
>   (Simon Glass, David Gibson)
> 
>  pylibfdt/libfdt.i       | 4 +++-
>  tests/pylibfdt_tests.py | 7 +++++++
>  2 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i
> index 5c8859b37df3..eb14312986ea 100644
> --- a/pylibfdt/libfdt.i
> +++ b/pylibfdt/libfdt.i
> @@ -932,7 +932,7 @@ class Property(bytearray):
>  
>      def as_str(self):
>          """Unicode is supported by decoding from UTF-8"""
> -        if self[-1] != 0:
> +        if not self or self[-1] != 0:
>              raise ValueError('Property lacks nul termination')
>          if 0 in self[:-1]:
>              raise ValueError('Property contains embedded nul characters')
> @@ -940,6 +940,8 @@ class Property(bytearray):
>  
>      def as_stringlist(self):
>          """Unicode is supported by decoding from UTF-8"""
> +        if not self:
> +            return []
>          if self[-1] != 0:
>              raise ValueError('Property lacks nul termination')
>          parts = self[:-1].split(b'\x00')
> diff --git a/tests/pylibfdt_tests.py b/tests/pylibfdt_tests.py
> index 93408745c575..20741d8f2df0 100644
> --- a/tests/pylibfdt_tests.py
> +++ b/tests/pylibfdt_tests.py
> @@ -423,6 +423,10 @@ class PyLibfdtBasicTests(unittest.TestCase):
>                           self.fdt.getprop(node, "compatible").as_stringlist())
>          self.assertEqual(["this is a placeholder string", "string2"],
>                           self.fdt.getprop(node, "placeholder").as_stringlist())
> +        self.assertEqual([], libfdt.Property('empty', b'').as_stringlist())
> +        with self.assertRaises(ValueError) as e:
> +            libfdt.Property('bad', b'no-nul').as_stringlist()
> +        self.assertIn('lacks nul termination', str(e.exception))
>  
>      def testReserveMap(self):
>          """Test that we can access the memory reserve map"""
> @@ -523,6 +527,9 @@ class PyLibfdtBasicTests(unittest.TestCase):
>          with self.assertRaises(ValueError) as e:
>              self.fdt.getprop(node, 'prop-int').as_str()
>          self.assertIn('lacks nul termination', str(e.exception))
> +        with self.assertRaises(ValueError) as e:
> +            libfdt.Property('empty', b'').as_str()
> +        self.assertIn('lacks nul termination', str(e.exception))
>  
>          node2 = self.fdt.path_offset('/subnode@1/subsubnode')
>          with self.assertRaises(ValueError) as e:
> -- 
> 2.56.0.317.g454f8302e1-goog
> 
> 

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2026-11-02  4:33 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-01 22:01 [PATCH v3 00/15] fdtfactor: Introduce fdtfactor to auto-factor overlays Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 01/15] libfdt: overlay: Fix out-of-bounds write on bad fixup offset Douglas Anderson
2026-11-02  4:29   ` David Gibson
2026-11-01 22:01 ` [PATCH v3 02/15] libfdt: overlay: Drop redundant *sep != ':' checks after memchr() Douglas Anderson
2026-11-02  4:30   ` David Gibson
2026-11-01 22:01 ` [PATCH v3 03/15] pylibfdt: Clarify iterator docstrings and test negative offsets Douglas Anderson
2026-11-02  4:32   ` David Gibson
2026-11-01 22:01 ` [PATCH v3 04/15] pylibfdt: Handle empty properties in as_str() and as_stringlist() Douglas Anderson
2026-11-02  4:33   ` David Gibson [this message]
2026-11-01 22:01 ` [PATCH v3 05/15] pylibfdt: Add Fdt.set_boot_cpuid_phys() Douglas Anderson
2026-11-02  4:34   ` David Gibson
2026-11-01 22:01 ` [PATCH v3 06/15] pylibfdt: Support copy.copy() and copy.deepcopy() on Property Douglas Anderson
2026-11-02  4:35   ` David Gibson
2026-11-01 22:01 ` [PATCH v3 07/15] devicetree: Add DeviceTree live tree representation Douglas Anderson
2026-11-02  9:31   ` David Gibson
2026-11-01 22:01 ` [PATCH v3 08/15] libfdt: overlay: Factor out fixup and fragment path parsing helpers Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 09/15] libfdt: overlay: Prepare fragment path helper for reuse Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 10/15] libfdt: overlay: Make fdto const in overlay_apply_node() Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 11/15] libfdt: overlay: Update base /__local_fixups__ on apply Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 12/15] fdtfactor: Add tool to split DTBs into a base DTB and overlays Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 13/15] fdtfactor: Add -S/--strip-local-fixups option Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 14/15] fdtfactor: Support compressed DTB inputs and outputs Douglas Anderson
2026-11-01 22:01 ` [PATCH v3 15/15] fdtfactor: Add compiled FIT factoring support Douglas Anderson
2026-11-02  4:44 ` [PATCH v3 00/15] fdtfactor: Introduce fdtfactor to auto-factor overlays David Gibson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=augSnIzaWsUqepc6@gractus.seuss \
    --to=david@gibson.dropbear.id.au \
    --cc=Devicetree-compiler@vger.kernel.org \
    --cc=Devicetree@vger.kernel.org \
    --cc=andre.draszik@linaro.org \
    --cc=briannorris@chromium.org \
    --cc=conor+dt@kernel.org \
    --cc=dianders@chromium.org \
    --cc=jwerner@chromium.org \
    --cc=konradybcio@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peter.griffin@linaro.org \
    --cc=robh@kernel.org \
    --cc=saravanak@kernel.org \
    --cc=sjg@chromium.org \
    --cc=tudor.ambarus@linaro.org \
    --cc=wenst@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.