iliaa           Tue Aug 26 12:23:29 2008 UTC

  Removed files:               (Branch: PHP_5_3)
    /php-src/ext/fileinfo/libmagic      file.c file_opts.h getopt_long.c 

  Modified files:              
    /php-src/ext/fileinfo/libmagic      apprentice.c ascmagic.c compress.c 
                                        config.h file.h funcs.c magic.c 
                                        readelf.c softmagic.c 
  Log:
  Upgraded the lib to use PHP memory allocation routines.
  Fixed a crash caused by analysis of DEADJOE files
  A little bit of CS inside libmagic
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/apprentice.c?r1=1.7&r2=1.7.2.1&diff_format=u
Index: php-src/ext/fileinfo/libmagic/apprentice.c
diff -u php-src/ext/fileinfo/libmagic/apprentice.c:1.7 
php-src/ext/fileinfo/libmagic/apprentice.c:1.7.2.1
--- php-src/ext/fileinfo/libmagic/apprentice.c:1.7      Fri Jul 25 08:18:34 2008
+++ php-src/ext/fileinfo/libmagic/apprentice.c  Tue Aug 26 12:23:29 2008
@@ -42,9 +42,6 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <sys/param.h>
-#ifdef QUICK
-#include <sys/mman.h>
-#endif
 #include <sys/types.h>
 #include <dirent.h>
 
@@ -124,42 +121,7 @@
 private const char mime_marker[] = "!:mime";
 private const size_t mime_marker_len = sizeof(mime_marker) - 1;
 
-#ifdef COMPILE_ONLY
-
-int main(int, char *[]);
-
-int
-main(int argc, char *argv[])
-{
-       int ret;
-       struct magic_set *ms;
-       char *progname;
-
-       if ((progname = strrchr(argv[0], '/')) != NULL)
-               progname++;
-       else
-               progname = argv[0];
-
-       if (argc != 2) {
-               (void)fprintf(stderr, "Usage: %s file\n", progname);
-               return 1;
-       }
-
-       if ((ms = magic_open(MAGIC_CHECK)) == NULL) {
-               (void)fprintf(stderr, "%s: %s\n", progname, strerror(errno));
-               return 1;
-       }
-       ret = magic_compile(ms, argv[1]) == -1 ? 1 : 0;
-       if (ret == 1)
-               (void)fprintf(stderr, "%s: %s\n", progname, magic_error(ms));
-       magic_close(ms);
-       return ret;
-}
-#endif /* COMPILE_ONLY */
-
-#ifdef PHP_BUNDLE
 #include "../data_file.c"
-#endif
 
 static const struct type_tbl_s {
        const char name[16];
@@ -269,7 +231,7 @@
                if (rv != 0)
                        return -1;
                rv = apprentice_compile(ms, &magic, &nmagic, fn);
-               free(magic);
+               efree(magic);
                return rv;
        }
 
@@ -289,11 +251,7 @@
                return -1;
        }
 
-       if ((ml = malloc(sizeof(*ml))) == NULL) {
-               file_delmagic(magic, mapped, nmagic);
-               file_oomem(ms, sizeof(*ml));
-               return -1;
-       }
+       ml = emalloc(sizeof(*ml));
 
        ml->magic = magic;
        ml->nmagic = nmagic;
@@ -314,23 +272,18 @@
        if (p == NULL)
                return;
        switch (type) {
-#ifdef PHP_BUNDLE
        case 3:
                /* Do nothing, it's part of the code segment */
                break;
-#endif
-#ifdef QUICK
-       case 2:
-               p--;
-               (void)munmap((void *)p, sizeof(*p) * (entries + 1));
-               break;
-#endif
+
        case 1:
                p--;
                /*FALLTHROUGH*/
+
        case 0:
-               free(p);
+               efree(p);
                break;
+
        default:
                abort();
        }
@@ -349,30 +302,16 @@
        if (fn == NULL)
                fn = getenv("MAGIC");
        if (fn == NULL) {
-#ifdef PHP_BUNDLE
-               if ((mlist = malloc(sizeof(*mlist))) == NULL) {
-                       file_oomem(ms, sizeof(*mlist));
-                       return NULL;
-               }
+               mlist = emalloc(sizeof(*mlist));
                mlist->next = mlist->prev = mlist;
                apprentice_1(ms, fn, action, mlist);
                return mlist;
-#else
-               fn = MAGIC;
-#endif
        }
 
