1 Return-Path: <bremner@tethera.net>
\r
2 X-Original-To: notmuch@notmuchmail.org
\r
3 Delivered-To: notmuch@notmuchmail.org
\r
4 Received: from localhost (localhost [127.0.0.1])
\r
5 by olra.theworths.org (Postfix) with ESMTP id 95160431FAF
\r
6 for <notmuch@notmuchmail.org>; Sun, 6 Jan 2013 06:05:23 -0800 (PST)
\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org
\r
11 X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none]
\r
13 Received: from olra.theworths.org ([127.0.0.1])
\r
14 by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)
\r
15 with ESMTP id xUF+PCnxewCZ for <notmuch@notmuchmail.org>;
\r
16 Sun, 6 Jan 2013 06:05:23 -0800 (PST)
\r
17 Received: from tesseract.cs.unb.ca (tesseract.cs.unb.ca [131.202.240.238])
\r
18 (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
\r
19 (No client certificate requested)
\r
20 by olra.theworths.org (Postfix) with ESMTPS id EDC70431FAE
\r
21 for <notmuch@notmuchmail.org>; Sun, 6 Jan 2013 06:05:22 -0800 (PST)
\r
22 Received: from fctnnbsc30w-156034082078.dhcp-dynamic.fibreop.nb.bellaliant.net
\r
23 ([156.34.82.78] helo=zancas.localnet)
\r
24 by tesseract.cs.unb.ca with esmtpsa
\r
25 (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80)
\r
26 (envelope-from <bremner@tethera.net>)
\r
27 id 1Trqql-0005X8-4a; Sun, 06 Jan 2013 10:05:19 -0400
\r
28 Received: from bremner by zancas.localnet with local (Exim 4.80)
\r
29 (envelope-from <bremner@tethera.net>)
\r
30 id 1Trqqf-00088k-Gt; Sun, 06 Jan 2013 10:05:13 -0400
\r
31 From: david@tethera.net
\r
32 To: notmuch@notmuchmail.org
\r
33 Subject: [Patch v2] notmuch-restore: handle empty input file,
\r
34 leading blank lines and comments.
\r
35 Date: Sun, 6 Jan 2013 10:04:56 -0400
\r
36 Message-Id: <1357481096-31254-1-git-send-email-david@tethera.net>
\r
37 X-Mailer: git-send-email 1.7.10.4
\r
38 In-Reply-To: <m2wqvri8k3.fsf@guru.guru-group.fi>
\r
39 References: <m2wqvri8k3.fsf@guru.guru-group.fi>
\r
41 Cc: David Bremner <bremner@debian.org>
\r
42 X-BeenThere: notmuch@notmuchmail.org
\r
43 X-Mailman-Version: 2.1.13
\r
45 List-Id: "Use and development of the notmuch mail system."
\r
46 <notmuch.notmuchmail.org>
\r
47 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,
\r
48 <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>
\r
49 List-Archive: <http://notmuchmail.org/pipermail/notmuch>
\r
50 List-Post: <mailto:notmuch@notmuchmail.org>
\r
51 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>
\r
52 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,
\r
53 <mailto:notmuch-request@notmuchmail.org?subject=subscribe>
\r
54 X-List-Received-Date: Sun, 06 Jan 2013 14:05:23 -0000
\r
56 From: David Bremner <bremner@debian.org>
\r
58 This patch corrects several undesirable behaviours:
\r
60 1) Empty files were not detected, leading to buffer read overrun.
\r
62 2) An initial blank line cause restore to silently abort
\r
64 3) Initial comment line caused format detection to fail
\r
66 notmuch-restore.c | 18 +++++++++++++-----
\r
67 test/dump-restore | 3 ---
\r
68 2 files changed, 13 insertions(+), 8 deletions(-)
\r
70 diff --git a/notmuch-restore.c b/notmuch-restore.c
\r
71 index d43546d..f436989 100644
\r
72 --- a/notmuch-restore.c
\r
73 +++ b/notmuch-restore.c
\r
74 @@ -181,11 +181,6 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
\r
80 - line_len = getline (&line, &line_size, input);
\r
81 - if (line_len == 0)
\r
84 tag_ops = tag_op_list_create (ctx);
\r
85 if (tag_ops == NULL) {
\r
86 @@ -193,6 +188,19 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
\r
91 + line_len = getline (&line, &line_size, input);
\r
93 + /* empty input file not considered an error */
\r
97 + } while ((line_len == 0) ||
\r
98 + (line[0] == '#') ||
\r
99 + /* the cast is safe because we checked about for line_len < 0 */
\r
100 + (strspn (line, " \t\n") == (unsigned)line_len));
\r
103 for (p = line; (input_format == DUMP_FORMAT_AUTO) && *p; p++) {
\r
105 input_format = DUMP_FORMAT_SUP;
\r
106 diff --git a/test/dump-restore b/test/dump-restore
\r
107 index c2ddb92..ae30cd1 100755
\r
108 --- a/test/dump-restore
\r
109 +++ b/test/dump-restore
\r
110 @@ -146,13 +146,11 @@ cat <<EOF > comments-and-blanks
\r
113 test_begin_subtest 'restoring empty file is not an error'
\r
114 -test_subtest_known_broken
\r
115 notmuch restore < /dev/null 2>OUTPUT.$test_count
\r
116 cp /dev/null EXPECTED
\r
117 test_expect_equal_file EXPECTED OUTPUT.$test_count
\r
119 test_begin_subtest 'file of comments and blank lines is not an error'
\r
120 -test_subtest_known_broken
\r
121 notmuch restore --input=comments-and-blanks
\r
123 test_expect_equal "$ret_val" "0"
\r
124 @@ -172,7 +170,6 @@ echo "yun1vjwegii.fsf@aiko.keithp.com (another_tag)" \
\r
125 >> leading-comments-blanks-sup
\r
127 test_begin_subtest 'detect format=sup with leading comments and blanks'
\r
128 -test_subtest_known_broken
\r
129 notmuch restore --input=leading-comments-blanks-sup
\r
130 notmuch search --output=tags id:yun1vjwegii.fsf@aiko.keithp.com > OUTPUT.$test_count
\r
131 echo "another_tag" > EXPECTED
\r