Skip to content

Commit

Permalink
Fixed bad offset
Browse files Browse the repository at this point in the history
  • Loading branch information
ditesh committed Dec 16, 2011
1 parent 247d4ef commit 37945eb
Show file tree
Hide file tree
Showing 10 changed files with 68 additions and 826 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,2 +1,3 @@
.*.sw?
.lock-wscript
node_modules/
43 changes: 39 additions & 4 deletions config.json
@@ -1,6 +1,41 @@
{
"type": "mbox",
"port": 1111,
"log": "/tmp/pop3",
"spool": "/var/spool/mail"

"server": {

"port": 1111,
"timeout": 30,
"hostname": "localhost"

},

"auth": {

"type": "pam",
"pam-service-name": "system-auth"

},

"mailbox": {

"type": "mbox",
"tmppath": "/tmp",
"path": "tests/mboxes/$USER"

},

"logging": {

"enable": ["default", "debug", "error", "warn", "info", "syslog", "stdout", "stderr"],
"default": ["stdout", "/tmp/pop3.log"],
"info": ["stdout", "/tmp/pop3-info.log"],
"debug": ["stdout", "/tmp/pop3-debug.log"],
"warn": ["stdout", "/tmp/pop3-warn.log"],
"error": ["stderr", "/tmp/pop3-error.log"],

"syslog": {
"tag": null,
"facility": "daemon",
"hostname": "localhost"
}
}
}
30 changes: 19 additions & 11 deletions lib/mbox.js
Expand Up @@ -183,6 +183,8 @@ module.exports = function(fd, filename) {

} else {

// TODO - this breaks currently

// We have to use O(n) auxilliary storage because it feels slightly
// saner to aim to run out of disk space vs running out of memory
unixlib.mkstemp(tmpPath + "/mboxXXXXXX", function(err, tmpfd, tmpfilename) {
Expand Down Expand Up @@ -240,11 +242,16 @@ module.exports = function(fd, filename) {

fs.read(fd, buffer, 0, bufsize, position, function(err, bytesRead, buffer) {

var previousbuflen = 0;

if (err) cb(err);
else {

// This combines previous buffer with the newly read buffer
if (previousbuf !== null) {

if (position > 0) previousbuflen = previousbuf.length;

var newbuffer = new Buffer(previousbuf.length + buffer.length)

// Fast memcpy()'s for the win
Expand All @@ -260,22 +267,26 @@ module.exports = function(fd, filename) {
minlen = (bytesRead === buffer.length) ? buffer.length : bytesRead;
while (i < minlen) {

// Match for newline, ASCII code 10
// Match for newline (\n), ASCII code 10
if (buffer[i] === 10) {

// \nFrom is split between the buffers
if (i + 5 > buffer.length-1) {
// We're at the end of the buffer
if (i === buffer.length-1) break;

// \nFrom may be split between the buffers
else if (i+5 > buffer.length-1) {

previousbuf = new Buffer(buffer.slice(i));
previousbuf = new Buffer(buffer.length-i-1);
buffer.copy(previousbuf, 0, i+1);
break;

// \nFrom is within buffer
} else if (buffer.slice(i+1, i+6).toString() === "From ") {

messages.offsets.push(position + (i+1));
messages.offsets.push(position + (i+1)-previousbuflen);

}
}
}

i++;

Expand Down Expand Up @@ -310,11 +321,8 @@ module.exports = function(fd, filename) {
omessages.size = messages.size;
omessages.count = messages.count;

for (var i in messages.sizes)
omessages.sizes.push(messages.sizes[i]);

for (var i in messages.offsets)
omessages.offsets.push(messages.offsets[i]);
for (var i in messages.sizes) omessages.sizes.push(messages.sizes[i]);
for (var i in messages.offsets) omessages.offsets.push(messages.offsets[i]);

cb(null);

Expand Down

0 comments on commit 37945eb

Please sign in to comment.