]> granicus.if.org Git - file/commitdiff
Use C locale for LC_CTYPE around one more regcomp().
authorkim <kim>
Tue, 18 Feb 2014 17:59:21 +0000 (17:59 +0000)
committerkim <kim>
Tue, 18 Feb 2014 17:59:21 +0000 (17:59 +0000)
src/softmagic.c

index b7228c611ff0c83282851d006cacaa765a9d25c6..799e55c0343b79fad668bf7df8342639566ea3ed 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: softmagic.c,v 1.174 2014/02/12 23:20:53 christos Exp $")
+FILE_RCSID("@(#)$File: softmagic.c,v 1.175 2014/02/18 11:09:31 kim Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -1891,6 +1891,7 @@ magiccheck(struct magic_set *ms, struct magic *m)
        double dl, dv;
        int matched;
        union VALUETYPE *p = &ms->ms_value;
+       char *old_lc_ctype;
 
        switch (m->type) {
        case FILE_BYTE:
@@ -2049,6 +2050,11 @@ magiccheck(struct magic_set *ms, struct magic *m)
                if (ms->search.s == NULL)
                        return 0;
 
+               old_lc_ctype = setlocale(LC_CTYPE, NULL);
+               assert(old_lc_ctype != NULL);
+               old_lc_ctype = strdup(old_lc_ctype);
+               assert(old_lc_ctype != NULL);
+               (void)setlocale(LC_CTYPE, "C");
                l = 0;
                rc = regcomp(&rx, m->value.s,
                    REG_EXTENDED|REG_NEWLINE|
@@ -2097,6 +2103,8 @@ magiccheck(struct magic_set *ms, struct magic *m)
                        }
                        regfree(&rx);
                }
+               (void)setlocale(LC_CTYPE, old_lc_ctype);
+               free(old_lc_ctype);
                if (v == (uint64_t)-1)
                        return -1;
                break;