-       if ((mfn = strdup(fn)) == NULL) {
-               file_oomem(ms, strlen(fn));
-               return NULL;
-       }
+       mfn = estrdup(fn);
        fn = mfn;
 
-       if ((mlist = malloc(sizeof(*mlist))) == NULL) {
-               free(mfn);
-               file_oomem(ms, sizeof(*mlist));
-               return NULL;
-       }
+       mlist = emalloc(sizeof(*mlist));
        mlist->next = mlist->prev = mlist;
 
        while (fn) {
@@ -386,13 +325,13 @@
                fn = p;
        }
        if (errs == -1) {
-               free(mfn);
-               free(mlist);
+               efree(mfn);
+               efree(mlist);
                mlist = NULL;
                file_error(ms, 0, "could not find any magic files!");
                return NULL;
        }
-       free(mfn);
+       efree(mfn);
        return mlist;
 }
 
@@ -649,10 +588,7 @@
        ms->flags |= MAGIC_CHECK;       /* Enable checks for parsed files */
 
         maxmagic = MAXMAGIS;
-       if ((marray = calloc(maxmagic, sizeof(*marray))) == NULL) {
-               file_oomem(ms, maxmagic * sizeof(*marray));
-               return -1;
-       }
+       marray = ecalloc(maxmagic, sizeof(*marray));
        marraycount = 0;
 
        /* print silly verbose header for USG compat. */
@@ -735,11 +671,7 @@
        for (i = 0; i < marraycount; i++)
                mentrycount += marray[i].cont_count;
 
-       if ((*magicp = malloc(sizeof(**magicp) * mentrycount)) == NULL) {
-               file_oomem(ms, sizeof(**magicp) * mentrycount);
-               errs++;
-               goto out;
-       }
+       *magicp = emalloc(sizeof(**magicp) * mentrycount);
 
        mentrycount = 0;
        for (i = 0; i < marraycount; i++) {
@@ -749,8 +681,8 @@
        }
 out:
        for (i = 0; i < marraycount; i++)
-               free(marray[i].mp);
-       free(marray);
+               efree(marray[i].mp);
+       efree(marray);
        if (errs) {
                *magicp = NULL;
                *nmagicp = 0;
@@ -823,9 +755,9 @@
                case FILE_DEFAULT:
                        break;
                default:
-                       if (ms->flags & MAGIC_CHECK)
-                           file_magwarn(ms, "cannot happen: m->type=%d\n",
-                                   m->type);
+                       if (ms->flags & MAGIC_CHECK) {
+                           file_magwarn(ms, "cannot happen: m->type=%d\n", 
m->type);
+                       }
                        return ~0U;
                }
        }
@@ -1024,10 +956,7 @@
                if (me->cont_count == me->max_count) {
                        struct magic *nm;
                        size_t cnt = me->max_count + ALLOC_CHUNK;
-                       if ((nm = realloc(me->mp, sizeof(*nm) * cnt)) == NULL) {
-                               file_oomem(ms, sizeof(*nm) * cnt);
-                               return -1;
-                       }
+                       nm = erealloc(me->mp, sizeof(*nm) * cnt);
                        me->mp = m = nm;
                        me->max_count = cnt;
                }
@@ -1039,21 +968,13 @@
                        struct magic_entry *mp;
 
                        maxmagic += ALLOC_INCR;
-                       if ((mp = realloc(*mentryp, sizeof(*mp) * maxmagic)) ==
-                           NULL) {
-                               file_oomem(ms, sizeof(*mp) * maxmagic);
-                               return -1;
-                       }
-                       (void)memset(&mp[*nmentryp], 0, sizeof(*mp) *
-                           ALLOC_INCR);
+                       mp = erealloc(*mentryp, sizeof(*mp) * maxmagic);
+                       (void)memset(&mp[*nmentryp], 0, sizeof(*mp) * 
ALLOC_INCR);
                        *mentryp = mp;
                }
                me = &(*mentryp)[*nmentryp];
                if (me->mp == NULL) {
-                       if ((m = malloc(sizeof(*m) * ALLOC_CHUNK)) == NULL) {
-                               file_oomem(ms, sizeof(*m) * ALLOC_CHUNK);
-                               return -1;
-                       }
+                       m = safe_emalloc(sizeof(*m), ALLOC_CHUNK, 0);
                        me->mp = m;
                        me->max_count = ALLOC_CHUNK;
                } else
@@ -1908,13 +1829,11 @@
        void *mm = NULL;
        int   ret = 0;
 
-#ifdef PHP_BUNDLE
        if (fn == NULL) {
                mm = &php_magic_database;
                ret = 3;
                goto internal_loaded;
        }
