[ruby-core:120043] [Ruby master Bug#20919] IO#seek does not clear the character buffer in some cases while transcoding
From:
"javanthropus (Jeremy Bopp) via ruby-core" <ruby-core@...>
Date:
2024-11-28 13:45:20 UTC
List:
ruby-core #120043
Issue #20919 has been reported by javanthropus (Jeremy Bopp).
----------------------------------------
Bug #20919: IO#seek does not clear the character buffer in some cases while transcoding
https://bugs.ruby-lang.org/issues/20919
* Author: javanthropus (Jeremy Bopp)
* Status: Open
* ruby -v: ruby 3.4.0dev (2024-11-28T12:38:16Z master 3af1a04741) +PRISM [x86_64-linux]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
When transcoding characters, `IO#seek` only clears the internal character buffer if `IO#getc` is called first:
```ruby
require 'tempfile'
Tempfile.open(encoding: 'utf-8:utf-16le') do |f|
f.write('0123456789')
f.rewind
f.ungetc('a'.encode('utf-16le'))
# Character buffer WILL NOT be cleared
f.seek(2, :SET)
f.getc # => 'a'.encode('utf-16le'); should be '2'.encode('utf-16le')
end
Tempfile.open(encoding: 'utf-8:utf-16le') do |f|
f.write('0123456789')
f.rewind
# Added a call to #getc here
f.getc
f.ungetc('a'.encode('utf-16le'))
# Character buffer WILL be cleared now
f.seek(2, :SET)
f.getc # => '2'.encode('utf-16le')
end
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/