[ruby-core:114486] [Ruby master Bug#19784] String#delete_prefix! problem
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2023-08-24 11:48:20 UTC
List:
ruby-core #114486
Issue #19784 has been updated by mame (Yusuke Endoh).
Discussed at the dev meeting.
We agreed that both `start_with?` and `delete_prefix` should compare charac=
ter by character if valid, and byte by byte for invalid.
```ruby
"\xFF\xFE".start_with?("\xFF") #=3D> true # not changed
"\xFF\xFE".delete_prefix("\xFF") #=3D> "\xFE" # changed
"=C4".start_with?("\xC3") #=3D> false # changed
"=C4".delete_prefix("\xC3") #=3D> "=C4" # not changed
```
Note that encoding validity is checked on a position-by-position basis:
```ruby
"\xFF=C4".delete_prefix("\xFF") #=3D> should be "=C4"
"\xFF=C4".delete_prefix("\xFF\xC3") #=3D> should be "\xFF=C4"
"\xFF=C4".delete_prefix("\xFF\xC3\x84") #=3D> should be ""
```
----------------------------------------
Bug #19784: String#delete_prefix! problem
https://bugs.ruby-lang.org/issues/19784#change-104272
* Author: inversion (Yura Babak)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
* Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN
----------------------------------------
Here is the snipped and the question is in the comments:
``` ruby
fp =3D 'with_BOM_16.txt'
body =3D File.read(fp).force_encoding('UTF-8')
p body # "\xFF\xFE1\u00001\u0000"
p body.start_with?("\xFF\xFE") # true
body.delete_prefix!("\xFF\xFE") # !!! why doesn't work?
p body # "\xFF\xFE1\u00001\u0000"
p body.start_with?("\xFF\xFE") # true
body[0, 2] =3D ''
p body # "1\u00001\u0000"
p body.start_with?("\xFF\xFE") # false
```
Works same=20
on Linux (ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux])
and Windows (ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mingw-ucrt])
--=20
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/postorius/lists/ruby-c=
ore.ml.ruby-lang.org/