-#endif
 
        mkdbname(fn, &dbname, 0);
        if (dbname == NULL)
@@ -1932,29 +1851,18 @@
                goto error1;
        }
 
-#ifdef QUICK
-       if ((mm = mmap(0, (size_t)st.st_size, PROT_READ|PROT_WRITE,
-           MAP_PRIVATE|MAP_FILE, fd, (off_t)0)) == MAP_FAILED) {
-               file_error(ms, errno, "cannot map `%s'", dbname);
-               goto error1;
-       }
-       ret = 2;
-#else
-       if ((mm = malloc((size_t)st.st_size)) == NULL) {
-               file_oomem(ms, (size_t)st.st_size);
-               goto error1;
-       }
+       mm = emalloc((size_t)st.st_size);
        if (read(fd, mm, (size_t)st.st_size) != (size_t)st.st_size) {
                file_badread(ms);
                goto error1;
        }
        ret = 1;
-#endif
+
        (void)close(fd);
        fd = -1;
-#ifdef PHP_BUNDLE
+
 internal_loaded:
-#endif
+
        *magicp = mm;
        ptr = (uint32_t *)(void *)*magicp;
        if (*ptr != MAGICNO) {
@@ -1975,35 +1883,36 @@
                    VERSIONNO, dbname, version);
                goto error1;
        }
-#ifdef PHP_BUNDLE
-       if (fn == NULL)
+
+       if (fn == NULL) {
                *nmagicp = (sizeof(php_magic_database) / sizeof(struct magic));
-       else /* the statement after the #endif is used */
-#endif
-       *nmagicp = (uint32_t)(st.st_size / sizeof(struct magic));
-       if (*nmagicp > 0)
+       } else {
+               *nmagicp = (uint32_t)(st.st_size / sizeof(struct magic));
+       }
+       if (*nmagicp > 0) {
                (*nmagicp)--;
+       }
        (*magicp)++;
-       if (needsbyteswap)
+       if (needsbyteswap) {
                byteswap(*magicp, *nmagicp);
-       free(dbname);
+       }
+
+       if (dbname) {
+               efree(dbname);
+       }
        return ret;
 
 error1:
        if (fd != -1)
                (void)close(fd);
        if (mm) {
-#ifdef QUICK
-               (void)munmap((void *)mm, (size_t)st.st_size);
-#else
-               free(mm);
-#endif
+               efree(mm);
        } else {
                *magicp = NULL;
                *nmagicp = 0;
        }
 error2:
-       free(dbname);
+       efree(dbname);
        return -1;
 }
 
@@ -2051,7 +1960,7 @@
        (void)close(fd);
        rv = 0;
 out:
-       free(dbname);
+       efree(dbname);
        return rv;
 }
 
@@ -2068,9 +1977,9 @@
                        fn = ++p;
        }
 
-       (void)asprintf(buf, "%s%s", fn, ext);
+       (void)spprintf(buf, 0, "%s%s", fn, ext);
        if (*buf && strlen(*buf) > MAXPATHLEN) {
-               free(*buf);
+               efree(*buf);
                *buf = NULL;
        }
 }
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/ascmagic.c?r1=1.1&r2=1.1.2.1&diff_format=u
Index: php-src/ext/fileinfo/libmagic/ascmagic.c
diff -u php-src/ext/fileinfo/libmagic/ascmagic.c:1.1 
php-src/ext/fileinfo/libmagic/ascmagic.c:1.1.2.1
--- php-src/ext/fileinfo/libmagic/ascmagic.c:1.1        Fri Jul 11 14:13:50 2008
+++ php-src/ext/fileinfo/libmagic/ascmagic.c    Tue Aug 26 12:23:29 2008
@@ -101,13 +101,12 @@
         * Undo the NUL-termination kindly provided by process()
         * but leave at least one byte to look at
         */
-       while (nbytes > 1 && buf[nbytes - 1] == '\0')
+       while (nbytes > 1 && buf[nbytes - 1] == '\0') {
                nbytes--;
+       }
 
-       if ((nbuf = calloc(1, (nbytes + 1) * sizeof(nbuf[0]))) == NULL)
-               goto done;
-       if ((ubuf = calloc(1, (nbytes + 1) * sizeof(ubuf[0]))) == NULL)
-               goto done;
+       nbuf = ecalloc(1, (nbytes + 1) * sizeof(nbuf[0]));
+       ubuf = ecalloc(1, (nbytes + 1) * sizeof(ubuf[0]));
 
        /*
         * Then try to determine whether it's any character code we can
@@ -172,10 +171,8 @@
           re-converting improved, or at least realloced after
           re-converting conversion. */
        mlen = ulen * 6;
-       if ((utf8_buf = malloc(mlen)) == NULL) {
-               file_oomem(ms, mlen);
-               goto done;
-       }
+       utf8_buf = emalloc(mlen);
+
        if ((utf8_end = encode_utf8(utf8_buf, mlen, ubuf, ulen)) == NULL)
                goto done;
        if (file_softmagic(ms, utf8_buf, utf8_end - utf8_buf, TEXTTEST) != 0) {
@@ -348,11 +345,11 @@
        rv = 1;
 done:
        if (nbuf)
-               free(nbuf);
+               efree(nbuf);
        if (ubuf)
-               free(ubuf);
+               efree(ubuf);
        if (utf8_buf)
-               free(utf8_buf);
+               efree(utf8_buf);
 
        return rv;
 }
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/compress.c?r1=1.1&r2=1.1.2.1&diff_format=u
Index: php-src/ext/fileinfo/libmagic/compress.c
diff -u php-src/ext/fileinfo/libmagic/compress.c:1.1 
php-src/ext/fileinfo/libmagic/compress.c:1.1.2.1
--- php-src/ext/fileinfo/libmagic/compress.c:1.1        Fri Jul 11 14:13:50 2008
+++ php-src/ext/fileinfo/libmagic/compress.c    Tue Aug 26 12:23:29 2008
@@ -32,6 +32,7 @@
  *     uncompress(method, old, n, newch) - uncompress old into new, 
  *                                         using method, return sizeof new
  */
+#include "config.h"
 #include "file.h"
 #include "magic.h"
 #include <stdio.h>
@@ -133,7 +134,7 @@
        }
 error:
        if (newbuf)
-               free(newbuf);
+               efree(newbuf);
        ms->flags |= MAGIC_COMPRESS;
        return rv;
 }
@@ -330,9 +331,7 @@
 
        if (data_start >= n)
                return 0;
-       if ((*newch = (unsigned char *)malloc(HOWMANY + 1)) == NULL) {
-               return 0;
-       }
+       *newch = (unsigned char *)emalloc(HOWMANY + 1));
        
        /* XXX: const castaway, via strchr */
        z.next_in = (Bytef *)strchr((const char *)old + data_start,
@@ -455,20 +454,14 @@
                        fdin[1] = -1;
                }
 
