Skip to content

Commit c00f861

Browse files
authored
Merge pull request #2403 from codefori/fix/support_unknown_character
Fix bad character handling in extended byte calculation and add tests
2 parents 672d13d + 3a5a5fc commit c00f861

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

src/api/Tools.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ export namespace Tools {
123123
124124
*/
125125

126-
const extendedBytes = strValue.split(``).map(c => Buffer.byteLength(c) < 3 ? 0 : 1).reduce((a: number, b: number) => a + b, 0);
126+
// 65533 = � (not a double byte character!)
127+
const extendedBytes = strValue.split(``).map(c => (Buffer.byteLength(c) < 3 || c.charCodeAt(0) === 65533) ? 0 : 1).reduce((a: number, b: number) => a + b, 0);
127128

128129
slideBytesBy += extendedBytes;
129130
if (extendedBytes > 0) {

src/testing/tools.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,41 @@ export const ToolsSuite: TestSuite = {
324324
assert.strictEqual(rows[0].CHANGED, 1713453741000);
325325
}
326326
},
327+
{
328+
name: `Db2 results with bad character`, test: async () => {
329+
const lines = [
330+
`DB2>`,
331+
` ?>`,
332+
``,
333+
`LIBRARY NAME TYPE ATTRIBUTE TEXT IS_SOURCE SOURCE_LENGTH IASP_NUMBER `,
334+
`---------- ---------- ----- ---------- -------------------------------------------------- ----------- -------------- ------------`,
335+
`LOGOMATE QCLSRC *FILE PF LogoMate� - Sourcen CL 1 112 0`,
336+
`LOGOMATE QCMDSRC *FILE PF LogoMate� - Sourcen CMD 1 112 0`,
337+
`LOGOMATE QMNUSRC *FILE PF LogoMate� - Sourcen MNU 1 112 0`,
338+
`LOGOMATE QPNLSRC *FILE PF LogoMate� - Sourcen PNLGRP 1 112 0`,
339+
`LOGOMATE QRPGLECPY *FILE PF LogoMate� - Sourcen RPGLECPY 1 112 0`,
340+
`LOGOMATE QRPGLEH *FILE PF LogoMate� - Sourcen RPGLEH 1 112 0`,
341+
`LOGOMATE QRPGLESRC *FILE PF LogoMate� - Sourcen RPGLE 1 112 0`,
342+
`LOGOMATE QSQDSRC *FILE PF SQL PROCEDURES 1 160 0`,
343+
`LOGOMATE QSQLSRC *FILE PF LogoMate� - Sourcen SQL 1 112 0`,
344+
`LOGOMATE QSRVSRC *FILE PF LogoMate� - Sourcen SRV 1 112 0`,
345+
``,
346+
` 10 RECORD(S) SELECTED.`,
347+
]
348+
349+
const rows = Tools.db2Parse(lines.join(`\n`));
350+
assert.strictEqual(rows.length, 10);
351+
352+
assert.strictEqual(rows[0].LIBRARY, `LOGOMATE`);
353+
assert.strictEqual(rows[0].NAME, `QCLSRC`);
354+
assert.strictEqual(rows[0].TYPE, `*FILE`);
355+
assert.strictEqual(rows[0].ATTRIBUTE, `PF`);
356+
assert.strictEqual(rows[0].TEXT, `LogoMate� - Sourcen CL`);
357+
assert.strictEqual(rows[0].IS_SOURCE, 1);
358+
assert.strictEqual(rows[0].SOURCE_LENGTH, 112);
359+
assert.strictEqual(rows[0].IASP_NUMBER, 0);
360+
}
361+
},
327362
{
328363
name: "Date attr parsing", test: async () => {
329364
const date1Epoch = Tools.parseAttrDate(`Fri Apr 5 09:00:10 2024`);
@@ -346,6 +381,6 @@ export const ToolsSuite: TestSuite = {
346381
assert.strictEqual(date2.getUTCMinutes(), 47);
347382
assert.strictEqual(date2.getUTCSeconds(), 2);
348383
}
349-
}
384+
},
350385
]
351386
};

0 commit comments

Comments
 (0)