30FILE_RCSID(
"@(#)$File: funcs.c,v 1.140 2023/05/21 17:08:34 christos Exp $")
42#if defined(HAVE_WCHAR_H)
45#if defined(HAVE_WCTYPE_H)
51#define SIZE_MAX ((size_t)~0)
80 while (*
p && isdigit((
unsigned char)*
p))
81 fw = fw * 10 + (*
p++ -
'0');
88 snprintf(
msg, mlen,
"field %s too large: %d", what, fw);
97 for (
p = fmt; *
p;
p++) {
120 if (!isalpha((
unsigned char)*
p)) {
144 file_error(ms, 0,
"Bad magic format `%s' (%s)", fmt, tbuf);
149 if (
len > 1024 ||
len + ms->
o.
blen > 1024 * 1024) {
150 size_t blen = ms->
o.
blen;
187file_error_core(struct
magic_set *ms,
int error, const
char *f, va_list va,
197 if (ms->o.buf && *ms->o.buf)
212 file_error_core(ms,
error, f, va, 0);
225 file_error_core(ms, 0, f, va, ms->
line);
249#define FILE_SEPARATOR "\n- "
292 nb ?
"octet-stream" :
"x-empty") == -1)
319 const void *
buf,
size_t nb)
321 int m = 0,
rv = 0, looks_text = 0;
322 const char *code =
NULL;
323 const char *code_mime =
"binary";
324 const char *def =
"data";
325 const char *ftype =
NULL;
348 }
else if (nb == 1) {
349 def =
"very short file (no magic)";
355 &code, &code_mime, &ftype);
360 m = file_os2_apptype(ms, inname, &b);
362 (
void)
fprintf(stderr,
"[try os2_apptype %d]\n", m);
374#ifdef PHP_FILEINFO_UNCOMPRESS
377 m = file_zmagic(ms, &b, inname);
391 if (checkdone(ms, &
rv))
402 if (checkdone(ms, &
rv))
413 if (checkdone(ms, &
rv))
424 if (checkdone(ms, &
rv))
435 if (checkdone(ms, &
rv))
471 if (m == 1 && rbuf) {
476 if (checkdone(ms, &
rv))
510#ifdef PHP_FILEINFO_UNCOMPRESS
525 if (checkloaded && ms->
mlist[0] ==
NULL) {
539#define OCTALIFY(n, o) \
541 (void)(*(n)++ = '\\', \
542 *(n)++ = ((CAST(uint32_t, *(o)) >> 6) & 3) + '0', \
543 *(n)++ = ((CAST(uint32_t, *(o)) >> 3) & 7) + '0', \
544 *(n)++ = ((CAST(uint32_t, *(o)) >> 0) & 7) + '0', \
550 char *pbuf, *op, *np;
575#if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH)
580 size_t bytesconsumed;
589 bytesconsumed = mbrtowc(&nextchar, op,
591 if (bytesconsumed ==
CAST(
size_t, -1) ||
592 bytesconsumed ==
CAST(
size_t, -2)) {
597 if (iswprint(nextchar)) {
602 while (bytesconsumed-- > 0)
614 for (np = ms->
o.
pbuf, op = ms->
o.
buf; *op;) {
615 if (isprint(
CAST(
unsigned char, *op))) {
630 if (level >= ms->
c.
len) {
631 len = (ms->
c.
len = 20 + level) *
sizeof(*ms->
c.
li);
641#ifdef ENABLE_CONDITIONALS
667 zend_string_release(pattern);
671 zend_string_release(pattern);
673 repl = zend_string_init(rep,
strlen(rep), 0);
739 const char *str,
size_t slen)
741 char *
ptr, *eptr =
buf + bufsiz - 1;
742 const unsigned char *
s =
RCAST(
const unsigned char *, str);
743 const unsigned char *es =
s + slen;
753 *
ptr++ = ((
CAST(
unsigned int, *
s) >> 6) & 7) +
'0';
754 *
ptr++ = ((
CAST(
unsigned int, *
s) >> 3) & 7) +
'0';
755 *
ptr++ = ((
CAST(
unsigned int, *
s) >> 0) & 7) +
'0';
774 "%8x-%4hx-%4hx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx",
782 int rv =
sscanf(
s,
"%8x-%4hx-%4hx-%2hx%2hx-%2hx%2hx%2hx%2hx%2hx%2hx",
784 &data16[2], &data16[3], &data16[4], &data16[5],
785 &data16[6], &data16[7]) == 11 ? 0 : -1;
787 for (i = 0; i < 8; i++)
788 g->
data4[i] = data16[i];
800 return snprintf(str,
len,
"%.8X-%.4hX-%.4hX-%.2hhX%.2hhX-"
801 "%.2hhX%.2hhX%.2hhX%.2hhX%.2hhX%.2hhX",
806 return snprintf(str,
len,
"%.8X-%.4hX-%.4hX-%.2hX%.2hX-"
807 "%.2hX%.2hX%.2hX%.2hX%.2hX%.2hX",
820#elif defined(HAVE_PIPE2)
837 return fcntl(
fd, F_SETFD, 0);
848 while (isspace(
CAST(
unsigned char, *str)))
854 while (isspace(
CAST(
unsigned char, *
last)))
if(function_exists("date_default_timezone_set")) simple()
file_protected int file_ascmagic(struct magic_set *ms, const struct buffer *b, int text)
sscanf(string $string, string $format, mixed &... $vars)
fprintf($stream, string $format, mixed ... $values)
strchr(string $haystack, string $needle, bool $before_needle=false)
void buffer_fini(struct buffer *b)
void buffer_init(struct buffer *b, int fd, const zend_stat_t *st, const void *data, size_t len)
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
file_protected int file_encoding(struct magic_set *ms, const struct buffer *b, file_unichar_t **ubuf, size_t *ulen, const char **code, const char **code_mime, const char **type)
file_protected int file_printf(struct magic_set *, const char *,...) __attribute__((__format__(__printf__
file_protected int file_is_csv(struct magic_set *, const struct buffer *, int, const char *)
file_protected int file_is_tar(struct magic_set *, const struct buffer *)
file_protected int file_trycdf(struct magic_set *, const struct buffer *)
file_protected int file_is_json(struct magic_set *, const struct buffer *)
file_protected int file_softmagic(struct magic_set *, const struct buffer *, uint16_t *, uint16_t *, int, int)
file_protected int file_tryelf(struct magic_set *, const struct buffer *)
file_protected int file_is_simh(struct magic_set *, const struct buffer *)
file_protected int file_pipe_closexec(int *)
file_protected int file_clear_closexec(int fd)
file_protected void file_badread(struct magic_set *ms)
file_protected int file_parse_guid(const char *s, uint64_t *guid)
file_protected int file_vprintf(struct magic_set *ms, const char *fmt, va_list ap)
file_protected const char * file_getbuffer(struct magic_set *ms)
file_protected int file_printf(struct magic_set *ms, const char *fmt,...)
file_protected void file_magerror(struct magic_set *ms, const char *f,...)
file_protected size_t file_printedlen(const struct magic_set *ms)
file_protected void file_oomem(struct magic_set *ms, size_t len)
file_protected int file_check_mem(struct magic_set *ms, unsigned int level)
file_protected int file_buffer(struct magic_set *ms, php_stream *stream, zend_stat_t *st, const char *inname __attribute__((__unused__)), const void *buf, size_t nb)
file_protected int file_default(struct magic_set *ms, size_t nb)
file_protected char * file_printable(struct magic_set *ms, char *buf, size_t bufsiz, const char *str, size_t slen)
file_protected int file_reset(struct magic_set *ms, int checkloaded)
file_protected int file_replace(struct magic_set *ms, const char *pat, const char *rep)
file_protected void file_badseek(struct magic_set *ms)
file_protected int file_separator(struct magic_set *ms)
file_protected int file_checkfmt(char *msg, size_t mlen, const char *fmt)
file_private int file_checkfield(char *msg, size_t mlen, const char *what, const char **pp)
file_protected void file_error(struct magic_set *ms, int error, const char *f,...)
file_protected char * file_strtrim(char *str)
file_private void file_clearbuf(struct magic_set *ms)
file_protected char * file_pop_buffer(struct magic_set *ms, file_pushbuf_t *pb)
file_protected char * file_copystr(char *buf, size_t blen, size_t width, const char *str)
file_protected int file_print_guid(char *str, size_t len, const uint64_t *guid)
file_protected file_pushbuf_t * file_push_buffer(struct magic_set *ms)
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
#define MAGIC_NO_CHECK_CDF
#define MAGIC_NO_CHECK_TAR
#define MAGIC_NO_CHECK_COMPRESS
#define MAGIC_NO_CHECK_TEXT
#define MAGIC_MIME_ENCODING
#define MAGIC_NO_CHECK_ELF
#define MAGIC_NO_CHECK_SOFT
#define MAGIC_NO_CHECK_ENCODING
#define MAGIC_NO_CHECK_SIMH
#define MAGIC_NO_CHECK_JSON
#define MAGIC_NO_CHECK_CSV
#define MAGIC_NO_CHECK_APPTYPE
zend_string * convert_libmagic_pattern(const char *val, size_t len, uint32_t options)
PHPAPI zend_string * php_pcre_replace_impl(pcre_cache_entry *pce, zend_string *subject_str, const char *subject, size_t subject_len, zend_string *replace_str, size_t limit, size_t *replace_count)
PHPAPI pcre_cache_entry * pcre_get_compiled_regex_cache_ex(zend_string *regex, bool locale_aware)
struct _pcre_cache_entry pcre_cache_entry
#define php_stream_cast(stream, as, ret, show_err)
struct _php_stream php_stream
struct mlist * mlist[MAGIC_SETS]
#define erealloc(ptr, size)
strcmp(string $string1, string $string2)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
struct _zend_string zend_string