-               if ((*newch = (unsigned char *) malloc(HOWMANY + 1)) == NULL) {
-#ifdef DEBUG
-                       (void)fprintf(stderr, "Malloc failed (%s)\n",
-                           strerror(errno));
-#endif
-                       n = 0;
-                       goto err;
-               }
+               *newch = (unsigned char *) emalloc(HOWMANY + 1);
+
                if ((r = sread(fdout[0], *newch, HOWMANY, 0)) <= 0) {
 #ifdef DEBUG
                        (void)fprintf(stderr, "Read failed (%s)\n",
                            strerror(errno));
 #endif
-                       free(*newch);
+                       efree(*newch);
                        n = 0;
                        newch[0] = '\0';
                        goto err;
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/config.h?r1=1.3.2.1&r2=1.3.2.2&diff_format=u
Index: php-src/ext/fileinfo/libmagic/config.h
diff -u php-src/ext/fileinfo/libmagic/config.h:1.3.2.1 
php-src/ext/fileinfo/libmagic/config.h:1.3.2.2
--- php-src/ext/fileinfo/libmagic/config.h:1.3.2.1      Thu Jul 31 00:33:02 2008
+++ php-src/ext/fileinfo/libmagic/config.h      Tue Aug 26 12:23:29 2008
@@ -1,10 +1 @@
-#ifdef PHP_WIN32
-# include "config.w32.h"
-#else
-# include <php_config.h>
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "../config.h"
-#endif
-#define PHP_BUNDLE
+#include "php.h"
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/file.h?r1=1.1&r2=1.1.2.1&diff_format=u
Index: php-src/ext/fileinfo/libmagic/file.h
diff -u php-src/ext/fileinfo/libmagic/file.h:1.1 
php-src/ext/fileinfo/libmagic/file.h:1.1.2.1
--- php-src/ext/fileinfo/libmagic/file.h:1.1    Fri Jul 11 14:13:50 2008
+++ php-src/ext/fileinfo/libmagic/file.h        Tue Aug 26 12:23:29 2008
@@ -366,13 +366,6 @@
 #define strtoul(a, b, c)       strtol(a, b, c)
 #endif
 
-#ifndef HAVE_VASPRINTF
-int vasprintf(char **ptr, const char *format_string, va_list vargs);
-#endif
-#ifndef HAVE_ASPRINTF
-int asprintf(char **ptr, const char *format_string, ...);
-#endif
-
 #if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK)
 #define QUICK
 #endif
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/funcs.c?r1=1.3.2.1&r2=1.3.2.2&diff_format=u
Index: php-src/ext/fileinfo/libmagic/funcs.c
diff -u php-src/ext/fileinfo/libmagic/funcs.c:1.3.2.1 
php-src/ext/fileinfo/libmagic/funcs.c:1.3.2.2
--- php-src/ext/fileinfo/libmagic/funcs.c:1.3.2.1       Sun Aug 10 19:48:54 2008
+++ php-src/ext/fileinfo/libmagic/funcs.c       Tue Aug 26 12:23:29 2008
@@ -54,27 +54,23 @@
        va_list ap;
        size_t size;
        int len;
-       char *buf, *newstr;
+       char *buf = NULL, *newstr;
 
        va_start(ap, fmt);
-       len = vasprintf(&buf, fmt, ap);
-       if (len < 0)
-               goto out;
+       len = vspprintf(&buf, 0, fmt, ap);
        va_end(ap);
 
        if (ms->o.buf != NULL) {
-               len = asprintf(&newstr, "%s%s", ms->o.buf, buf);
-               free(buf);
-               if (len < 0)
-                       goto out;
-               free(ms->o.buf);
-               buf = newstr;
+               len = spprintf(&newstr, 0, "%s%s", ms->o.buf, (buf ? buf : ""));
+               if (buf) {
+                       efree(buf);
+               }
+               efree(ms->o.buf);
+               ms->o.buf = newstr;
+       } else {
+               ms->o.buf = buf;
        }
-       ms->o.buf = buf;
        return 0;
-out:
-       file_error(ms, errno, "vasprintf failed");
-       return -1;
 }
 
 /*
@@ -89,7 +85,7 @@
        if (ms->haderr)
                return;
        if (lineno != 0) {
-               free(ms->o.buf);
+               efree(ms->o.buf);
                ms->o.buf = NULL;
                file_printf(ms, "line %u: ", lineno);
        }
@@ -124,12 +120,6 @@
 }
 
 protected void
-file_oomem(struct magic_set *ms, size_t len)
-{
-       file_error(ms, errno, "cannot allocate %zu bytes", len);
-}
-
-protected void
 file_badseek(struct magic_set *ms)
 {
        file_error(ms, errno, "error seeking");
@@ -223,6 +213,9 @@
                file_error(ms, 0, "no magic files loaded");
                return -1;
        }
+       if (ms->o.buf) {
+               efree(ms->o.buf);
+       }
        ms->o.buf = NULL;
        ms->haderr = 0;
        ms->error = -1;
@@ -252,14 +245,10 @@
        /* * 4 is for octal representation, + 1 is for NUL */
        len = strlen(ms->o.buf);
        if (len > (SIZE_MAX - 1) / 4) {
-               file_oomem(ms, len);
                return NULL;
        }
        psize = len * 4 + 1;
-       if ((pbuf = realloc(ms->o.pbuf, psize)) == NULL) {
-               file_oomem(ms, psize);
-               return NULL;
-       }
+       pbuf = erealloc(ms->o.pbuf, psize);
        ms->o.pbuf = pbuf;
 
 #if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH)
@@ -319,12 +308,7 @@
 
        if (level >= ms->c.len) {
                len = (ms->c.len += 20) * sizeof(*ms->c.li);
-               ms->c.li = (ms->c.li == NULL) ? malloc(len) :
-                   realloc(ms->c.li, len);
-               if (ms->c.li == NULL) {
-                       file_oomem(ms, len);
-                       return -1;
-               }
+               ms->c.li = (ms->c.li == NULL) ? emalloc(len) : 
erealloc(ms->c.li, len);
        }
        ms->c.li[level].got_match = 0;
 #ifdef ENABLE_CONDITIONALS
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/magic.c?r1=1.1&r2=1.1.2.1&diff_format=u
Index: php-src/ext/fileinfo/libmagic/magic.c
diff -u php-src/ext/fileinfo/libmagic/magic.c:1.1 
php-src/ext/fileinfo/libmagic/magic.c:1.1.2.1
--- php-src/ext/fileinfo/libmagic/magic.c:1.1   Fri Jul 11 14:13:50 2008
+++ php-src/ext/fileinfo/libmagic/magic.c       Tue Aug 26 12:23:29 2008
@@ -35,9 +35,6 @@
 #include <sys/types.h>
 #include <sys/param.h> /* for MAXPATHLEN */
 #include <sys/stat.h>
