diff --git a/src/shared/varlink-idl.c b/src/shared/varlink-idl.c index 7d9d7874c1b..65059d33c1c 100644 --- a/src/shared/varlink-idl.c +++ b/src/shared/varlink-idl.c @@ -986,6 +986,9 @@ int varlink_idl_parse( assert(!symbol); n_fields = 0; + if (!token) + return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "%u:%u: Premature EOF.", *line, *column); + r = varlink_symbol_realloc(&symbol, n_fields); if (r < 0) return r; @@ -1004,6 +1007,9 @@ int varlink_idl_parse( case STATE_METHOD_ARROW: assert(symbol); + if (!token) + return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "%u:%u: Premature EOF.", *line, *column); + if (!streq(token, "->")) return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "%u:%u: Unexpected token '%s'.", *line, *column, token); @@ -1025,6 +1031,9 @@ int varlink_idl_parse( assert(!symbol); n_fields = 0; + if (!token) + return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "%u:%u: Premature EOF.", *line, *column); + r = varlink_symbol_realloc(&symbol, n_fields); if (r < 0) return r; @@ -1050,6 +1059,9 @@ int varlink_idl_parse( assert(!symbol); n_fields = 0; + if (!token) + return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG), "%u:%u: Premature EOF.", *line, *column); + r = varlink_symbol_realloc(&symbol, n_fields); if (r < 0) return r; diff --git a/test/fuzz/fuzz-varlink-idl/crash-d1860f2b b/test/fuzz/fuzz-varlink-idl/crash-d1860f2b new file mode 100644 index 00000000000..db720881dcd Binary files /dev/null and b/test/fuzz/fuzz-varlink-idl/crash-d1860f2b differ