From 9ddac3f12409168fb575a1220a6c4fde69bfc1e9 Mon Sep 17 00:00:00 2001 From: Taneli Leppa Date: Thu, 20 Mar 2014 12:00:45 +0200 Subject: [PATCH] Passing integers that didn't fit in 32-bit integers from PHP to Javascript did not work properly, now uses float to pass larger numbers. --- package.xml | 1 + v8js_convert.cc | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/package.xml b/package.xml index c15f6ae..c5205e4 100644 --- a/package.xml +++ b/package.xml @@ -91,6 +91,7 @@ http://pear.php.net/dtd/package-2.0.xsd"> + diff --git a/v8js_convert.cc b/v8js_convert.cc index 8e9c2ab..6d7b639 100644 --- a/v8js_convert.cc +++ b/v8js_convert.cc @@ -28,6 +28,7 @@ extern "C" { #include "php_v8js_macros.h" #include #include +#include static void php_v8js_weak_object_callback(const v8::WeakCallbackData &data); @@ -852,6 +853,7 @@ static v8::Handle php_v8js_hash_to_jsarr(zval *value, v8::Isolate *is v8::Handle zval_to_v8js(zval *value, v8::Isolate *isolate TSRMLS_DC) /* {{{ */ { v8::Handle jsValue; + long v; switch (Z_TYPE_P(value)) { @@ -868,7 +870,12 @@ v8::Handle zval_to_v8js(zval *value, v8::Isolate *isolate TSRMLS_DC) break; case IS_LONG: - jsValue = V8JS_INT(Z_LVAL_P(value)); + v = Z_LVAL_P(value); + if (v < - std::numeric_limits::min() || v > std::numeric_limits::max()) { + jsValue = V8JS_FLOAT((double)v); + } else { + jsValue = V8JS_INT(v); + } break; case IS_DOUBLE: