File tree Expand file tree Collapse file tree 1 file changed +12
-9
lines changed Expand file tree Collapse file tree 1 file changed +12
-9
lines changed Original file line number Diff line number Diff line change @@ -164,20 +164,23 @@ Parser.prototype.parseLengthCodedNumber = function() {
164
164
throw new Error ( 'parseLengthCodedNumber: Unexpected first byte: ' + byte ) ;
165
165
}
166
166
167
- var value = 0 ;
167
+ var value = 0 , bigint = false , BigNumber = null ;
168
168
for ( var bytesRead = 0 ; bytesRead < length ; bytesRead ++ ) {
169
169
var byte = this . _buffer [ this . _offset ++ ] ;
170
- value += Math . pow ( 256 , bytesRead ) * byte ;
171
- }
172
170
173
- if ( value >= IEEE_754_BINARY_64_PRECISION ) {
174
- throw new Error (
175
- 'parseLengthCodedNumber: JS precision range exceeded, ' +
176
- 'number is >= 53 bit: "' + value + '"'
177
- ) ;
171
+ // overflow
172
+ if ( BigNumber ) {
173
+ value = value . plus ( ( new BigNumber ( 256 ) ) . pow ( bytesRead ) . times ( byte ) ) ;
174
+ } else if ( bytesRead == 7 && byte == 1 ) {
175
+ BigNumber = require ( "bignumber.js" ) ;
176
+ value = new BigNumber ( value ) ;
177
+ value = value . plus ( ( new BigNumber ( 256 ) ) . pow ( bytesRead ) . times ( byte ) ) ;
178
+ } else {
179
+ value += Math . pow ( 256 , bytesRead ) * byte ;
180
+ }
178
181
}
179
182
180
- return value ;
183
+ return ( BigNumber ? value . toString ( ) : value ) ;
181
184
} ;
182
185
183
186
Parser . prototype . parseFiller = function ( length ) {
You can’t perform that action at this time.
0 commit comments