-#ifdef QUICK
-#include <sys/mman.h>
-#endif
 #include <limits.h>    /* for PIPE_BUF */
 
 #if defined(HAVE_UTIMES)
@@ -98,8 +95,7 @@
 {
        struct magic_set *ms;
 
-       if ((ms = calloc((size_t)1, sizeof(struct magic_set))) == NULL)
-               return NULL;
+       ms = ecalloc((size_t)1, sizeof(struct magic_set));
 
        if (magic_setflags(ms, flags) == -1) {
                errno = EINVAL;
@@ -108,9 +104,7 @@
 
        ms->o.buf = ms->o.pbuf = NULL;
 
-       ms->c.li = malloc((ms->c.len = 10) * sizeof(*ms->c.li));
-       if (ms->c.li == NULL)
-               goto free;
+       ms->c.li = emalloc((ms->c.len = 10) * sizeof(*ms->c.li));
        
        ms->haderr = 0;
        ms->error = -1;
@@ -119,7 +113,7 @@
        ms->line = 0;
        return ms;
 free:
-       free(ms);
+       efree(ms);
        return NULL;
 }
 
@@ -135,10 +129,10 @@
                struct mlist *next = ml->next;
                struct magic *mg = ml->magic;
                file_delmagic(mg, ml->mapped, ml->nmagic);
-               free(ml);
+               efree(ml);
                ml = next;
        }
-       free(ml);
+       efree(ml);
 }
 
 private int
@@ -162,11 +156,19 @@
 public void
 magic_close(struct magic_set *ms)
 {
-       free_mlist(ms->mlist);
-       free(ms->o.pbuf);
-       free(ms->o.buf);
-       free(ms->c.li);
-       free(ms);
+       if (ms->mlist) {
+               free_mlist(ms->mlist);
+       }
+       if (ms->o.pbuf) {
+               efree(ms->o.pbuf);
+       }
+       if (ms->o.buf) {
+               efree(ms->o.buf);
+       }
+       if (ms->c.li) {
+               efree(ms->c.li);
+       }
+       efree(ms);
 }
 
 /*
@@ -267,8 +269,7 @@
         * some overlapping space for matches near EOF
         */
 #define SLOP (1 + sizeof(union VALUETYPE))
-       if ((buf = malloc(HOWMANY + SLOP)) == NULL)
-               return NULL;
+       buf = emalloc(HOWMANY + SLOP);
 
        if (file_reset(ms) == -1)
                goto done;
@@ -351,7 +352,7 @@
                goto done;
        rv = 0;
 done:
-       free(buf);
+       efree(buf);
        close_and_restore(ms, inname, fd, &sb);
        return rv == 0 ? file_getbuffer(ms) : NULL;
 }
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/readelf.c?r1=1.1&r2=1.1.2.1&diff_format=u
Index: php-src/ext/fileinfo/libmagic/readelf.c
diff -u php-src/ext/fileinfo/libmagic/readelf.c:1.1 
php-src/ext/fileinfo/libmagic/readelf.c:1.1.2.1
--- php-src/ext/fileinfo/libmagic/readelf.c:1.1 Fri Jul 11 14:13:50 2008
+++ php-src/ext/fileinfo/libmagic/readelf.c     Tue Aug 26 12:23:29 2008
@@ -789,20 +789,16 @@
                                file_badread(ms);
                                return -1;
                        }
-                       if ((nbuf = malloc((size_t)xsh_size)) == NULL) {
-                               file_error(ms, errno, "Cannot allocate memory"
-                                   " for note");
-                               return -1;
-                       }
+                       nbuf = emalloc((size_t)xsh_size);
                        if ((noff = lseek(fd, (off_t)xsh_offset, SEEK_SET)) ==
                            (off_t)-1) {
                                file_badread(ms);
-                               free(nbuf);
+                               efree(nbuf);
                                return -1;
                        }
                        if (read(fd, nbuf, (size_t)xsh_size) !=
                            (ssize_t)xsh_size) {
-                               free(nbuf);
+                               efree(nbuf);
                                file_badread(ms);
                                return -1;
                        }
