[Buildroot] [PATCH 1/1] flatcc: fix gcc8 compilation
Baruch Siach
baruch at tkos.co.il
Sun Jun 10 05:07:52 UTC 2018
Hi Joel,
On Fri, Jun 08, 2018 at 01:21:05PM -0600, Joel Carlson wrote:
> gcc8 issues errors for uses of strncpy where the NULL terminator may not
> be copied. This patches flatcc to fix those instances.
>
> Signed-off-by: Joel Carlson <JoelsonCarl at gmail.com>
>
> ---
> Upstream is aware of the issue (see [1]), so this patch may get dropped when a
> new version of flatcc is released and we bump to it.
>
> [1] https://github.com/dvidelabs/flatcc/pull/86
As the upstream maintainer noted in that pull request, this is not a correct
fix. Upstream commit c0df0b6fca4fa6b should fix the issue. I'll give it a try
later today, if you don't beat me to it.
baruch
> ---
> package/flatcc/0001-gcc8-strncpy-errors.patch | 71 +++++++++++++++++++++++++++
> 1 file changed, 71 insertions(+)
> create mode 100644 package/flatcc/0001-gcc8-strncpy-errors.patch
>
> diff --git a/package/flatcc/0001-gcc8-strncpy-errors.patch b/package/flatcc/0001-gcc8-strncpy-errors.patch
> new file mode 100644
> index 0000000..bf7d35b
> --- /dev/null
> +++ b/package/flatcc/0001-gcc8-strncpy-errors.patch
> @@ -0,0 +1,71 @@
> +Fix compilation with gcc8
> +
> +gcc8 issues errors for uses of strncpy where the NULL terminator may not be
> +copied.
> +
> +Upstream is aware of the issue, and it is possible this patch may be removed
> +when the version is bumped in the future.
> +
> +Signed-off-by: Joel Carlson <JoelsonCarl at gmail.com>
> +
> +diff --git a/include/flatcc/reflection/flatbuffers_common_reader.h b/include/flatcc/reflection/flatbuffers_common_reader.h
> +index faa7a9f..b86ffbc 100644
> +--- a/include/flatcc/reflection/flatbuffers_common_reader.h
> ++++ b/include/flatcc/reflection/flatbuffers_common_reader.h
> +@@ -433,7 +433,12 @@ static inline T N ## _ ## NK(N ## _struct_t t) { return t ? &(t->NK) : 0; }
> + /* If fid is null, the function returns true without testing as buffer is not expected to have any id. */
> + static inline int flatbuffers_has_identifier(const void *buffer, const char *fid)
> + { flatbuffers_thash_t id, id2 = 0; if (fid == 0) { return 1; };
> +- strncpy((char *)&id2, fid, sizeof(id2));
> ++ const char *s;
> ++ unsigned int i;
> ++ for (s = fid, i = 0; i < sizeof(id2); ++i) {
> ++ ((char *)&id2)[i] = *s;
> ++ s += *s != 0;
> ++ }
> + /* Identifier strings are always considered little endian. */
> + id2 = __flatbuffers_thash_cast_from_le(id2);
> + id = __flatbuffers_thash_read_from_pe(((flatbuffers_uoffset_t *)buffer) + 1);
> +diff --git a/src/runtime/json_printer.c b/src/runtime/json_printer.c
> +index 8fe2483..5baceb2 100644
> +--- a/src/runtime/json_printer.c
> ++++ b/src/runtime/json_printer.c
> +@@ -1013,6 +1013,8 @@ static int accept_header(flatcc_json_printer_t * ctx,
> + const void *buf, size_t bufsiz, const char *fid)
> + {
> + flatbuffers_thash_t id, id2 = 0;
> ++ const char *s;
> ++ unsigned int i;
> +
> + if (buf == 0 || bufsiz < offset_size + FLATBUFFERS_IDENTIFIER_SIZE) {
> + RAISE_ERROR(bad_input);
> +@@ -1020,7 +1022,10 @@ static int accept_header(flatcc_json_printer_t * ctx,
> + return 0;
> + }
> + if (fid != 0) {
> +- strncpy((char *)&id2, fid, FLATBUFFERS_IDENTIFIER_SIZE);
> ++ for (s = fid, i = 0; i < sizeof(id2); ++i) {
> ++ ((char *)&id2)[i] = *s;
> ++ s += *s != 0;
> ++ }
> + id2 = __flatbuffers_thash_cast_from_le(id2);
> + id = __flatbuffers_thash_read_from_pe((uint8_t *)buf + offset_size);
> + if (!(id2 == 0 || id == id2)) {
> +diff --git a/src/runtime/verifier.c b/src/runtime/verifier.c
> +index 68dbc1b..0733ff0 100644
> +--- a/src/runtime/verifier.c
> ++++ b/src/runtime/verifier.c
> +@@ -111,7 +111,12 @@ static inline uoffset_t read_uoffset(const void *p, uoffset_t base)
> + static inline thash_t read_thash_identifier(const char *identifier)
> + {
> + flatbuffers_thash_t id = 0;
> +- strncpy((char *)&id, identifier, sizeof(id));
> ++ const char *s;
> ++ unsigned int i;
> ++ for (s = identifier, i = 0; i < sizeof(id); ++i) {
> ++ ((char *)&id)[i] = *s;
> ++ s += *s != 0;
> ++ }
> + return __flatbuffers_thash_cast_from_le(id);
> + }
> +
--
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
More information about the buildroot
mailing list