[PATCH] Teach fsck and prune that tmp_obj_ file names may not be 14 bytes long

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] Teach fsck and prune that tmp_obj_ file names may not be 14 bytes long

Brandon Casey
As Shawn pointed out, not all temporary file creation routines can
ensure that the generated temporary file is of a certain length.
e.g. Java's createTempFile(prefix, suffix). So just depend on the
prefix 'tmp_obj_' for detection.

Update prune, and fix the "fix" introduced by a08c53a1 :)

Signed-off-by: Brandon "appendixless" Casey <[hidden email]>
---
 builtin-fsck.c  |    2 +-
 builtin-prune.c |    9 ++++-----
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/builtin-fsck.c b/builtin-fsck.c
index 6eb7da8..d3f3de9 100644
--- a/builtin-fsck.c
+++ b/builtin-fsck.c
@@ -385,7 +385,7 @@ static void fsck_dir(int i, char *path)
  add_sha1_list(sha1, DIRENT_SORT_HINT(de));
  continue;
  }
- if (prefixcmp(de->d_name, "tmp_obj_"))
+ if (!prefixcmp(de->d_name, "tmp_obj_"))
  continue;
  fprintf(stderr, "bad sha1 file: %s/%s\n", path, de->d_name);
  }
diff --git a/builtin-prune.c b/builtin-prune.c
index 947de8c..c767a0a 100644
--- a/builtin-prune.c
+++ b/builtin-prune.c
@@ -69,11 +69,6 @@ static int prune_dir(int i, char *path)
  if (de->d_name[0] != '.')
  break;
  continue;
- case 14:
- if (prefixcmp(de->d_name, "tmp_obj_"))
- break;
- prune_tmp_object(path, de->d_name);
- continue;
  case 38:
  sprintf(name, "%02x", i);
  memcpy(name+2, de->d_name, len+1);
@@ -90,6 +85,10 @@ static int prune_dir(int i, char *path)
  prune_object(path, de->d_name, sha1);
  continue;
  }
+ if (!prefixcmp(de->d_name, "tmp_obj_")) {
+ prune_tmp_object(path, de->d_name);
+ continue;
+ }
  fprintf(stderr, "bad sha1 file: %s/%s\n", path, de->d_name);
  }
  if (!show_only)
--
1.5.6.2

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] Teach fsck and prune that tmp_obj_ file names may not be 14 bytes long

Shawn Pearce
Brandon Casey <[hidden email]> wrote:
> As Shawn pointed out, not all temporary file creation routines can
> ensure that the generated temporary file is of a certain length.
> e.g. Java's createTempFile(prefix, suffix). So just depend on the
> prefix 'tmp_obj_' for detection.
>
> Update prune, and fix the "fix" introduced by a08c53a1 :)

Arrrrgh!  :-)

Thanks for cleaning up my mess.
 

> Signed-off-by: Brandon "appendixless" Casey <[hidden email]>
> ---
>  builtin-fsck.c  |    2 +-
>  builtin-prune.c |    9 ++++-----
>  2 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/builtin-fsck.c b/builtin-fsck.c
> index 6eb7da8..d3f3de9 100644
> --- a/builtin-fsck.c
> +++ b/builtin-fsck.c
> @@ -385,7 +385,7 @@ static void fsck_dir(int i, char *path)
>   add_sha1_list(sha1, DIRENT_SORT_HINT(de));
>   continue;
>   }
> - if (prefixcmp(de->d_name, "tmp_obj_"))
> + if (!prefixcmp(de->d_name, "tmp_obj_"))
>   continue;
>   fprintf(stderr, "bad sha1 file: %s/%s\n", path, de->d_name);
>   }
> diff --git a/builtin-prune.c b/builtin-prune.c
> index 947de8c..c767a0a 100644
> --- a/builtin-prune.c
> +++ b/builtin-prune.c
> @@ -69,11 +69,6 @@ static int prune_dir(int i, char *path)
>   if (de->d_name[0] != '.')
>   break;
>   continue;
> - case 14:
> - if (prefixcmp(de->d_name, "tmp_obj_"))
> - break;
> - prune_tmp_object(path, de->d_name);
> - continue;
>   case 38:
>   sprintf(name, "%02x", i);
>   memcpy(name+2, de->d_name, len+1);
> @@ -90,6 +85,10 @@ static int prune_dir(int i, char *path)
>   prune_object(path, de->d_name, sha1);
>   continue;
>   }
> + if (!prefixcmp(de->d_name, "tmp_obj_")) {
> + prune_tmp_object(path, de->d_name);
> + continue;
> + }
>   fprintf(stderr, "bad sha1 file: %s/%s\n", path, de->d_name);
>   }
>   if (!show_only)
> --
> 1.5.6.2
>

--
Shawn.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [hidden email]
More majordomo info at  http://vger.kernel.org/majordomo-info.html