Skip to content

Commit ec23a7d

Browse files
Check UTF-8 NATIONAL and NATIONAL EDITED size (#770)
* tree.c: enable I18N_UTF8 macro in checking NATIONAL and NATIONAL EDITED size * cobol_utf8/limits.at: SJIS -> UTF8
1 parent 692b726 commit ec23a7d

2 files changed

Lines changed: 23 additions & 24 deletions

File tree

cobj/tree.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,15 +1565,14 @@ cb_tree cb_build_picture(const char *str) {
15651565
break;
15661566
case PIC_NATIONAL:
15671567
pic->category = CB_CATEGORY_NATIONAL;
1568-
// #ifdef I18N_UTF8
1569-
// /* I18N_UTF8: NATIONAL allocates 3bytes/char for BMP. */
1570-
// CHECK_CHARACTER_LENGTH(cb_max_utf8_character_data_size,
1571-
// "National field cannot be larger than %d
1572-
// digits");
1573-
// #else /*!I18N_UTF8*/
1568+
#ifdef I18N_UTF8
1569+
/* I18N_UTF8: NATIONAL allocates 3bytes/char for BMP. */
1570+
CHECK_CHARACTER_LENGTH(cb_max_utf8_character_data_size,
1571+
"National field cannot be larger than %d digits");
1572+
#else /*!I18N_UTF8*/
15741573
CHECK_CHARACTER_LENGTH(cb_max_sjis_character_data_size,
15751574
"National field cannot be larger than %d digits");
1576-
// #endif /*I18N_UTF8*/
1575+
#endif /*I18N_UTF8*/
15771576
break;
15781577
case PIC_NUMERIC_EDITED:
15791578
pic->str = cobc_malloc(idx + 1);
@@ -1599,16 +1598,16 @@ cb_tree cb_build_picture(const char *str) {
15991598
memcpy(pic->str, buff, idx);
16001599
pic->category = CB_CATEGORY_NATIONAL_EDITED;
16011600
pic->lenstr = idx;
1602-
// #ifdef I18N_UTF8
1603-
// /* I18N_UTF8: NATIONAL allocates 3bytes/char for BMP. */
1604-
// CHECK_CHARACTER_LENGTH(
1605-
// cb_max_utf8_character_data_size,
1606-
// "NationalEdit field cannot be larger than %d digits");
1607-
// #else /*!I18N_UTF8*/
1601+
#ifdef I18N_UTF8
1602+
/* I18N_UTF8: NATIONAL allocates 3bytes/char for BMP. */
1603+
CHECK_CHARACTER_LENGTH(
1604+
cb_max_utf8_character_data_size,
1605+
"NationalEdit field cannot be larger than %d digits");
1606+
#else /*!I18N_UTF8*/
16081607
CHECK_CHARACTER_LENGTH(
16091608
cb_max_sjis_character_data_size,
16101609
"NationalEdit field cannot be larger than %d digits");
1611-
// #endif /*I18N_UTF8*/
1610+
#endif /*I18N_UTF8*/
16121611
break;
16131612
default:
16141613
goto error;

tests/cobol_utf8.src/limits.at

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -215,15 +215,15 @@ AT_CHECK([${COMPILE_LIMIT_TEST} prog.cob], [1], [],
215215

216216
AT_CLEANUP
217217

218-
AT_SETUP([Field length limit PIC N/VALID (SJIS)])
218+
AT_SETUP([Field length limit PIC N/VALID (UTF-8)])
219219
export LC_ALL=''
220220

221221
AT_DATA([prog.cob], [
222222
IDENTIFICATION DIVISION.
223223
PROGRAM-ID. prog.
224224
DATA DIVISION.
225225
WORKING-STORAGE SECTION.
226-
01 VALID-N PIC N(8388608).
226+
01 VALID-N PIC N(5592405).
227227
PROCEDURE DIVISION.
228228
STOP RUN.
229229
])
@@ -232,34 +232,34 @@ AT_CHECK([${COMPILE_LIMIT_TEST} prog.cob], [0])
232232

233233
AT_CLEANUP
234234

235-
AT_SETUP([Field length limit PIC N/TOO LONG (SJIS)])
235+
AT_SETUP([Field length limit PIC N/TOO LONG (UTF-8)])
236236
export LC_ALL=''
237237

238238
AT_DATA([prog.cob], [
239239
IDENTIFICATION DIVISION.
240240
PROGRAM-ID. prog.
241241
DATA DIVISION.
242242
WORKING-STORAGE SECTION.
243-
01 INVALID-N PIC N(8388609).
243+
01 INVALID-N PIC N(5592406).
244244
PROCEDURE DIVISION.
245245
STOP RUN.
246246
])
247247

248248
AT_CHECK([${COMPILE_LIMIT_TEST} prog.cob], [1], [],
249-
[prog.cob:6: Error: National field cannot be larger than 8388608 digits
249+
[prog.cob:6: Error: National field cannot be larger than 5592405 digits
250250
])
251251

252252
AT_CLEANUP
253253

254-
AT_SETUP([Field length limit PIC BN/VALID (SJIS)])
254+
AT_SETUP([Field length limit PIC BN/VALID (UTF-8)])
255255
export LC_ALL=''
256256

257257
AT_DATA([prog.cob], [
258258
IDENTIFICATION DIVISION.
259259
PROGRAM-ID. prog.
260260
DATA DIVISION.
261261
WORKING-STORAGE SECTION.
262-
01 VALID-BN PIC BN(8388607).
262+
01 VALID-BN PIC BN(5592404).
263263
PROCEDURE DIVISION.
264264
STOP RUN.
265265
])
@@ -268,21 +268,21 @@ AT_CHECK([${COMPILE_LIMIT_TEST} prog.cob], [0])
268268

269269
AT_CLEANUP
270270

271-
AT_SETUP([Field length limit PIC BN/TOO LONG (SJIS)])
271+
AT_SETUP([Field length limit PIC BN/TOO LONG (UTF-8)])
272272
export LC_ALL=''
273273

274274
AT_DATA([prog.cob], [
275275
IDENTIFICATION DIVISION.
276276
PROGRAM-ID. prog.
277277
DATA DIVISION.
278278
WORKING-STORAGE SECTION.
279-
01 INVALID-BN PIC BN(8388608).
279+
01 INVALID-BN PIC BN(5592405).
280280
PROCEDURE DIVISION.
281281
STOP RUN.
282282
])
283283

284284
AT_CHECK([${COMPILE_LIMIT_TEST} prog.cob], [1], [],
285-
[prog.cob:6: Error: NationalEdit field cannot be larger than 8388608 digits
285+
[prog.cob:6: Error: NationalEdit field cannot be larger than 5592405 digits
286286
])
287287

288288
AT_CLEANUP

0 commit comments

Comments
 (0)