| See details in PE-34535, a portion of the stack trace is below:
2022-09-08T15:05:11.285-04:00 ERROR [qtp2123677471-318634] [p.r.core] Internal Server Error: org.jruby.exceptions.RuntimeError: (InvalidMetadata) JSON::ParserError |
at opt.puppetlabs.puppet.lib.ruby.vendor_ruby.puppet.module.task.read_metadata(/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/module/task.rb:240) |
at opt.puppetlabs.puppet.lib.ruby.vendor_ruby.puppet.module.task.metadata(/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/module/task.rb:244) |
at opt.puppetlabs.puppet.lib.ruby.vendor_ruby.puppet.info_service.task_information_service.tasks_per_environment(/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/info_service/task_information_service.rb:9)
|
Puppet uses multi-json to wrap different json implementations. This way you can get better performance when using puppet as a library in different runtimes, e.g. Oj, JrJackson, etc. When MultiJson.load is called it is supposed to according to the doc:
When loading invalid JSON, MultiJSON will throw a MultiJson::ParseError
However, when using the default json backend, it raises a JSON namespaced exception instead when trying to parse an empty string. This confuses Puppet::Util::Json.load and causes the JSON exception to leak. This seems like a bug in multijson, but we should be more defensive when rescuing so. |