GRAYBYTE WORDPRESS FILE MANAGER2284

Server IP : 198.54.121.189 / Your IP : 216.73.216.112
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/alt/php81/usr/include/php/Zend/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/alt/php81/usr/include/php/Zend//zend_multiply.h
/*
   +----------------------------------------------------------------------+
   | Zend Engine                                                          |
   +----------------------------------------------------------------------+
   | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
   +----------------------------------------------------------------------+
   | This source file is subject to version 2.00 of the Zend license,     |
   | that is bundled with this package in the file LICENSE, and is        |
   | available through the world-wide-web at the following url:           |
   | http://www.zend.com/license/2_00.txt.                                |
   | If you did not receive a copy of the Zend license and are unable to  |
   | obtain it through the world-wide-web, please send a note to          |
   | license@zend.com so we can mail you a copy immediately.              |
   +----------------------------------------------------------------------+
   | Authors: Sascha Schumann <sascha@schumann.cx>                        |
   |          Ard Biesheuvel <ard.biesheuvel@linaro.org>                  |
   +----------------------------------------------------------------------+
*/

#include "zend_portability.h"

#ifndef ZEND_MULTIPLY_H
#define ZEND_MULTIPLY_H

#if PHP_HAVE_BUILTIN_SMULL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long __tmpvar;		 											\
	if (((usedval) = __builtin_smull_overflow((a), (b), &__tmpvar))) {	\
		(dval) = (double) (a) * (double) (b);						\
	}																\
	else (lval) = __tmpvar;											\
} while (0)

#elif PHP_HAVE_BUILTIN_SMULLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long long __tmpvar; 											\
	if (((usedval) = __builtin_smulll_overflow((a), (b), &__tmpvar))) {	\
		(dval) = (double) (a) * (double) (b);						\
	}																\
	else (lval) = __tmpvar;											\
} while (0)

#elif (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	zend_long __tmpvar; 													\
	__asm__ ("imul %3,%0\n"											\
		"adc $0,%1" 												\
			: "=r"(__tmpvar),"=r"(usedval) 							\
			: "0"(a), "r"(b), "1"(0));								\
	if (usedval) (dval) = (double) (a) * (double) (b);				\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(__arm__) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	zend_long __tmpvar; 													\
	__asm__("smull %0, %1, %2, %3\n"								\
		"sub %1, %1, %0, asr #31"									\
			: "=r"(__tmpvar), "=r"(usedval)							\
			: "r"(a), "r"(b));										\
	if (usedval) (dval) = (double) (a) * (double) (b);				\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(__aarch64__) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	zend_long __tmpvar; 													\
	__asm__("mul %0, %2, %3\n"										\
		"smulh %1, %2, %3\n"										\
		"sub %1, %1, %0, asr #63\n"									\
			: "=&r"(__tmpvar), "=&r"(usedval)						\
			: "r"(a), "r"(b));										\
	if (usedval) (dval) = (double) (a) * (double) (b);				\
	else (lval) = __tmpvar;											\
} while (0)

#elif defined(ZEND_WIN32)

# ifdef _M_X64
#  pragma intrinsic(_mul128)
#  define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {       \
	__int64 __high; \
	__int64 __low = _mul128((a), (b), &__high); \
	if ((__low >> 63I64) == __high) { \
		(usedval) = 0; \
		(lval) = __low; \
	} else { \
		(usedval) = 1; \
		(dval) = (double)(a) * (double)(b); \
	} \
} while (0)
# else
#  define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	zend_long   __lres  = (a) * (b);										\
	long double __dres  = (long double)(a) * (long double)(b);		\
	long double __delta = (long double) __lres - __dres;			\
	if ( ((usedval) = (( __dres + __delta ) != __dres))) {			\
		(dval) = __dres;											\
	} else {														\
		(lval) = __lres;											\
	}																\
} while (0)
# endif

#elif defined(__powerpc64__) && defined(__GNUC__)

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long __low, __high;						\
	__asm__("mulld %0,%2,%3\n\t"					\
		"mulhd %1,%2,%3\n"					\
		: "=&r"(__low), "=&r"(__high)				\
		: "r"(a), "r"(b));					\
	if ((__low >> 63) != __high) {					\
		(dval) = (double) (a) * (double) (b);			\
		(usedval) = 1;						\
	} else {							\
		(lval) = __low;						\
		(usedval) = 0;						\
	}								\
} while (0)

