Skip to content

Commit ba19a09

Browse files
committed
Bug fixes. v0.0.1
1 parent eac8ac3 commit ba19a09

File tree

4 files changed

+34
-16
lines changed

4 files changed

+34
-16
lines changed

lib/id3/common.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ exports.getInt24 = function getInt24 (b, offset, big_endian) {
2020
byte3 = b[offset + 2];
2121

2222
var int = big_endian ?
23-
(((byte1 << 8) + byte2) << 8) + byte3:
23+
(((byte1 << 8) + byte2) << 8) + byte3 :
2424
(((byte3 << 8) + byte2) << 8) + byte1;
2525
if (int < 0) int += 16777216;
2626
return int;
@@ -64,7 +64,7 @@ var readUTF16String = function readUTF16String (bytes) {
6464
var ix = 0,
6565
offset1 = 1,
6666
offset2 = 0,
67-
maxBytes = Math.min(maxBytes || bytes.length, bytes.length);
67+
maxBytes = bytes.length;
6868

6969
if (bytes[0] === 0xFE && bytes[1] === 0xFF) {
7070
bigEndian = true;
@@ -76,7 +76,7 @@ var readUTF16String = function readUTF16String (bytes) {
7676
ix = 2;
7777
}
7878

79-
var arr = [];
79+
var str = '';
8080
for (var j = 0; ix < maxBytes; j++) {
8181
var byte1 = bytes[ix + offset1],
8282
byte2 = bytes[ix + offset2],
@@ -86,14 +86,14 @@ var readUTF16String = function readUTF16String (bytes) {
8686
if (word1 === 0x0000) {
8787
break;
8888
} else if (byte1 < 0xD8 || byte1 >= 0xE0) {
89-
arr[j] = String.fromCharCode(word1);
89+
str += String.fromCharCode(word1);
9090
} else {
9191
var byte3 = bytes[ix+offset1],
9292
byte4 = bytes[ix+offset2],
9393
word2 = (byte3 << 8) + byte4;
9494
ix += 2;
95-
arr[j] = String.fromCharCode(word1, word2);
95+
str += String.fromCharCode(word1, word2);
9696
}
9797
}
98-
return arr.join('');
98+
return str;
9999
};

lib/id3/id3v2.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,13 @@ var readFrames = function readFrames (b, id3, offset, end) {
3737
var frames = {},
3838
frame_data_size,
3939
major = id3.major,
40-
readFrameFunc,
4140
flags,
4241
frame,
4342
frame_header_size,
4443
frame_offset,
4544
parsed_data;
4645

4746
while (offset < end) {
48-
readFrameFunc = null;
4947
flags = null;
5048
frame_offset = offset;
5149
frame = {
@@ -99,10 +97,15 @@ var readFrames = function readFrames (b, id3, offset, end) {
9997
}
10098

10199
// Parse data
102-
frame.data = parser.readData(b, frame.id, frame_offset, frame.size, flags, major);
100+
try {
101+
frame.data = parser.readData(b, frame.id, frame_offset, frame.size, flags, major);
102+
} catch (error) {
103+
// Couldn't parse frame :/
104+
continue;
105+
}
103106
frame.description = FRAMES[frame.id] || 'Unknown';
104107

105-
if (Object.hasOwnProperty(frames, frame.id)) {
108+
if (frames.hasOwnProperty(frame.id)) {
106109
if (frames[frame.id].id) {
107110
frames[frame.id] = [frames[frame.id]];
108111
}

lib/id3/id3v2_frames.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,12 @@ exports.readData = function readData (b, type, offset, length, flags, major) {
4040
offset += 1 + pic.description.length;
4141
pic.description = pic.description.text;
4242

43-
pic.data = b.slice(offset, start + length);
43+
var data;
44+
Object.defineProperty(pic, 'data', {
45+
get: function () {
46+
return data || (data = b.slice(offset, start + length));
47+
}
48+
});
4449
return pic;
4550

4651
case 'COM':

lib/id3/index.js

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,19 @@ ID3File.prototype.getID3Version = function getID3Version () {
2121
};
2222

2323
ID3File.prototype.parse = function parse () {
24-
this.tags = this.getTags();
25-
this;
24+
try {
25+
this.tags = this.getTags();
26+
} catch (error) {
27+
try {
28+
this.tags = this.getTags();
29+
} catch (error) {
30+
return false;
31+
}
32+
}
33+
return true;
2634
};
2735

28-
ID3File.prototype.get = function get (name, def) {
36+
ID3File.prototype.get = function get (name, arr_first) {
2937
if (!this.tags) return null;
3038

3139
if (this.version === 'id3v1' ||
@@ -42,11 +50,13 @@ ID3File.prototype.get = function get (name, def) {
4250
if (name instanceof Array) {
4351
for (length = name.length; i < length; i++) {
4452
if (this.tags.hasOwnProperty(name[i])) {
45-
return this.tags[name[i]].data;
53+
var data = this.tags[name[i]].data;
54+
return arr_first && data instanceof Array ? data[0] : data;
4655
}
4756
}
4857
} else if (this.tags.hasOwnProperty(name)) {
49-
return this.tags[name].data;
58+
var data = this.tags[name].data;
59+
return arr_first && data instanceof Array ? data[0] : data;
5060
}
5161
}
5262

0 commit comments

Comments
 (0)