Skip to content

Java object factory: initialize AbstractStringBuilder-derived types correctly #2472

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 28, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
public class Test {

public static void testme(StringBuilder builder, StringBuffer buffer) {

}

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package java.lang;

public class AbstractStringBuilder implements CharSequence {

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package java.lang;

interface CharSequence {

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package java.lang;

public class String implements CharSequence {

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package java.lang;

public class StringBuffer extends AbstractStringBuilder {

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package java.lang;

public class StringBuilder extends AbstractStringBuilder {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CORE
Test.class
--function Test.testme
^EXIT=0$
^SIGNAL=0$
^VERIFICATION SUCCESSFUL$
--
type mismatch
--
Before cbmc#2472 this would assume that StringBuilder's direct parent was
java.lang.Object, causing a type mismatch when --refine-strings was not in use
(which at the time would assume that parent-child relationship)
Binary file not shown.
36 changes: 36 additions & 0 deletions jbmc/regression/jbmc-strings/StringModelsWithFields/Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
public class Test {

public static void testme(StringBuilder builder, StringBuffer buffer, String str) {

// In this test the versions of String, StringBuilder and
// StringBuffer.class supplied have fields beyond the expected situation
// of either no fields at all (without --refine-strings) or only 'length'
// and 'data' (with --refine-strings). We check they have been nondet-
// initialized as expected by making sure we can reach the final
// 'assert false'.

if(str != null &&
builder != null &&
buffer != null &&
str.a != null &&
builder.i != null &&
buffer.i != null &&
str.a.x >= 5 &&
str.a.y <= -10.0f &&
builder.d >= 100.0 &&
buffer.b == true) {

assert builder instanceof StringBuilder;
assert buffer instanceof StringBuffer;
assert str instanceof String;

assert str.a instanceof A;
assert builder.i instanceof Integer;
assert buffer.i instanceof Integer;

assert false;
}

}

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package java.lang;

public class A {

public int x;
public float y;

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package java.lang;

public class AbstractStringBuilder implements CharSequence {

public Integer i;

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package java.lang;

interface CharSequence {

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package java.lang;

public class String implements CharSequence {

public A a;

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package java.lang;

public class StringBuffer extends AbstractStringBuilder {

public boolean b;

}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package java.lang;

public class StringBuilder extends AbstractStringBuilder {

public double d;

}
14 changes: 14 additions & 0 deletions jbmc/regression/jbmc-strings/StringModelsWithFields/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
CORE
Test.class
--function Test.testme
^EXIT=10$
^SIGNAL=0$
assertion at file Test.java line 23 .* SUCCESS
assertion at file Test.java line 24 .* SUCCESS
assertion at file Test.java line 25 .* SUCCESS
assertion at file Test.java line 27 .* SUCCESS
assertion at file Test.java line 28 .* SUCCESS
assertion at file Test.java line 29 .* SUCCESS
assertion at file Test.java line 31 .* FAILURE
--
type mismatch
Loading