[PATCH 2/2] notmuch-restore: handle empty input file, leading blank lines and comments.

2013-01-06 Thread Tomi Ollila
On Wed, Dec 26 2012, david at tethera.net wrote:

> From: David Bremner 
>
> This patch corrects several undesirable behaviours:
>
> 1) Empty files were not detected, leading to buffer read overrun.
>
> 2) An initial blank line cause restore to silently abort
>
> 3) Initial comment line caused format detection to fail
> ---
>  notmuch-restore.c |   17 -
>  test/dump-restore |3 ---
>  2 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/notmuch-restore.c b/notmuch-restore.c
> index 9ed9b51..c93f1ac 100644
> --- a/notmuch-restore.c
> +++ b/notmuch-restore.c
> @@ -180,11 +180,6 @@ notmuch_restore_command (unused (void *ctx), int argc, 
> char *argv[])
>argv[opt_index]);
>   return 1;
>  }
> -char *p;
> -
> -line_len = getline (, _size, input);
> -if (line_len == 0)
> - return 0;
>  
>  tag_ops = tag_op_list_create (ctx);
>  if (tag_ops == NULL) {
> @@ -192,6 +187,18 @@ notmuch_restore_command (unused (void *ctx), int argc, 
> char *argv[])
>   return 1;
>  }
>  
> +do {
> + line_len = getline (, _size, input);
> +
> + /* empty input file not considered an error */
> + if (line_len < 0)
> + return 0;
> +
> +} while ((line_len == 0) ||
> +  (line[0] == '#') ||
> +  (strspn (line, " \t\n") == strlen (line)));

The strspn -- strlen doesn't take embedded \0:s in input line
into consideration (and strlen() scans the full line again),

 (strspn (line, " \t\n") == line_len));

might better

(if not, then  line[strspn(line, " \t\n")] == '\0'  would drop length scan)

Otherwise LGTM.

Tomi

> +
> +char *p;
>  for (p = line; (input_format == DUMP_FORMAT_AUTO) && *p; p++) {
>   if (*p == '(')
>   input_format = DUMP_FORMAT_SUP;
> diff --git a/test/dump-restore b/test/dump-restore
> index c2ddb92..ae30cd1 100755
> --- a/test/dump-restore
> +++ b/test/dump-restore
> @@ -146,13 +146,11 @@ cat < comments-and-blanks
>  EOF
>  
>  test_begin_subtest 'restoring empty file is not an error'
> -test_subtest_known_broken
>  notmuch restore < /dev/null 2>OUTPUT.$test_count
>  cp /dev/null EXPECTED
>  test_expect_equal_file EXPECTED OUTPUT.$test_count
>  
>  test_begin_subtest 'file of comments and blank lines is not an error'
> -test_subtest_known_broken
>  notmuch restore --input=comments-and-blanks
>  ret_val=$?
>  test_expect_equal "$ret_val" "0"
> @@ -172,7 +170,6 @@ echo "yun1vjwegii.fsf at aiko.keithp.com (another_tag)" \
>  >> leading-comments-blanks-sup
>  
>  test_begin_subtest 'detect format=sup with leading comments and blanks'
> -test_subtest_known_broken
>  notmuch restore --input=leading-comments-blanks-sup
>  notmuch search --output=tags id:yun1vjwegii.fsf at aiko.keithp.com > 
> OUTPUT.$test_count
>  echo "another_tag" > EXPECTED
> -- 
> 1.7.10.4
>
> ___
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


Re: [PATCH 2/2] notmuch-restore: handle empty input file, leading blank lines and comments.

2013-01-05 Thread Tomi Ollila
On Wed, Dec 26 2012, da...@tethera.net wrote:

 From: David Bremner brem...@debian.org

 This patch corrects several undesirable behaviours:

 1) Empty files were not detected, leading to buffer read overrun.

 2) An initial blank line cause restore to silently abort

 3) Initial comment line caused format detection to fail
 ---
  notmuch-restore.c |   17 -
  test/dump-restore |3 ---
  2 files changed, 12 insertions(+), 8 deletions(-)

 diff --git a/notmuch-restore.c b/notmuch-restore.c
 index 9ed9b51..c93f1ac 100644
 --- a/notmuch-restore.c
 +++ b/notmuch-restore.c
 @@ -180,11 +180,6 @@ notmuch_restore_command (unused (void *ctx), int argc, 
 char *argv[])
argv[opt_index]);
   return 1;
  }
 -char *p;
 -
 -line_len = getline (line, line_size, input);
 -if (line_len == 0)
 - return 0;
  
  tag_ops = tag_op_list_create (ctx);
  if (tag_ops == NULL) {
 @@ -192,6 +187,18 @@ notmuch_restore_command (unused (void *ctx), int argc, 
 char *argv[])
   return 1;
  }
  
 +do {
 + line_len = getline (line, line_size, input);
 +
 + /* empty input file not considered an error */
 + if (line_len  0)
 + return 0;
 +
 +} while ((line_len == 0) ||
 +  (line[0] == '#') ||
 +  (strspn (line,  \t\n) == strlen (line)));

