From 08d1b51cbc3bd9de8c700d92317a1b6963e0e3d3 Mon Sep 17 00:00:00 2001
From: Phil Ross <pross@rubiconsoftware.com>
Date: Thu, 15 Oct 2009 16:19:08 +0100
Subject: [PATCH] The body isn't written for a job already in the binlog (i.e. when releasing).
 Don't read the body if the job was previously read from the binlog.
 for your changes.

---
 binlog.c |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/binlog.c b/binlog.c
index 34bd778..956da0c 100644
--- a/binlog.c
+++ b/binlog.c
@@ -220,14 +220,16 @@ binlog_read_log_file(binlog b, job binlog_jobs)
                     job_free(j);
                     return binlog_warn(b, "EOF while reading job body");
                 }
-                r = read(b->fd, j->body, js.body_size);
-                if (r == -1) return twarn("read()");
-                if (r < js.body_size) {
-                    warnx("dropping incomplete job %llu", j->id);
-                    job_remove(j);
-                    binlog_dref(j->binlog);
-                    job_free(j);
-                    return binlog_warn(b, "EOF while reading job body");
+                if (!j->binlog) {
+                    r = read(b->fd, j->body, js.body_size);
+                    if (r == -1) return twarn("read()");
+                    if (r < js.body_size) {
+                        warnx("dropping incomplete job %llu", j->id);
+                        job_remove(j);
+                        binlog_dref(j->binlog);
+                        job_free(j);
+                        return binlog_warn(b, "EOF while reading job body");
+                    }
                 }
             }
             break;
-- 
1.5.6.5


From b50213434438eef2341790f3051e3e0e407daee5 Mon Sep 17 00:00:00 2001
From: Phil Ross <pross@rubiconsoftware.com>
Date: Thu, 15 Oct 2009 16:20:28 +0100
Subject: [PATCH] Prevent a potential buffer overflow reading the tube name.

---
 binlog.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/binlog.c b/binlog.c
index 956da0c..95ea422 100644
--- a/binlog.c
+++ b/binlog.c
@@ -173,6 +173,10 @@ binlog_read_log_file(binlog b, job binlog_jobs)
     }
 
     while (read(b->fd, &namelen, sizeof(size_t)) == sizeof(size_t)) {
+        if (namelen >= MAX_TUBE_NAME_LEN) {
+            return binlog_warn(b, "namelen %d exceeds maximum of %d", namelen, MAX_TUBE_NAME_LEN - 1);
+        }
+
         if (namelen > 0) {
             r = read(b->fd, tubename, namelen);
             if (r == -1) return twarn("read()");
-- 
1.5.6.5

