{"record":{"id":"729a2e7b6fadba6a","repo":"ruby/rubygems","slug":"binary-string-too-large-stack-join","errorCode":null,"errorMessage":"binary string too large @ #{stack.join(\".\")}","messagePattern":"binary string too large @ #(.+?)","errorType":"exception","errorClass":"Gem::SafeMarshal::Visitors::ToRuby::TimeTooLargeError","httpStatus":null,"severity":"error","filePath":"lib/rubygems/safe_marshal/visitors/to_ruby.rb","lineNumber":102,"sourceCode":"\n        case e.object\n        when Elements::UserDefined\n          if object.class == ::Time\n            internal = []\n\n            ivars.reject! do |k, v|\n              case k\n              when :offset, :zone, :nano_num, :nano_den, :submicro\n                internal << [k, v]\n                true\n              else\n                false\n              end\n            end\n\n            s = e.object.binary_string\n            # 122 is the largest integer that can be represented in marshal in a single byte\n            raise TimeTooLargeError.new(\"binary string too large\", stack: formatted_stack) if s.bytesize > 122\n\n            marshal_string = \"\\x04\\bIu:\\tTime\".b\n            marshal_string.concat(s.bytesize + 5)\n            marshal_string << s\n            # internal is limited to 5, so no overflow is possible\n            marshal_string.concat(internal.size + 5)\n\n            internal.each do |k, v|\n              k = k.name\n              # ivar name can't be too large because only known ivars are in the internal ivars list\n              marshal_string.concat(\":\")\n              marshal_string.concat(k.bytesize + 5)\n              marshal_string.concat(k)\n              dumped = Marshal.dump(v)\n              dumped[0, 2] = \"\"\n              marshal_string.concat(dumped)\n            end\n","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/ruby/rubygems/blob/86cbb817a38ce8477b181c17467a703ded3f2be8/lib/rubygems/safe_marshal/visitors/to_ruby.rb#L84-L120","documentation":"Error \"binary string too large @ #{stack.join(\".\")}\" thrown in ruby/rubygems.","triggerScenarios":"Thrown at lib/rubygems/safe_marshal/visitors/to_ruby.rb:102 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["The metadata contains an oversized binary string; the gem is corrupt or malicious — re-download from the official source"],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"86cbb817a38ce8477b181c17467a703ded3f2be8","analyzedAt":"2026-08-23T06:27:48.159Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}