From 0b97a5261a94e2f313603fdba855d0b1d60d702f Mon Sep 17 00:00:00 2001 From: Lars HVam Date: Sun, 5 Oct 2025 11:11:43 +0200 Subject: [PATCH 1/2] implement escape_quotes --- src/abap/dyn/cl_abap_dyn_prg.clas.abap | 3 ++- .../dyn/cl_abap_dyn_prg.clas.testclasses.abap | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap diff --git a/src/abap/dyn/cl_abap_dyn_prg.clas.abap b/src/abap/dyn/cl_abap_dyn_prg.clas.abap index d072b150..db040c28 100644 --- a/src/abap/dyn/cl_abap_dyn_prg.clas.abap +++ b/src/abap/dyn/cl_abap_dyn_prg.clas.abap @@ -103,7 +103,8 @@ CLASS cl_abap_dyn_prg IMPLEMENTATION. ENDMETHOD. METHOD escape_quotes. - ASSERT 1 = 'todo'. + out = val. + REPLACE ALL OCCURRENCES OF `'` IN out WITH `''`. ENDMETHOD. METHOD escape_xss_xml_html. diff --git a/src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap b/src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap new file mode 100644 index 00000000..c828fb82 --- /dev/null +++ b/src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap @@ -0,0 +1,18 @@ +CLASS ltcl_dyn_prg DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + + PRIVATE SECTION. + METHODS escape_quotes1 FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS ltcl_dyn_prg IMPLEMENTATION. + + METHOD escape_quotes1. + + cl_abap_unit_assert=>assert_equals( + act = cl_abap_dyn_prg=>escape_quotes( `hello ' world` ) + exp = `hello '' world` ). + + ENDMETHOD. + +ENDCLASS. \ No newline at end of file From a1b8a55b9f427fdaefe92a5c069a9de7753d7340 Mon Sep 17 00:00:00 2001 From: Lars HVam Date: Sun, 5 Oct 2025 11:14:33 +0200 Subject: [PATCH 2/2] implement --- src/abap/dyn/cl_abap_dyn_prg.clas.abap | 3 ++- src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/abap/dyn/cl_abap_dyn_prg.clas.abap b/src/abap/dyn/cl_abap_dyn_prg.clas.abap index db040c28..8c7fb146 100644 --- a/src/abap/dyn/cl_abap_dyn_prg.clas.abap +++ b/src/abap/dyn/cl_abap_dyn_prg.clas.abap @@ -77,7 +77,8 @@ CLASS cl_abap_dyn_prg IMPLEMENTATION. ENDMETHOD. METHOD escape_quotes_str. - ASSERT 1 = 'todo'. + out = val. + REPLACE ALL OCCURRENCES OF '`' IN out WITH '``'. ENDMETHOD. METHOD check_table_or_view_name_str. diff --git a/src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap b/src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap index c828fb82..3329ea90 100644 --- a/src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap +++ b/src/abap/dyn/cl_abap_dyn_prg.clas.testclasses.abap @@ -2,10 +2,16 @@ CLASS ltcl_dyn_prg DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FIN PRIVATE SECTION. METHODS escape_quotes1 FOR TESTING RAISING cx_static_check. + METHODS escape_quotes_str1 FOR TESTING RAISING cx_static_check. ENDCLASS. CLASS ltcl_dyn_prg IMPLEMENTATION. + METHOD escape_quotes_str1. + cl_abap_unit_assert=>assert_equals( + act = cl_abap_dyn_prg=>escape_quotes_str( 'hello ` world' ) + exp = 'hello `` world' ). + ENDMETHOD. METHOD escape_quotes1.