@@ -818,11 +814,11 @@
                                        break;
                        }
                        if ((lseek(fd, off, SEEK_SET)) == (off_t)-1) {
-                               free(nbuf);
+                               efree(nbuf);
                                file_badread(ms);
                                return -1;
                        }
-                       free(nbuf);
+                       efree(nbuf);
                        break;
                }
        }
http://cvs.php.net/viewvc.cgi/php-src/ext/fileinfo/libmagic/softmagic.c?r1=1.1&r2=1.1.2.1&diff_format=u
Index: php-src/ext/fileinfo/libmagic/softmagic.c
diff -u php-src/ext/fileinfo/libmagic/softmagic.c:1.1 
php-src/ext/fileinfo/libmagic/softmagic.c:1.1.2.1
--- php-src/ext/fileinfo/libmagic/softmagic.c:1.1       Fri Jul 11 14:13:50 2008
+++ php-src/ext/fileinfo/libmagic/softmagic.c   Tue Aug 26 12:23:29 2008
@@ -127,9 +127,9 @@
 
                if ((m->flag & BINTEST) != mode) {
                        /* Skip sub-tests */
-                       while (magic[magindex + 1].cont_level != 0 &&
-                              ++magindex < nmagic)
+                       while (magic[magindex + 1].cont_level != 0 && 
++magindex < nmagic) {
                                continue;
+                       }
                        continue; /* Skip to next top-level test*/
                }
 
@@ -157,9 +157,9 @@
                         * main entry didn't match,
                         * flush its continuations
                         */
-                       while (magindex < nmagic - 1 &&
-                           magic[magindex + 1].cont_level != 0)
+                       while (magindex < nmagic - 1 && magic[magindex + 
1].cont_level != 0) {
                                magindex++;
+                       }
                        continue;
                }
 
@@ -197,8 +197,7 @@
                        }
                        ms->offset = m->offset;
                        if (m->flag & OFFADD) {
-                               ms->offset +=
-                                   ms->c.li[cont_level - 1].off;
+                               ms->offset += ms->c.li[cont_level - 1].off;
                        }
 
 #ifdef ENABLE_CONDITIONALS
@@ -282,11 +281,12 @@
 private int
 check_fmt(struct magic_set *ms, struct magic *m)
 {
-       regex_t rx;
+       regex_t rx = {0};
        int rc;
 
-       if (strchr(MAGIC_DESC, '%') == NULL)
+       if (strchr(MAGIC_DESC, '%') == NULL) {
                return 0;
+       }
 
        rc = regcomp(&rx, "%[-0-9\\.]*s", REG_EXTENDED|REG_NOSUB);
        if (rc) {
@@ -295,32 +295,14 @@
                file_magerror(ms, "regex error %d, (%s)", rc, errmsg);
                return -1;
        } else {
-               rc = regexec(&rx, MAGIC_DESC, 0, 0, 0);
+               regmatch_t *pmatch = (regmatch_t *)ecalloc(sizeof(regmatch_t), 
rx.re_nsub + 1);
+               rc = regexec(&rx, MAGIC_DESC, rx.re_nsub + 1, pmatch, 0);
+               efree(pmatch);
                regfree(&rx);
                return !rc;
        }
 }
 
