]> granicus.if.org Git - file/commitdiff
use memchr instead of strchr because the strign might not be NUL terminated.
authorChristos Zoulas <christos@zoulas.com>
Thu, 6 Nov 2008 15:38:28 +0000 (15:38 +0000)
committerChristos Zoulas <christos@zoulas.com>
Thu, 6 Nov 2008 15:38:28 +0000 (15:38 +0000)
ChangeLog
src/softmagic.c

index 20ce0f2c3a9c80fc4b9fbd2f5920b5e18a3e3ffe..c2e2213ac9793eb17a54bb5d72ee83721cdee10e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-11-06 10:35  Christos Zoulas <christos@astron.com>
+
+       * use memchr instead of strchr because the string
+         might not be NUL terminated (Scott MacVicar)
+
 2008-10-30 11:00  Reuben Thomas <rrt@sc3d.org>
 
        * Correct words counts in comments of struct magic.
index 3dff3c7ed005ce5b8c8ca745952c29d6f7c5e8e7..0eec2fa3f97755b2360cd17aea0723e036fec484 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: softmagic.c,v 1.125 2008/10/30 10:43:49 rrt Exp $")
+FILE_RCSID("@(#)$File: softmagic.c,v 1.126 2008/11/04 16:38:28 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -806,6 +806,7 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
                        const char *c;
                        const char *last;       /* end of search region */
                        const char *buf;        /* start of search region */
+                       const char *end;
                        size_t lines;
 
                        if (s == NULL) {
@@ -814,10 +815,10 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
                                return 0;
                        }
                        buf = (const char *)s + offset;
-                       last = (const char *)s + nbytes;
+                       end = last = (const char *)s + nbytes;
                        /* mget() guarantees buf <= last */
                        for (lines = linecnt, b = buf;
-                            lines && ((b = strchr(c = b, '\n')) || (b = strchr(c, '\r')));
+                            lines && ((b = memchr(c = b, '\n', end - b)) || (b = memchr(c, '\r', end - c)));
                             lines--, b++) {
                                last = b;
                                if (b[0] == '\r' && b[1] == '\n')