Skip to content

Commit 224ca97

Browse files
authored
fix: fix bug with SECTION names containing full-width hyphens (#788)
1 parent dad64a7 commit 224ca97

3 files changed

Lines changed: 41 additions & 5 deletions

File tree

cobj/codegen.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5979,7 +5979,9 @@ static void joutput_label_variable_name(char *s, int key,
59795979
if (s) {
59805980
if (section && section->name) {
59815981
const char *c;
5982-
for (c = (const char *)section->name; *c; ++c) {
5982+
char section_buf[COB_SMALL_BUFF];
5983+
strcpy_identifier_cobol_to_java(section_buf, (const char *)section->name);
5984+
for (c = (const char *)section_buf; *c; ++c) {
59835985
if (*c == ' ') {
59845986
joutput("_");
59855987
} else if (*c == '-') {
@@ -5990,9 +5992,9 @@ static void joutput_label_variable_name(char *s, int key,
59905992
}
59915993
joutput("__");
59925994
}
5993-
char buf[COB_SMALL_BUFF];
5994-
strcpy_identifier_cobol_to_java(buf, s);
5995-
char *p = buf;
5995+
char label_buf[COB_SMALL_BUFF];
5996+
strcpy_identifier_cobol_to_java(label_buf, s);
5997+
char *p = label_buf;
59965998
while (*p) {
59975999
if (*p < 0x80) {
59986000
if (*p == '-') {
@@ -6009,7 +6011,7 @@ static void joutput_label_variable_name(char *s, int key,
60096011
}
60106012
}
60116013
}
6012-
joutput("%s", buf);
6014+
joutput("%s", label_buf);
60136015
} else {
60146016
joutput("anonymous__%d", key);
60156017
}

tests/cobol_utf8.src/user-defined-word.at

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,24 @@ prog.cob:9: Error: User defined name must be less than 32 characters
149149

150150
AT_CLEANUP
151151

152+
AT_SETUP([Section and Paragraph name])
153+
export LC_ALL=''
154+
155+
AT_DATA([prog.cob], [
156+
IDENTIFICATION DIVISION.
157+
PROGRAM-ID. prog.
158+
DATA DIVISION.
159+
WORKING-STORAGE SECTION.
160+
PROCEDURE DIVISION.
161+
S-初期化 SECTION.
162+
P-初期化.
163+
DISPLAY "Hello, " WITH NO ADVANCING.
164+
STOP RUN.
165+
])
166+
AT_CHECK([${COMPILE} prog.cob])
167+
AT_CHECK([java prog], [0], [Hello, ])
168+
AT_CLEANUP
169+
152170
AT_SETUP([Nihongo Filename])
153171
export LC_ALL=''
154172

tests/i18n_sjis.src/user-defined-word.at

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,22 @@ prog.cob:9: Error: User defined name must be less than 32 characters
142142

143143
AT_CLEANUP
144144

145+
AT_SETUP([Section and Paragraph name])
146+
AT_DATA([prog.cob], [
147+
IDENTIFICATION DIVISION.
148+
PROGRAM-ID. prog.
149+
DATA DIVISION.
150+
WORKING-STORAGE SECTION.
151+
PROCEDURE DIVISION.
152+
�r�|������ SECTION.
153+
�o�|������.
154+
DISPLAY "Hello, " WITH NO ADVANCING.
155+
STOP RUN.
156+
])
157+
AT_CHECK([${COMPILE} prog.cob])
158+
AT_CHECK([java prog], [0], [Hello, ])
159+
AT_CLEANUP
160+
145161
AT_SETUP([Nihongo Filename])
146162

147163
AT_DATA([prog.cob], [

0 commit comments

Comments
 (0)