Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Thu, 10 Feb 2011 22:45:55 +0000 (14:45 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 10 Feb 2011 22:45:55 +0000 (14:45 -0800)
* maint:
compat: helper for detecting unsigned overflow

1  2 
wrapper.c
diff --combined wrapper.c
index 55b074ec46b0a222b03f8bea42f4d5cdd9811293,79635f2e1628a1ac25d62ca502c9ee4d0a2b61d6..4c147d6c48c000bab636fad3edc2fe7da6670948
+++ b/wrapper.c
@@@ -53,7 -53,7 +53,7 @@@ void *xmalloc(size_t size
  void *xmallocz(size_t size)
  {
        void *ret;
-       if (size + 1 < size)
+       if (unsigned_add_overflows(size, 1))
                die("Data too large to fit into virtual memory space.");
        ret = xmalloc(size + 1);
        ((char*)ret)[size] = 0;
@@@ -198,22 -198,10 +198,22 @@@ FILE *xfdopen(int fd, const char *mode
  int xmkstemp(char *template)
  {
        int fd;
 +      char origtemplate[PATH_MAX];
 +      strlcpy(origtemplate, template, sizeof(origtemplate));
  
        fd = mkstemp(template);
 -      if (fd < 0)
 -              die_errno("Unable to create temporary file");
 +      if (fd < 0) {
 +              int saved_errno = errno;
 +              const char *nonrelative_template;
 +
 +              if (!template[0])
 +                      template = origtemplate;
 +
 +              nonrelative_template = make_nonrelative_path(template);
 +              errno = saved_errno;
 +              die_errno("Unable to create temporary file '%s'",
 +                      nonrelative_template);
 +      }
        return fd;
  }
  
@@@ -333,22 -321,10 +333,22 @@@ int gitmkstemps(char *pattern, int suff
  int xmkstemp_mode(char *template, int mode)
  {
        int fd;
 +      char origtemplate[PATH_MAX];
 +      strlcpy(origtemplate, template, sizeof(origtemplate));
  
        fd = git_mkstemp_mode(template, mode);
 -      if (fd < 0)
 -              die_errno("Unable to create temporary file");
 +      if (fd < 0) {
 +              int saved_errno = errno;
 +              const char *nonrelative_template;
 +
 +              if (!template[0])
 +                      template = origtemplate;
 +
 +              nonrelative_template = make_nonrelative_path(template);
 +              errno = saved_errno;
 +              die_errno("Unable to create temporary file '%s'",
 +                      nonrelative_template);
 +      }
        return fd;
  }