[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 (&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 < 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 
>
> 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 < 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@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 (&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)));
+
+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



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

2012-12-26 Thread david
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 (&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)));
+
+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@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