The strspn -- strlen doesn't take embedded \0:s in input line
into consideration (and strlen() scans the full line again),

 (strspn (line,  \t\n) == line_len));

might better

(if not, then  line[strspn(line,  \t\n)] == '\0'  would drop length scan)

Otherwise LGTM.

Tomi

 +
 +char *p;
  for (p = line; (input_format == DUMP_FORMAT_AUTO)  *p; p++) {
   if (*p == '(')
   input_format = DUMP_FORMAT_SUP;
 diff --git a/test/dump-restore b/test/dump-restore
 index c2ddb92..ae30cd1 100755
 --- a/test/dump-restore
 +++ b/test/dump-restore
 @@ -146,13 +146,11 @@ cat EOF  comments-and-blanks
  EOF
  
  test_begin_subtest 'restoring empty file is not an error'
 -test_subtest_known_broken
  notmuch restore  /dev/null 2OUTPUT.$test_count
  cp /dev/null EXPECTED
  test_expect_equal_file EXPECTED OUTPUT.$test_count
  
  test_begin_subtest 'file of comments and blank lines is not an error'
 -test_subtest_known_broken
  notmuch restore --input=comments-and-blanks
  ret_val=$?
  test_expect_equal $ret_val 0
 @@ -172,7 +170,6 @@ echo yun1vjwegii@aiko.keithp.com (another_tag) \
   leading-comments-blanks-sup
  
  test_begin_subtest 'detect format=sup with leading comments and blanks'
 -test_subtest_known_broken
  notmuch restore --input=leading-comments-blanks-sup
  notmuch search --output=tags id:yun1vjwegii@aiko.keithp.com  
 OUTPUT.$test_count
  echo another_tag  EXPECTED
 -- 
 1.7.10.4

 ___
 notmuch mailing list
 notmuch@notmuchmail.org
 http://notmuchmail.org/mailman/listinfo/notmuch
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


[PATCH 2/2] notmuch-restore: handle empty input file, leading blank lines and comments.

2012-12-26 Thread da...@tethera.net
From: David Bremner 

This patch corrects several undesirable behaviours:

1) Empty files were not detected, leading to buffer read overrun.

2) An initial blank line cause restore to silently abort

3) Initial comment line caused format detection to fail
---
 notmuch-restore.c |   17 -
 test/dump-restore |3 ---
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/notmuch-restore.c b/notmuch-restore.c
index 9ed9b51..c93f1ac 100644
--- a/notmuch-restore.c
+++ b/notmuch-restore.c
@@ -180,11 +180,6 @@ notmuch_restore_command (unused (void *ctx), int argc, 
char *argv[])
 argv[opt_index]);
return 1;
 }
-char *p;
-
-line_len = getline (, _size, input);
-if (line_len == 0)
-   return 0;

 tag_ops = tag_op_list_create (ctx);
 if (tag_ops == NULL) {
@@ -192,6 +187,18 @@ notmuch_restore_command (unused (void *ctx), int argc, 
char *argv[])
return 1;
 }

+do {
+   line_len = getline (, _size, input);
+
+   /* empty input file not considered an error */
+   if (line_len < 0)
+   return 0;
+
+} while ((line_len == 0) ||
+(line[0] == '#') ||
+(strspn (line, " \t\n") == strlen (line)));
+
+char *p;
 for (p = line; (input_format == DUMP_FORMAT_AUTO) && *p; p++) {
if (*p == '(')
input_format = DUMP_FORMAT_SUP;
diff --git a/test/dump-restore b/test/dump-restore
index c2ddb92..ae30cd1 100755
--- a/test/dump-restore
+++ b/test/dump-restore
@@ -146,13 +146,11 @@ cat < comments-and-blanks
 EOF

 test_begin_subtest 'restoring empty file is not an error'
-test_subtest_known_broken
 notmuch restore < /dev/null 2>OUTPUT.$test_count
 cp /dev/null EXPECTED
 test_expect_equal_file EXPECTED OUTPUT.$test_count

 test_begin_subtest 'file of comments and blank lines is not an error'
-test_subtest_known_broken
 notmuch restore --input=comments-and-blanks
 ret_val=$?
 test_expect_equal "$ret_val" "0"
@@ -172,7 +170,6 @@ echo "yun1vjwegii.fsf at aiko.keithp.com (another_tag)" \
 >> leading-comments-blanks-sup

 test_begin_subtest 'detect format=sup with leading comments and blanks'
-test_subtest_known_broken
 notmuch restore --input=leading-comments-blanks-sup
 notmuch search --output=tags id:yun1vjwegii.fsf at aiko.keithp.com > 
OUTPUT.$test_count
 echo "another_tag" > EXPECTED
-- 
1.7.10.4