Browse Source

Feat(Read): big numbers

viest 3 years ago
parent
commit
05354cc652
4 changed files with 48 additions and 6 deletions
  1. 2 1
      .gitignore
  2. 4 4
      kernel/read.c
  3. 1 1
      tests/data_string_key.phpt
  4. 41 0
      tests/open_xlsx_get_data_bignumbers.phpt

+ 2 - 1
.gitignore

@@ -2,6 +2,8 @@
 *.lo
 *.la
 .libs
+.idea
+.DS_Store
 .dockerignore
 Dockerfile
 debug
@@ -40,7 +42,6 @@ tests/*/*.exp
 tests/*/*.log
 tests/*/*.sh
 tmp-php.ini
-.idea
 cmake-build-debug
 CMakeLists.txt
 local_test.php

+ 4 - 4
kernel/read.c

@@ -180,22 +180,22 @@ void data_to_custom_type(const char *string_value, const size_t string_value_len
             is_numeric_string(string_value, string_value_length, &_long, &_double, 0);
 
             if (Z_TYPE_P(zv_result_t) == IS_ARRAY) {
-                if (_double > 0) {
+                if (_double > 0 && _double <= (double)ZEND_LONG_MAX) {
                     add_index_double(zv_result_t, zv_hashtable_index, _double);
                     return;
                 }
 
-                if (_long > 0) {
+                if (_long > 0 && _long <= ZEND_LONG_MAX) {
                     add_index_long(zv_result_t, zv_hashtable_index, _long);
                     return;
                 }
             } else {
-                if (_double > 0) {
+                if (_double > 0 && _double <= (double)ZEND_LONG_MAX) {
                     ZVAL_DOUBLE(zv_result_t, _double);
                     return;
                 }
 
-                if (_long > 0) {
+                if (_long > 0 && _long <= ZEND_LONG_MAX) {
                     ZVAL_LONG(zv_result_t, _long);
                     return;
                 }

+ 1 - 1
tests/data_string_key.phpt

@@ -33,7 +33,7 @@ var_dump($excel->nextRow());
 ?>
 --CLEAN--
 <?php
-@unlink(__DIR__ . '/open_xlsx_next_row.xlsx');
+@unlink(__DIR__ . '/data_string_key.xlsx');
 ?>
 --EXPECT--
 array(2) {

+ 41 - 0
tests/open_xlsx_get_data_bignumbers.phpt

@@ -0,0 +1,41 @@
+--TEST--
+Check for vtiful presence
+--SKIPIF--
+<?php
+require __DIR__ . '/include/skipif.inc';
+skip_disable_reader();
+?>
+--FILE--
+<?php
+$config   = ['path' => './tests'];
+$excel    = new \Vtiful\Kernel\Excel($config);
+$filePath = $excel->fileName('open_xlsx_get_data_bignumbers.xlsx')
+    ->header(['Item'])
+    ->data([
+        ['9999999999999999999999999999999999999999999999999999999999999'],
+    ])
+    ->output();
+
+$data = $excel->openFile('open_xlsx_get_data_bignumbers.xlsx')
+    ->openSheet()
+    ->getSheetData();
+
+var_dump($data);
+?>
+--CLEAN--
+<?php
+@unlink(__DIR__ . '/open_xlsx_get_data_bignumbers.xlsx');
+?>
+--EXPECT--
+array(2) {
+  [0]=>
+  array(1) {
+    [0]=>
+    string(4) "Item"
+  }
+  [1]=>
+  array(1) {
+    [0]=>
+    string(61) "9999999999999999999999999999999999999999999999999999999999999"
+  }
+}