jimhigson / oboe.js

A streaming approach to JSON. Oboe.js speeds up web applications by providing parsed objects before the response completes.
http://oboejs.com
Other
4.77k stars 209 forks source link

length of undefined error during parsing #240

Open sserdyuk opened 2 years ago

sserdyuk commented 2 years ago

I have stumbled on this issue today. It has something to do with one specific file that triggers that branch in the logic. Other files seem to work just fine. For this reason I am not able to present a sandbox with an example. Luckily, the problem is very easy to see. It is in the checkBufferLength method of the clarinet.js file. If the conditions is right and the emitError('Max buffer length exceeded: textNode') code is executed, the emitError method resets the textNode value and the following line maxActual = Math.max(maxActual, textNode.length) fails with an error.

The most obvious solution would be to simply swap these two lines around.

function checkBufferLength () {
    var maxActual = 0

    if (textNode !== undefined && textNode.length > MAX_BUFFER_LENGTH) {
      emitError('Max buffer length exceeded: textNode')
      maxActual = Math.max(maxActual, textNode.length)
    }
    if (numberNode.length > MAX_BUFFER_LENGTH) {
      emitError('Max buffer length exceeded: numberNode')
      maxActual = Math.max(maxActual, numberNode.length)
    }

    bufferCheckPosition = (MAX_BUFFER_LENGTH - maxActual) +
      position
  }

https://github.com/jimhigson/oboe.js/blob/52d150dd78b20205bd26d63c807ac170c03f0f64/dist/oboe-browser.js#L2381-L2384