Skip to content

Commit 545811f

Browse files
committedMar 16, 2016
won't extend Node's supported encodings: nodejs/node#2835 is closed
1 parent ba00135 commit 545811f

File tree

1 file changed

+48
-39
lines changed

1 file changed

+48
-39
lines changed
 

‎fidonet-jam.js

+48-39
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
var fs = require('fs');
2+
var crc32 = require('buffer-crc32');
23
var extend = require('extend');
4+
var iconv = require('iconv-lite');
35
var moment = require('moment');
4-
var crc32 = require('buffer-crc32');
5-
6-
require('iconv-lite').extendNodeEncodings();
7-
8-
// work around https://github.com/nodejs/node/issues/2835
9-
var enc = require('iconv-lite').encode;
106

117
function getSubfieldTypeFromLoID(LoID){
128
/* jshint indent: false */
@@ -59,13 +55,11 @@ JAM.prototype.crc32 = function(inString, options){
5955
return upperChar.toLowerCase();
6056
});
6157
}
62-
if( !Buffer.isEncoding(options.encoding) ){
58+
if(!( iconv.encodingExists(options.encoding) )){
6359
options.encoding = 'utf8';
6460
}
6561

66-
// work around https://github.com/nodejs/node/issues/2835
67-
// var inBuf = Buffer(inString, options.encoding);
68-
var inBuf = enc(inString, options.encoding);
62+
var inBuf = iconv.encode(inString, options.encoding);
6963
// 4294967295 is the maximum 32-bit integer
7064
return 4294967295 - crc32.unsigned( inBuf );
7165
};
@@ -415,10 +409,10 @@ JAM.prototype.decodeHeader = function(header, decodeOptions){
415409

416410
var encoding = this.encodingFromHeader(header);
417411
if( encoding === null ) encoding = options.defaultEncoding;
418-
if( options.useDefaultIfUnknown && !Buffer.isEncoding(encoding) ){
412+
if( options.useDefaultIfUnknown && !iconv.encodingExists(encoding) ){
419413
encoding = options.defaultEncoding;
420414
}
421-
if( !Buffer.isEncoding(encoding) ){
415+
if(!( iconv.encodingExists(encoding) )){
422416
throw new Error(this.errors.UNKNOWN_ENCODING);
423417
}
424418

@@ -432,28 +426,36 @@ JAM.prototype.decodeHeader = function(header, decodeOptions){
432426
for( var i = 0; i < header.Subfields.length; i++ ){
433427
switch( header.Subfields[i].LoID ){
434428
case 0: // OADDRESS
435-
decoded.origAddr = header.Subfields[i].Buffer.toString(encoding);
429+
decoded.origAddr = iconv.decode(
430+
header.Subfields[i].Buffer, encoding
431+
);
436432
break;
437433
case 1: // DADDRESS
438-
decoded.toAddr = header.Subfields[i].Buffer.toString(encoding);
434+
decoded.toAddr = iconv.decode(
435+
header.Subfields[i].Buffer, encoding
436+
);
439437
break;
440438
case 2: // SENDERNAME
441-
decoded.from = header.Subfields[i].Buffer.toString(encoding);
439+
decoded.from = iconv.decode(header.Subfields[i].Buffer, encoding);
442440
break;
443441
case 3: // RECEIVERNAME
444-
decoded.to = header.Subfields[i].Buffer.toString(encoding);
442+
decoded.to = iconv.decode(header.Subfields[i].Buffer, encoding);
445443
break;
446444
case 4: // MSGID
447-
decoded.msgid = header.Subfields[i].Buffer.toString(encoding);
445+
decoded.msgid = iconv.decode(
446+
header.Subfields[i].Buffer, encoding
447+
);
448448
break;
449449
case 5: // REPLYID
450-
decoded.replyid = header.Subfields[i].Buffer.toString(encoding);
450+
decoded.replyid = iconv.decode(
451+
header.Subfields[i].Buffer, encoding
452+
);
451453
break;
452454
case 6: // SUBJECT
453-
decoded.subj = header.Subfields[i].Buffer.toString(encoding);
455+
decoded.subj = iconv.decode(header.Subfields[i].Buffer, encoding);
454456
break;
455457
case 7: // PID
456-
decoded.pid = header.Subfields[i].Buffer.toString(encoding);
458+
decoded.pid = iconv.decode(header.Subfields[i].Buffer, encoding);
457459
break;
458460
/*
459461
case 8: return 'TRACE'; //break;
@@ -466,20 +468,24 @@ JAM.prototype.decodeHeader = function(header, decodeOptions){
466468
*/
467469
case 2000: // FTSKLUDGE
468470
decoded.kludges.push(
469-
header.Subfields[i].Buffer.toString(encoding)
471+
iconv.decode(header.Subfields[i].Buffer, encoding)
470472
);
471473
break;
472474
case 2001: // SEENBY2D
473-
decoded.seenby = header.Subfields[i].Buffer.toString(encoding);
475+
decoded.seenby = iconv.decode(
476+
header.Subfields[i].Buffer, encoding
477+
);
474478
break;
475479
case 2002: // PATH2D
476-
decoded.path = header.Subfields[i].Buffer.toString(encoding);
480+
decoded.path = iconv.decode(header.Subfields[i].Buffer, encoding);
477481
break;
478482
/*
479483
case 2003: return 'FLAGS'; //break;
480484
*/
481485
case 2004: // TZUTCINFO
482-
decoded.timezone = header.Subfields[i].Buffer.toString(encoding);
486+
decoded.timezone = iconv.decode(
487+
header.Subfields[i].Buffer, encoding
488+
);
483489
break;
484490
}
485491
}
@@ -492,10 +498,10 @@ JAM.prototype.decodeKludges = function(header, decodeOptions){
492498

493499
var encoding = this.encodingFromHeader(header);
494500
if( encoding === null ) encoding = options.defaultEncoding;
495-
if( options.useDefaultIfUnknown && !Buffer.isEncoding(encoding) ){
501+
if( options.useDefaultIfUnknown && !iconv.encodingExists(encoding) ){
496502
encoding = options.defaultEncoding;
497503
}
498-
if( !Buffer.isEncoding(encoding) ){
504+
if(!( iconv.encodingExists(encoding) )){
499505
throw new Error(this.errors.UNKNOWN_ENCODING);
500506
}
501507

@@ -505,27 +511,27 @@ JAM.prototype.decodeKludges = function(header, decodeOptions){
505511
switch( header.Subfields[i].LoID ){
506512
case 4: // MSGID
507513
kludges.push(
508-
'MSGID: ' + header.Subfields[i].Buffer.toString(encoding)
514+
'MSGID: ' + iconv.decode(header.Subfields[i].Buffer, encoding)
509515
);
510516
break;
511517
case 5: // REPLYID
512518
kludges.push(
513-
'REPLY: ' + header.Subfields[i].Buffer.toString(encoding)
519+
'REPLY: ' + iconv.decode(header.Subfields[i].Buffer, encoding)
514520
);
515521
break;
516522
case 7: // PID
517523
kludges.push(
518-
'PID: ' + header.Subfields[i].Buffer.toString(encoding)
524+
'PID: ' + iconv.decode(header.Subfields[i].Buffer, encoding)
519525
);
520526
break;
521527
case 2000: // FTSKLUDGE
522528
kludges.push(
523-
header.Subfields[i].Buffer.toString(encoding)
529+
iconv.decode(header.Subfields[i].Buffer, encoding)
524530
);
525531
break;
526532
case 2004: // TZUTCINFO
527533
kludges.push(
528-
'TZUTC: ' + header.Subfields[i].Buffer.toString(encoding)
534+
'TZUTC: ' + iconv.decode(header.Subfields[i].Buffer, encoding)
529535
);
530536
break;
531537
}
@@ -544,18 +550,19 @@ JAM.prototype.decodeMessage = function(header, decodeOptions, callback){
544550

545551
var encoding = _JAM.encodingFromHeader(header);
546552
if( encoding === null ) encoding = options.defaultEncoding;
547-
if( options.useDefaultIfUnknown && !Buffer.isEncoding(encoding) ){
553+
if( options.useDefaultIfUnknown && !iconv.encodingExists(encoding) ){
548554
encoding = options.defaultEncoding;
549555
}
550-
if( !Buffer.isEncoding(encoding) ){
556+
if(!( iconv.encodingExists(encoding) )){
551557
return callback(new Error(this.errors.UNKNOWN_ENCODING));
552558
}
553559

554560
_JAM.readJDT(function(err){
555561
if (err) return callback(err);
556562

557-
callback(null, _JAM.JDT.toString(
558-
encoding, header.Offset, header.Offset + header.TxtLen
563+
callback(null, iconv.decode(
564+
_JAM.JDT.slice(header.Offset, header.Offset + header.TxtLen),
565+
encoding
559566
).replace(/\r/g, '\n'));
560567
});
561568
};
@@ -612,11 +619,12 @@ JAM.prototype.numbersForMSGID = function(
612619
var checkEncoding = _JAM.encodingFromHeader(hdr);
613620
if( checkEncoding === null ) checkEncoding = options.defaultEncoding;
614621
if(
615-
options.useDefaultIfUnknown && !Buffer.isEncoding(checkEncoding)
622+
options.useDefaultIfUnknown &&
623+
!iconv.encodingExists(checkEncoding)
616624
){
617625
checkEncoding = options.defaultEncoding;
618626
}
619-
if( !Buffer.isEncoding(checkEncoding) ){
627+
if(!( iconv.encodingExists(checkEncoding) )){
620628
checkEncoding = decodeDefaults.defaultEncoding;
621629
}
622630

@@ -658,11 +666,12 @@ JAM.prototype.headersForMSGID = function(
658666
var checkEncoding = _JAM.encodingFromHeader(hdr);
659667
if( checkEncoding === null ) checkEncoding = options.defaultEncoding;
660668
if(
661-
options.useDefaultIfUnknown && !Buffer.isEncoding(checkEncoding)
669+
options.useDefaultIfUnknown &&
670+
!iconv.encodingExists(checkEncoding)
662671
){
663672
checkEncoding = options.defaultEncoding;
664673
}
665-
if( !Buffer.isEncoding(checkEncoding) ){
674+
if(!( iconv.encodingExists(checkEncoding) )){
666675
checkEncoding = decodeDefaults.defaultEncoding;
667676
}
668677

0 commit comments

Comments
 (0)
Please sign in to comment.