From c427ac0d6c53c777a6e761b59cfc484c8af0701b Mon Sep 17 00:00:00 2001 From: Daniel Poetzl Date: Mon, 23 Sep 2019 11:17:55 +0100 Subject: [PATCH 1/2] Fix typo in string solver string preprocessing The typo prevented CProverString.deleteCharAt(StringBuffer) from being replaced by the corresponding string solver primitive. --- jbmc/src/java_bytecode/java_string_library_preprocess.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jbmc/src/java_bytecode/java_string_library_preprocess.cpp b/jbmc/src/java_bytecode/java_string_library_preprocess.cpp index 044f13401fc..55ed8dc642c 100644 --- a/jbmc/src/java_bytecode/java_string_library_preprocess.cpp +++ b/jbmc/src/java_bytecode/java_string_library_preprocess.cpp @@ -1507,7 +1507,7 @@ void java_string_library_preprocesst::initialize_conversion_table() ID_cprover_string_delete_func; cprover_equivalent_to_java_assign_and_return_function ["java::org.cprover.CProverString.deleteCharAt:(Ljava/lang/" - "StringBufferI)Ljava/lang/StringBuffer;"] = + "StringBuffer;I)Ljava/lang/StringBuffer;"] = ID_cprover_string_delete_char_at_func; cprover_equivalent_to_java_assign_and_return_function ["java::org.cprover.CProverString.deleteCharAt:(Ljava/lang/" From c785b9bd4c60406cd60b843f8331e7230b04a8dd Mon Sep 17 00:00:00 2001 From: Daniel Poetzl Date: Mon, 23 Sep 2019 12:14:44 +0100 Subject: [PATCH 2/2] Adapt existing CProverString.deleteCharAt() test and add new tests Change existing test such that it cannot be solved by constant propagation, add a test for which verification fails, and add variants that use StringBuffer instead of StringBuilder. --- .../TestDeleteCharAt.class | Bin 0 -> 1698 bytes .../java_delete_char_at/TestDeleteCharAt.java | 42 ++++++++++++++++++ .../java_delete_char_at/test.desc | 8 ---- .../test_delete_char_at.class | Bin 923 -> 0 bytes .../test_delete_char_at.java | 11 ----- .../test_string_buffer_failure.desc | 8 ++++ .../test_string_buffer_success.desc | 8 ++++ .../test_string_builder_failure.desc | 8 ++++ .../test_string_builder_success.desc | 8 ++++ 9 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/TestDeleteCharAt.class create mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/TestDeleteCharAt.java delete mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/test.desc delete mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.class delete mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/test_delete_char_at.java create mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/test_string_buffer_failure.desc create mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/test_string_buffer_success.desc create mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/test_string_builder_failure.desc create mode 100644 jbmc/regression/strings-smoke-tests/java_delete_char_at/test_string_builder_success.desc diff --git a/jbmc/regression/strings-smoke-tests/java_delete_char_at/TestDeleteCharAt.class b/jbmc/regression/strings-smoke-tests/java_delete_char_at/TestDeleteCharAt.class new file mode 100644 index 0000000000000000000000000000000000000000..d4632a8dfbf1e37f93b43e82e418d31fc76d2f57 GIT binary patch literal 1698 zcmb`G+fNfg6vn?TExRnMlu{6if(mNOtt#NHsFWh!>LtNQ;BC7daB*#McT3d&#J>6D zvzmaBMBn|RjNkM^sWh6X*<@yR&UeoI&Y3gce|-50U+KSt%`?=o6Mn=-;!xNC6^(O9Spg?z8{gfv@q_wX>*oS zW7e08CD#&5wj}I*Lc&Gi2w!BLnQq#j+BCOK0|SULJ2Pi-eD(SbL(Bc7V-_}&O$kZq zyo$7e1!N2?;+BD9=vNRhEv92&3AdS0!#iEC=`GhSy41a5^njV;AkXP*DC_6QEM@pR z3c|nQs<><59`4iBaD0^86qet#RgJ}b=wj_)G$U?TV#?JE;IP#=DTRz^Qn z(aA{14)iiQ_t3ez3*%eORFWYlBsr=$#W63_pL+RStix2xIoD{dEY!^G_-ZiKi!#ElZS_qVtsf5HvR>ULME z8fwr`Y*Q!8mkxIR_F(PVW#7ly)u`gs8PH^gU24{wT3_swr znowgCefOUFHgI_ZZkNLwwt`P5&N4q*Q** z5N$d=&X8`IHh(_c?{fE*NT$HPZrTi~wyzuSp6P?YO_F4+F(})Hbqu4nouO;+$ENsH z@VV!AdfehZ?-*}&x1;;(d-{Q{A&VTtqPSNr-R@W0zH8e32Sd~9ahKFIx`u{zRApS( zP{W3X8>nl@V2(j*7(}aK6E}%tiqQybeB`R`_N&Igbq=^&ZN3a_2&zq5(xi?wh<0-pI>dSM zKMKWnLd1M&HjzZc`TL=6c?|P^QcTL-D%1GW)0&zV?Fhp{k9(%edne7LiTgte(1PsJ z%B5%*0hTFl1E5VqV`?jN&)UNArl!CvT4ZVQ?N`dHK