From 6ffd4338f129aa8acc8dd3c7ae01b50b91da1d80 Mon Sep 17 00:00:00 2001 From: Yutaro Sakamoto Date: Fri, 19 Sep 2025 04:32:14 +0000 Subject: [PATCH 1/4] fix: set limits of sequential file records --- .../osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java | 2 +- .../opensourcecobol/libcobj/file/CobolSequentialFile.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java index a49f5b6f..46385377 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolRelativeFile.java @@ -192,7 +192,7 @@ public int open_(String filename, int mode, int sharing) throws IOException { } } - if(mode == COB_OPEN_OUTPUT) { + if (mode == COB_OPEN_OUTPUT) { this.fp.setLength(0); this.fp.seek(0); } diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java index d5e33800..7c2a499b 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java @@ -135,7 +135,7 @@ public int readNext(int readOpts) { } } int size = ByteBuffer.wrap(sbuff).getInt(); - this.record.setSize(size); + this.record.setSize(Math.min(size, this.record_max)); } try { From 68bc4a145c8443e121528eada319e61bed806d5c Mon Sep 17 00:00:00 2001 From: Yutaro Sakamoto Date: Fri, 19 Sep 2025 04:46:23 +0000 Subject: [PATCH 2/4] test: add tests for variable length files --- tests/Makefile.am | 3 +- tests/Makefile.in | 3 +- tests/misc.at | 1 + tests/misc.src/TEST_VAR_LENGTH.txt | Bin 0 -> 787 bytes tests/misc.src/variable-length-file.at | 51 +++++++++++++++++++++++++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 tests/misc.src/TEST_VAR_LENGTH.txt create mode 100644 tests/misc.src/variable-length-file.at diff --git a/tests/Makefile.am b/tests/Makefile.am index c9653eba..341f1351 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -261,7 +261,8 @@ misc_DEPENDENCIES = \ misc.src/fix-subtract.at \ misc.src/display-numeric-NUMERIC-class.at \ misc.src/display-inspect-sign.at \ - misc.src/comp1-comp2.at + misc.src/comp1-comp2.at \ + misc.src/variable-length-file.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 9075bfd1..28b4a981 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -800,7 +800,8 @@ misc_DEPENDENCIES = \ misc.src/fix-subtract.at \ misc.src/display-numeric-NUMERIC-class.at \ misc.src/display-inspect-sign.at \ - misc.src/comp1-comp2.at + misc.src/comp1-comp2.at \ + misc.src/variable-length-file.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ diff --git a/tests/misc.at b/tests/misc.at index c6a735ff..af958f71 100644 --- a/tests/misc.at +++ b/tests/misc.at @@ -56,3 +56,4 @@ m4_include([fix-subtract.at]) m4_include([display-numeric-NUMERIC-class.at]) m4_include([display-inspect-sign.at]) m4_include([comp1-comp2.at]) +m4_include([variable-length-file.at]) diff --git a/tests/misc.src/TEST_VAR_LENGTH.txt b/tests/misc.src/TEST_VAR_LENGTH.txt new file mode 100644 index 0000000000000000000000000000000000000000..8ab1827b43ce830fd90698f85eb82bbe7f3617d6 GIT binary patch literal 787 fcmZQzVCM7j@i9dP3dkH(DI^(%Q7{?;!!ZN^4r*qn literal 0 HcmV?d00001 diff --git a/tests/misc.src/variable-length-file.at b/tests/misc.src/variable-length-file.at new file mode 100644 index 00000000..9192fc1f --- /dev/null +++ b/tests/misc.src/variable-length-file.at @@ -0,0 +1,51 @@ +AT_SETUP([READING VARIABLE LENGTH FILE]) + +AT_DATA([prog.cbl], [ + IDENTIFICATION DIVISION. + PROGRAM-ID. prog. + ENVIRONMENT DIVISION. + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT TEST-FILE + ASSIGN TO "../../misc.src/TEST_VAR_LENGTH.txt". + DATA DIVISION. + FILE SECTION. + FD TEST-FILE. + 01 REC-1 PIC X(18). + 01 REC-2 PIC X(54). + PROCEDURE DIVISION. + MAIN-PARA. + MOVE SPACES TO REC-1 REC-2. + PERFORM OPEN-FILE. + PERFORM READ-REC. + PERFORM CLOSE-FILE. + STOP RUN. + + OPEN-FILE. + OPEN INPUT TEST-FILE. + + READ-REC. + DISPLAY "REC-1: " REC-1. + DISPLAY "REC-2: " REC-2. + READ TEST-FILE. + DISPLAY "REC-1: " REC-1. + DISPLAY "REC-2: " REC-2. + + CLOSE-FILE. + CLOSE TEST-FILE. +]) + +// Checking the number of bytes +AT_CHECK([od -N 4 -t x1 -An ../../misc.src/TEST_VAR_LENGTH.txt], [0], +[ 00 00 03 0e +]) + +AT_CHECK([${COMPILE} prog.cbl], [0]) +AT_CHECK([${RUN_MODULE} prog], [0], +[REC-1: @&t@ +REC-2: @&t@ +REC-1: LLL5555555555555 5 +REC-2: LLL5555555555555 555555555555L555555555555555555555555 +]) + +AT_CLEANUP \ No newline at end of file From 65ccd8ca55b9a2c13566ad6959ac05df5d519447 Mon Sep 17 00:00:00 2001 From: Yutaro Sakamoto Date: Fri, 19 Sep 2025 06:13:39 +0000 Subject: [PATCH 3/4] chore: remove unnecessary spaces --- tests/Makefile.am | 2 +- tests/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index 341f1351..0006440a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -262,7 +262,7 @@ misc_DEPENDENCIES = \ misc.src/display-numeric-NUMERIC-class.at \ misc.src/display-inspect-sign.at \ misc.src/comp1-comp2.at \ - misc.src/variable-length-file.at + misc.src/variable-length-file.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 28b4a981..a37c42d2 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -801,7 +801,7 @@ misc_DEPENDENCIES = \ misc.src/display-numeric-NUMERIC-class.at \ misc.src/display-inspect-sign.at \ misc.src/comp1-comp2.at \ - misc.src/variable-length-file.at + misc.src/variable-length-file.at EXTRA_DIST = $(srcdir)/package.m4 \ $(TESTS) \ From 1b8b4a143c57c5f45773907463c83bb275073c51 Mon Sep 17 00:00:00 2001 From: Yutaro Sakamoto Date: Mon, 22 Sep 2025 00:59:43 +0000 Subject: [PATCH 4/4] fix: check that the record size is not less than record_min --- .../opensourcecobol/libcobj/file/CobolSequentialFile.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java index 7c2a499b..86916d50 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/file/CobolSequentialFile.java @@ -135,7 +135,9 @@ public int readNext(int readOpts) { } } int size = ByteBuffer.wrap(sbuff).getInt(); - this.record.setSize(Math.min(size, this.record_max)); + size = Math.max(size, this.record_min); + size = Math.min(size, this.record_max); + this.record.setSize(size); } try {