#elif SIZEOF_ZEND_LONG == 4

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	int64_t __result = (int64_t) (a) * (int64_t) (b);				\
	if (__result > ZEND_LONG_MAX || __result < ZEND_LONG_MIN) {		\
		(dval) = (double) __result;									\
		(usedval) = 1;												\
	} else {														\
		(lval) = (long) __result;									\
		(usedval) = 0;												\
	}																\
} while (0)

#else

#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do {	\
	long   __lres  = (a) * (b);										\
	long double __dres  = (long double)(a) * (long double)(b);		\
	long double __delta = (long double) __lres - __dres;			\
	if ( ((usedval) = (( __dres + __delta ) != __dres))) {			\
		(dval) = __dres;											\
	} else {														\
		(lval) = __lres;											\
	}																\
} while (0)

#endif

#if defined(__GNUC__) && (defined(__native_client__) || defined(i386))

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res = nmemb;
	size_t m_overflow = 0;

	if (ZEND_CONST_COND(offset == 0, 0)) {
		__asm__ ("mull %3\n\tadcl $0,%1"
	     : "=&a"(res), "=&d" (m_overflow)
	     : "%0"(res),
	       "rm"(size));
	} else {
		__asm__ ("mull %3\n\taddl %4,%0\n\tadcl $0,%1"
	     : "=&a"(res), "=&d" (m_overflow)
	     : "%0"(res),
	       "rm"(size),
	       "rm"(offset));
	}

	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__x86_64__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res = nmemb;
	zend_ulong m_overflow = 0;

#ifdef __ILP32__ /* x32 */
# define LP_SUFF "l"
#else /* amd64 */
# define LP_SUFF "q"
#endif

	if (ZEND_CONST_COND(offset == 0, 0)) {
		__asm__ ("mul" LP_SUFF  " %3\n\t"
			"adc $0,%1"
			: "=&a"(res), "=&d" (m_overflow)
			: "%0"(res),
			  "rm"(size));
	} else {
		__asm__ ("mul" LP_SUFF  " %3\n\t"
			"add %4,%0\n\t"
			"adc $0,%1"
			: "=&a"(res), "=&d" (m_overflow)
			: "%0"(res),
			  "rm"(size),
			  "rm"(offset));
	}
#undef LP_SUFF
	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__arm__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res;
	zend_ulong m_overflow;

	__asm__ ("umlal %0,%1,%2,%3"
		: "=r"(res), "=r"(m_overflow)
		: "r"(nmemb),
		  "r"(size),
		  "0"(offset),
		  "1"(0));

	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__aarch64__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res;
	zend_ulong m_overflow;

	__asm__ ("mul %0,%2,%3\n\tumulh %1,%2,%3\n\tadds %0,%0,%4\n\tadc %1,%1,xzr"
		: "=&r"(res), "=&r"(m_overflow)
		: "r"(nmemb),
		  "r"(size),
		  "r"(offset));

	if (UNEXPECTED(m_overflow)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}

#elif defined(__GNUC__) && defined(__powerpc64__)

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
        size_t res;
        unsigned long m_overflow;

        __asm__ ("mulld %0,%2,%3\n\t"
                 "mulhdu %1,%2,%3\n\t"
                 "addc %0,%0,%4\n\t"
                 "addze %1,%1\n"
             : "=&r"(res), "=&r"(m_overflow)
             : "r"(nmemb),
               "r"(size),
               "r"(offset));

        if (UNEXPECTED(m_overflow)) {
                *overflow = 1;
                return 0;
        }
        *overflow = 0;
        return res;
}

#elif SIZEOF_SIZE_T == 4

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	uint64_t res = (uint64_t) nmemb * (uint64_t) size + (uint64_t) offset;

	if (UNEXPECTED(res > UINT64_C(0xFFFFFFFF))) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return (size_t) res;
}

#else

static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, bool *overflow)
{
	size_t res = nmemb * size + offset;
	double _d  = (double)nmemb * (double)size + (double)offset;
	double _delta = (double)res - _d;

	if (UNEXPECTED((_d + _delta ) != _d)) {
		*overflow = 1;
		return 0;
	}
	*overflow = 0;
	return res;
}
#endif

