From 022faf705f7149f822a03a10ff87271b284e1eda Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Tue, 7 Sep 2021 09:42:08 +0200 Subject: [PATCH] RHBZ-1944096 - assertion failure during self comparison of systemd When reading the abixml representing an enumerator which value is exactly either LLONG_MIN or LLONG_MAX, build_enum_type_decl fails because we wrongly think that an underflow or overflow happened, while using strtoll. This patch fixes the condition used to detect {under,over}flow whenusing strtoll. * src/abg-reader.cc (build_enum_type_decl): When strtoll detects an underflow or overflo, it sets errno to ERANGE. So take that into account. Signed-off-by: Dodji Seketeli --- src/abg-reader.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/abg-reader.cc b/src/abg-reader.cc index f4fe4ce8..559f8210 100644 --- a/src/abg-reader.cc +++ b/src/abg-reader.cc @@ -4325,7 +4325,11 @@ build_enum_type_decl(read_context& ctxt, if (a) { value = strtoll(CHAR_STR(a), NULL, 0); - if (value == LLONG_MIN || value == LLONG_MAX) + // when strtoll encounters overflow or underflow, errno + // is set to ERANGE and the returned value is either + // LLONG_MIN or LLONG_MAX. + if ((errno == ERANGE) + && (value == LLONG_MIN || value == LLONG_MAX)) return nil; } -- 2.43.5