hapijs / hapi

The Simple, Secure Framework Developers Trust

Home Page:https://hapi.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Buffer response with binary status validation always throws 500

figuernd opened this issue · comments

Support plan

  • is this issue currently blocking your project? (yes/no): no
  • is this issue affecting a production system? (yes/no): yes

Context

  • node version: 12
  • module version with issue: 19.2.0
  • last module version without issue: Unknown
  • environment (e.g. node, browser, native): node
  • used with (e.g. hapi application, another framework, standalone, ...): @hapi/hapi
  • any other relevant information:

What are you trying to achieve or the steps to reproduce?

Given this response:

const testBuffer = Buffer.from('hello world', 'binary');
return h.response(csv_results).encoding('binary')
  .header('Content-Length', testBuffer.length)
  .type('application/octet-stream').code(200);

With this config:

response: {
          status: {
            200: Joi.binary()
          },
        },

What was the result you got?

Debug: internal, implementation, error 
    Error: Cannot validate non-object response
    at exports.response (/node_modules/@hapi/hapi/lib/validation.js:179:20)

What result did you expect?

Success/no error.

Observing @hapi/lib/validation.js, the error appears to be that the the "binary" response schema is not being honored, with request.response.variety being set to "plain" when it should be "buffer".

    if (!response.isBoom &&
        request.response.variety !== 'plain') {

        throw Boom.badImplementation('Cannot validate non-object response');
    }

My workaround has been to simply remove status validation from the config altogether.