Skip to content

Commit 30ac04b

Browse files
committed
[Truffle] - String#downcase! and #capitalize! raise an exception when self is frozen
1 parent 94b968c commit 30ac04b

File tree

3 files changed

+5
-7
lines changed

3 files changed

+5
-7
lines changed
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
fails:String#capitalize taints resulting string when self is tainted
22
fails:String#capitalize is locale insensitive (only upcases a-z and only downcases A-Z)
3-
fails:String#capitalize returns subclass instances when called on a subclass
4-
fails:String#capitalize! raises a RuntimeError when self is frozen
3+
fails:String#capitalize returns subclass instances when called on a subclass
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
fails:String#downcase is locale insensitive (only replaces A-Z)
22
fails:String#downcase taints result when self is tainted
33
fails:String#downcase returns a subclass instance for subclasses
4-
fails:String#downcase! raises a RuntimeError when self is frozen

truffle/src/main/java/org/jruby/truffle/nodes/core/StringNodes.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -774,12 +774,11 @@ public DowncaseBangNode(DowncaseBangNode prev) {
774774
public RubyBasicObject downcase(RubyString string) {
775775
notDesignedForCompilation();
776776

777+
string.checkFrozen(this);
777778
ByteList newByteList = StringNodesHelper.downcase(string);
778779

779780
if (newByteList.equal(string.getBytes())) {
780781
return getContext().getCoreLibrary().getNilObject();
781-
} else if (string.isFrozen()) {
782-
throw new RaiseException(getContext().getCoreLibrary().runtimeError("can't modify frozen string", this));
783782
} else {
784783
string.set(newByteList);
785784
return string;
@@ -1925,11 +1924,12 @@ public CapitalizeBangNode(CapitalizeBangNode prev) {
19251924
@Specialization
19261925
public RubyBasicObject capitalizeBang(RubyString string) {
19271926
notDesignedForCompilation();
1927+
1928+
string.checkFrozen(this);
19281929
String javaString = string.toString();
1930+
19291931
if (javaString.isEmpty()) {
19301932
return getContext().getCoreLibrary().getNilObject();
1931-
} else if (string.isFrozen()) {
1932-
throw new RaiseException(getContext().getCoreLibrary().runtimeError("can't modify frozen string", this));
19331933
} else {
19341934
final ByteList byteListString = StringNodesHelper.capitalize(string);
19351935

0 commit comments

Comments
 (0)