-#ifndef HAVE_STRNDUP
-char * strndup(const char *, size_t);
-
-char *
-strndup(const char *str, size_t n)
-{
-       size_t len;
-       char *copy;
-
-       len = strlen(str);
-       if (len > n)
-               len = n;
-       if (!(copy = malloc(len + 1)))
-               return (NULL);
-       (void) memcpy(copy, str, len + 1);
-       copy[len] = '\0';
-       return (copy);
-}
-#endif /* HAVE_STRNDUP */
-
 private int32_t
 mprint(struct magic_set *ms, struct magic *m)
 {
@@ -338,7 +320,7 @@
                case -1:
                        return -1;
                case 1:
-                       if (asprintf(&buf, "%c", (unsigned char)v) < 0)
+                       if (spprintf(&buf, 0, "%c", (unsigned char)v) < 0)
                                return -1;
                        if (file_printf(ms, MAGIC_DESC, buf) == -1)
                                return -1;
@@ -359,7 +341,7 @@
                case -1:
                        return -1;
                case 1:
-                       if (asprintf(&buf, "%hu", (unsigned short)v) < 0)
+                       if (spprintf(&buf, 0, "%hu", (unsigned short)v) < 0)
                                return -1;
                        if (file_printf(ms, MAGIC_DESC, buf) == -1)
                                return -1;
@@ -381,7 +363,7 @@
                case -1:
                        return -1;
                case 1:
-                       if (asprintf(&buf, "%u", (uint32_t)v) < 0)
+                       if (spprintf(&buf, 0, "%u", (uint32_t)v) < 0)
                                return -1;
                        if (file_printf(ms, MAGIC_DESC, buf) == -1)
                                return -1;
@@ -467,7 +449,7 @@
                case -1:
                        return -1;
                case 1:
-                       if (asprintf(&buf, "%g", vf) < 0)
+                       if (spprintf(&buf, 0, "%g", vf) < 0)
                                return -1;
                        if (file_printf(ms, MAGIC_DESC, buf) == -1)
                                return -1;
@@ -488,7 +470,7 @@
                case -1:
                        return -1;
                case 1:
-                       if (asprintf(&buf, "%g", vd) < 0)
+                       if (spprintf(&buf, 0, "%g", vd) < 0)
                                return -1;
                        if (file_printf(ms, MAGIC_DESC, buf) == -1)
                                return -1;
@@ -505,13 +487,10 @@
                char *cp;
                int rval;
 
-               cp = strndup((const char *)ms->search.s, ms->search.rm_len);
-               if (cp == NULL) {
-                       file_oomem(ms, ms->search.rm_len);
-                       return -1;
-               }
+               cp = estrndup((const char *)ms->search.s, ms->search.rm_len);
+
                rval = file_printf(ms, MAGIC_DESC, cp);
-               free(cp);
+               efree(cp);
 
                if (rval == -1)
                        return -1;
@@ -1665,24 +1644,20 @@
        }
        case FILE_REGEX: {
                int rc;
-               regex_t rx;
+               regex_t rx = {0};
                char errmsg[512];
 
                if (ms->search.s == NULL)
                        return 0;
 
                l = 0;
-               rc = regcomp(&rx, m->value.s,
-                   REG_EXTENDED|REG_NEWLINE|
-                   ((m->str_flags & STRING_IGNORE_CASE) ? REG_ICASE : 0));
+               rc = regcomp(&rx, m->value.s, 
REG_EXTENDED|REG_NEWLINE|((m->str_flags & STRING_IGNORE_CASE) ? REG_ICASE : 0));
                if (rc) {
                        (void)regerror(rc, &rx, errmsg, sizeof(errmsg));
-                       file_magerror(ms, "regex error %d, (%s)",
-                           rc, errmsg);
+                       file_magerror(ms, "regex error %d, (%s)", rc, errmsg);
                        v = (uint64_t)-1;
-               }
-               else {
-                       regmatch_t pmatch[1];
+               } else {
+                       regmatch_t *pmatch = (regmatch_t 
*)ecalloc(sizeof(regmatch_t), rx.re_nsub + 1);
 #ifndef REG_STARTEND
 #define        REG_STARTEND    0
                        size_t l = ms->search.s_len - 1;
@@ -1692,8 +1667,7 @@
                        pmatch[0].rm_so = 0;
                        pmatch[0].rm_eo = ms->search.s_len;
 #endif
-                       rc = regexec(&rx, (const char *)ms->search.s,
-                           1, pmatch, REG_STARTEND);
+                       rc = regexec(&rx, (const char *)ms->search.s, 1, 
pmatch, REG_STARTEND);
 #if REG_STARTEND == 0
                        ((char *)(intptr_t)ms->search.s)[l] = c;
 #endif
@@ -1701,8 +1675,7 @@
                        case 0:
                                ms->search.s += (int)pmatch[0].rm_so;
                                ms->search.offset += (size_t)pmatch[0].rm_so;
-                               ms->search.rm_len =
-                                   (size_t)(pmatch[0].rm_eo - pmatch[0].rm_so);
+                               ms->search.rm_len = (size_t)(pmatch[0].rm_eo - 
pmatch[0].rm_so);
                                v = 0;
                                break;
 
@@ -1712,15 +1685,16 @@
 
                        default:
                                (void)regerror(rc, &rx, errmsg, sizeof(errmsg));
-                               file_magerror(ms, "regexec error %d, (%s)",
-                                   rc, errmsg);
+                               file_magerror(ms, "regexec error %d, (%s)", rc, 
errmsg);
                                v = (uint64_t)-1;
                                break;
                        }
                        regfree(&rx);
+                       efree(pmatch);
                }
-               if (v == (uint64_t)-1)
+               if (v == (uint64_t)-1) {
                        return -1;
+               }
                break;
        }
        default:

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to