static zend_always_inline size_t zend_safe_address_guarded(size_t nmemb, size_t size, size_t offset)
{
	bool overflow;
	size_t ret = zend_safe_address(nmemb, size, offset, &overflow);

	if (UNEXPECTED(overflow)) {
		zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset);
		return 0;
	}
	return ret;
}

/* A bit more generic version of the same */
static zend_always_inline size_t zend_safe_addmult(size_t nmemb, size_t size, size_t offset, const char *message)
{
	bool overflow;
	size_t ret = zend_safe_address(nmemb, size, offset, &overflow);

	if (UNEXPECTED(overflow)) {
		zend_error_noreturn(E_ERROR, "Possible integer overflow in %s (%zu * %zu + %zu)", message, nmemb, size, offset);
		return 0;
	}
	return ret;
}

#endif /* ZEND_MULTIPLY_H */

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
April 09 2025 14:16:53
root / linksafe
0755
Optimizer
--
May 13 2025 08:39:18
root / linksafe
0755
zend.h
15.058 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_API.h
93.854 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_alloc.h
18.844 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_alloc_sizes.h
2.567 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_arena.h
5.921 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_ast.h
12.628 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_attributes.h
5.107 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_attributes_arginfo.h
1.782 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_bitset.h
7.739 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_build.h
1.588 KB
April 09 2025 14:17:00
root / linksafe
0644
zend_builtin_functions.h
1.478 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_builtin_functions_arginfo.h
13.317 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_closures.h
2.236 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_closures_arginfo.h
2.035 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_compile.h
45.855 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_config.h
0.031 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_constants.h
6.549 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_cpuinfo.h
7.379 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_dtrace.h
2.003 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_enum.h
2.558 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_enum_arginfo.h
1.664 KB
April 09 2025 14:17:01
root / linksafe
0644
zend_errors.h
2.344 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_exceptions.h
4.444 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_exceptions_arginfo.h
16.943 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_execute.h
20.02 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_extensions.h
6.084 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_fibers.h
4.606 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_fibers_arginfo.h
3.485 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_float.h
15.076 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_gc.h
3.82 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_gdb.h
1.387 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_generators.h
7.243 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_generators_arginfo.h
2.722 KB
April 09 2025 14:17:02
root / linksafe
0644
zend_globals.h
8.807 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_globals_macros.h
2.744 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_hash.h
39.665 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_highlight.h
2.242 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_inheritance.h
2.3 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_ini.h
10.052 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_ini_parser.h
2.666 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_ini_scanner.h
1.845 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_ini_scanner_defs.h
0.22 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_interfaces.h
3.696 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_interfaces_arginfo.h
7.841 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_istdiostream.h
1.501 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_iterators.h
3.497 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_language_parser.h
5.959 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_language_scanner.h
2.973 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_language_scanner_defs.h
0.303 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_list.h
3.394 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_llist.h
3.713 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_long.h
4.115 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_map_ptr.h
3.568 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_max_execution_timer.h
1.449 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_modules.h
4.717 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_multibyte.h
4.782 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_multiply.h
9.615 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_object_handlers.h
13.972 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_objects.h
1.771 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_objects_API.h
4.542 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_observer.h
4.206 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_operators.h
29.561 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_portability.h
21.638 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_ptr_stack.h
4.19 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_range_check.h
2.93 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_signal.h
3.979 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_smart_str.h
5.673 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_smart_str_public.h
1.101 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_smart_string.h
4.108 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_smart_string_public.h
1.211 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_sort.h
1.499 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_stack.h
2.304 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_stream.h
3.531 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_string.h
19.231 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_strtod.h
2.101 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_strtod_int.h
3.334 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_system_id.h
1.371 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_type_info.h
4.294 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_types.h
45.196 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_variables.h
2.993 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_virtual_cwd.h
12.317 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm.h
1.906 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm_def.h
277.719 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm_execute.h
2.01 MB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm_handlers.h
89.419 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm_opcodes.h
12.43 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm_trace_handlers.h
3.137 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm_trace_lines.h
1.714 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_vm_trace_map.h
2.599 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_weakrefs.h
1.673 KB
April 09 2025 14:17:03
root / linksafe
0644
zend_weakrefs_arginfo.h
3.397 KB
April 09 2025 14:17:03
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF