Skip to content

Commit 54719db

Browse files
committed
Merge pull request #7 from auth0/fixUncaught
Fix uncaught exceptions
2 parents ad4ec02 + 41729f8 commit 54719db

File tree

3 files changed

+46
-9
lines changed

3 files changed

+46
-9
lines changed

lib/saml11.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,13 @@ exports.create = function(options, callback) {
4949
}
5050
};
5151

52-
var doc = new Parser().parseFromString(saml11.toString());
52+
var doc;
53+
try {
54+
doc = new Parser().parseFromString(saml11.toString());
55+
} catch(err){
56+
return utils.reportError(err, callback);
57+
}
58+
5359
doc.documentElement.setAttribute('AssertionID', '_' + (options.uid || utils.uid(32)));
5460
if (options.issuer)
5561
doc.documentElement.setAttribute('Issuer', options.issuer);
@@ -156,8 +162,15 @@ function addSubjectConfirmation(options, doc, randomBytes, callback) {
156162
xmlenc.encryptKeyInfo(randomBytes, encryptOptions, function(err, keyinfo) {
157163
if (err) return cb(err);
158164
var subjectConfirmationNodes = doc.documentElement.getElementsByTagNameNS(NAMESPACE, 'SubjectConfirmation');
165+
159166
for (var i=0; i<subjectConfirmationNodes.length; i++) {
160-
var keyinfoDom = new Parser().parseFromString(keyinfo);
167+
var keyinfoDom;
168+
try {
169+
keyinfoDom = new Parser().parseFromString(keyinfo);
170+
} catch(error){
171+
return utils.reportError(error, callback);
172+
}
173+
161174
var method = subjectConfirmationNodes[i].getElementsByTagNameNS(NAMESPACE, 'ConfirmationMethod')[0];
162175
method.textContent = 'urn:oasis:names:tc:SAML:1.0:cm:holder-of-key';
163176
subjectConfirmationNodes[i].appendChild(keyinfoDom.documentElement);
@@ -169,11 +182,16 @@ function addSubjectConfirmation(options, doc, randomBytes, callback) {
169182

170183
function sign(options, sig, doc, callback) {
171184
var token = utils.removeWhitespace(doc.toString());
172-
sig.computeSignature(token, options.xpathToNodeBeforeSignature);
173-
var signed = sig.getSignedXml();
185+
var signed;
186+
try {
187+
sig.computeSignature(token, options.xpathToNodeBeforeSignature);
188+
signed = sig.getSignedXml();
189+
} catch(err){
190+
return utils.reportError(err, callback);
191+
}
174192

175193
if (!callback) return signed;
176-
194+
177195
return callback(null, signed);
178196
}
179197

lib/saml20.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var utils = require('./utils'),
77

88
var fs = require('fs');
99
var path = require('path');
10-
var saml11 = fs.readFileSync(path.join(__dirname, 'saml20.template')).toString();
10+
var saml20 = fs.readFileSync(path.join(__dirname, 'saml20.template')).toString();
1111

1212
var NAMESPACE = 'urn:oasis:names:tc:SAML:2.0:assertion';
1313

@@ -47,7 +47,13 @@ exports.create = function(options, callback) {
4747
}
4848
};
4949

50-
var doc = new Parser().parseFromString(saml11.toString());
50+
var doc;
51+
try {
52+
doc = new Parser().parseFromString(saml20.toString());
53+
} catch(err){
54+
return utils.reportError(err, callback);
55+
}
56+
5157
doc.documentElement.setAttribute('ID', '_' + (options.uid || utils.uid(32)));
5258
if (options.issuer) {
5359
var issuer = doc.documentElement.getElementsByTagName('saml:Issuer');
@@ -130,8 +136,13 @@ exports.create = function(options, callback) {
130136
}
131137

132138
var token = utils.removeWhitespace(doc.toString());
133-
sig.computeSignature(token, options.xpathToNodeBeforeSignature || "//*[local-name(.)='Issuer']");
134-
var signed = sig.getSignedXml();
139+
var signed;
140+
try {
141+
sig.computeSignature(token, options.xpathToNodeBeforeSignature || "//*[local-name(.)='Issuer']");
142+
signed = sig.getSignedXml();
143+
} catch(err){
144+
return utils.reportError(err, callback);
145+
}
135146

136147
if (!options.encryptionCert) {
137148
if (callback)

lib/utils.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ exports.pemToCert = function(pem) {
77
return null;
88
};
99

10+
exports.reportError = function(err, callback){
11+
if (callback){
12+
setImmediate(function(){
13+
callback(err);
14+
});
15+
}
16+
};
17+
1018
/**
1119
* Return a unique identifier with the given `len`.
1220
*

0 commit comments

Comments
 (0)