mirror of
https://github.com/dgibson/dtc.git
synced 2026-07-10 13:29:48 -04:00
Several tests (truncated_property, truncated_string, truncated_memrsv and unterminated_memrsv), rather than loading their example dtb from a file, instead link directly to trees.o and get the data from directly in their own data segment. This was a clever trick once, but it's kind of awkward, and makes it harder to generalise how we generate those trees. Change them to load their example data from file, like most of the tests already do. Assisted-by: Claude:claude-opus-4-6 Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
// SPDX-License-Identifier: LGPL-2.1-or-later
|
|
/*
|
|
* libfdt - Flat Device Tree manipulation
|
|
* Testcase for misbehaviour on a truncated string
|
|
* Copyright (C) 2018 David Gibson, IBM Corporation.
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdint.h>
|
|
|
|
#include <libfdt.h>
|
|
|
|
#include "tests.h"
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
void *fdt;
|
|
const struct fdt_property *good, *bad;
|
|
int off, len;
|
|
const char *name;
|
|
|
|
test_init(argc, argv);
|
|
fdt = load_blob_arg(argc, argv);
|
|
|
|
off = fdt_first_property_offset(fdt, 0);
|
|
good = fdt_get_property_by_offset(fdt, off, NULL);
|
|
|
|
off = fdt_next_property_offset(fdt, off);
|
|
bad = fdt_get_property_by_offset(fdt, off, NULL);
|
|
|
|
if (fdt32_to_cpu(good->len) != 0)
|
|
FAIL("Unexpected length for good property");
|
|
name = fdt_get_string(fdt, fdt32_to_cpu(good->nameoff), &len);
|
|
if (!name)
|
|
FAIL("fdt_get_string() failed on good property: %s",
|
|
fdt_strerror(len));
|
|
if (len != 4)
|
|
FAIL("fdt_get_string() returned length %d (not 4) on good property",
|
|
len);
|
|
if (!streq(name, "good"))
|
|
FAIL("fdt_get_string() returned \"%s\" (not \"good\") on good property",
|
|
name);
|
|
|
|
if (fdt32_to_cpu(bad->len) != 0)
|
|
FAIL("Unexpected length for bad property\n");
|
|
name = fdt_get_string(fdt, fdt32_to_cpu(bad->nameoff), &len);
|
|
if (name)
|
|
FAIL("fdt_get_string() succeeded incorrectly on bad property");
|
|
else if (len != -FDT_ERR_TRUNCATED)
|
|
FAIL("fdt_get_string() gave unexpected error on bad property: %s",
|
|
fdt_strerror(len));
|
|
|
|
/* Make sure the 'good' property breaks correctly if we
|
|
* truncate the strings section */
|
|
fdt_set_size_dt_strings(fdt, fdt32_to_cpu(good->nameoff) + 4);
|
|
name = fdt_get_string(fdt, fdt32_to_cpu(good->nameoff), &len);
|
|
if (name)
|
|
FAIL("fdt_get_string() succeeded incorrectly on mangled property");
|
|
else if (len != -FDT_ERR_TRUNCATED)
|
|
FAIL("fdt_get_string() gave unexpected error on mangled property: %s",
|
|
fdt_strerror(len));
|
|
|
|
PASS();
|
|
}
|