[libcamera-devel] [PATCH 16/16] test: Ensure LIBCAMERA_BASE_PRIVATE isn't public

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Jun 25 15:02:05 CEST 2021


Hi Kieran,

Thank you for the patch.

On Fri, Jun 25, 2021 at 10:44:16AM +0100, Kieran Bingham wrote:
> On 25/06/2021 10:05, paul.elder at ideasonboard.com wrote:
> > On Fri, Jun 25, 2021 at 02:35:39AM +0100, Kieran Bingham wrote:
> >> If LIBCAMERA_BASE_PRIVATE is ever exposed on the libcamera public dependencies,
> >> then the private.h header protection will be circumvented.
> >>
> >> Provide a test which will fail (at compile time) if the LIBCAMERA_BASE_PRIVATE
> >> define ever leaks to the public dependencies.
> >>
> >> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> >> ---
> >>  test/meson.build    |  1 +
> >>  test/public-api.cpp | 25 +++++++++++++++++++++++++
> >>  2 files changed, 26 insertions(+)
> >>  create mode 100644 test/public-api.cpp
> >>
> >> diff --git a/test/meson.build b/test/meson.build
> >> index 73eb44d03ad0..2c3e76546fbc 100644
> >> --- a/test/meson.build
> >> +++ b/test/meson.build
> >> @@ -25,6 +25,7 @@ subdir('v4l2_videodevice')
> >>  
> >>  public_tests = [
> >>      ['geometry',                        'geometry.cpp'],
> >> +    ['public-api',                      'public-api.cpp'],
> >>      ['signal',                          'signal.cpp'],
> >>      ['span',                            'span.cpp'],
> >>  ]
> >> diff --git a/test/public-api.cpp b/test/public-api.cpp
> >> new file mode 100644
> >> index 000000000000..5afce97c6887
> >> --- /dev/null
> >> +++ b/test/public-api.cpp
> >> @@ -0,0 +1,25 @@
> >> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> >> +/*
> >> + * Copyright (C) 2021, Google Inc.
> >> + *
> >> + * public-api.cpp - Public API validation
> >> + */
> >> +
> >> +#include <libcamera/libcamera.h>
> >> +
> >> +#include "test.h"
> >> +
> >> +class PublicAPITest : public Test
> >> +{
> >> +	int run()
> >> +	{
> >> +#ifdef LIBCAMERA_BASE_PRIVATE
> >> +#error "Public Interfaces should not be exposed to LIBCAMERA_BASE_PRIVATE"

s/Interfaces/interfaces/

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> > s/be exposed to/expose/ ?
> 
> Hrm, that's not actually my intention. It would check both cases though.
> It's subtle, ...
> 
> My intention is to prevent someone adding or changing the meson
> dependencies such that somehow libcamera_base_private ends up being a
> part of libcamera_public dependency which would then magically make all
> public interfaces compile with LIBCAMERA_BASE_PRIVATE defined, and that
> would then break all the protection.
> 
> But your change, would also be correct and something to protect against
> (and which this does protect against) but it's not something I would
> expect to happen, as that would imply someone has added a #define
> LIBCAMERA_BASE_PRIVATE within one of the API headers (which would then
> have the same break.
> 
> > Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> > 
> >> +		return TestFail;
> >> +#else
> >> +		return TestPass;
> >> +#endif
> >> +	}
> >> +};
> >> +
> >> +TEST_REGISTER(PublicAPITest)

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list