Skip to content

Commit 183f3ba

Browse files
committed
Fixed writeFloat/DoubleArray not accepting ints
1 parent 26f5752 commit 183f3ba

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

classes/Types.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,12 +280,17 @@ template<typename TValue>
280280
bool typeHashTableToArray(HashTable* valueArrayHt, std::vector<TValue>& valueArray, std::type_identity<double> zendType) {
281281
zval* elementZv;
282282
ZEND_HASH_FOREACH_VAL(valueArrayHt, elementZv) {
283-
if (Z_TYPE_P(elementZv) != IS_DOUBLE) {
283+
TValue value;
284+
auto elementType = Z_TYPE_P(elementZv);
285+
if (elementType == IS_DOUBLE) {
286+
value = static_cast<TValue>(Z_DVAL_P(elementZv));
287+
} else if (elementType == IS_LONG) {
288+
value = static_cast<TValue>(Z_LVAL_P(elementZv));
289+
} else {
284290
//TODO: give the correct array key when strings are used - I don't know how to do this in a non-awkward way currently
285291
zend_type_error("Array must contain only float, %s given at position %zu", zend_zval_type_name(elementZv), valueArray.size());
286292
return false;
287293
}
288-
TValue value = static_cast<TValue>(Z_DVAL_P(elementZv));
289294
valueArray.push_back(value);
290295
} ZEND_HASH_FOREACH_END();
291296
return true;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
write(Float|Double)Array() should accept IS_LONG values
3+
--FILE--
4+
<?php
5+
6+
use pmmp\encoding\ByteBufferWriter;
7+
use pmmp\encoding\LE;
8+
use pmmp\encoding\BE;
9+
10+
$var = [1, 2.0, 3];
11+
12+
$writer = new ByteBufferWriter();
13+
LE::writeDoubleArray($writer, $var);
14+
var_dump(bin2hex($writer->getData()));
15+
16+
$writer = new ByteBufferWriter();
17+
BE::writeFloatArray($writer, $var);
18+
var_dump(bin2hex($writer->getData()));
19+
?>
20+
--EXPECTF--
21+
string(48) "000000000000f03f00000000000000400000000000000840"
22+
string(24) "3f8000004000000040400000"

0 commit comments

Comments
 (0)