@@ -87,6 +87,9 @@ static void php_swoole_table_row2array(swTable *table, swTableRow *row, zval *re
8787 array_init (return_value );
8888
8989 swTableColumn * col = NULL ;
90+ swTable_string_length_t vlen = 0 ;
91+ double dval = 0 ;
92+ int64_t lval = 0 ;
9093 char * k ;
9194
9295 sw_spinlock (& row -> lock );
@@ -99,30 +102,29 @@ static void php_swoole_table_row2array(swTable *table, swTableRow *row, zval *re
99102 }
100103 if (col -> type == SW_TABLE_STRING )
101104 {
102- swTable_string_length_t vlen = * ( swTable_string_length_t * ) ( row -> data + col -> index );
105+ memcpy ( & vlen , row -> data + col -> index , sizeof ( swTable_string_length_t ) );
103106 add_assoc_stringl_ex (return_value , col -> name -> str , col -> name -> length + 1 , row -> data + col -> index + sizeof (swTable_string_length_t ), vlen , 1 );
104107 }
105108 else if (col -> type == SW_TABLE_FLOAT )
106109 {
107- double dval = * ( double * ) ( row -> data + col -> index );
110+ memcpy ( & dval , row -> data + col -> index , sizeof ( dval ) );
108111 add_assoc_double_ex (return_value , col -> name -> str , col -> name -> length + 1 , dval );
109112 }
110113 else
111114 {
112- int64_t lval ;
113115 switch (col -> type )
114116 {
115117 case SW_TABLE_INT8 :
116- lval = * ( int8_t * ) ( row -> data + col -> index );
118+ memcpy ( & lval , row -> data + col -> index , 1 );
117119 break ;
118120 case SW_TABLE_INT16 :
119- lval = * ( int16_t * ) ( row -> data + col -> index );
121+ memcpy ( & lval , row -> data + col -> index , 2 );
120122 break ;
121123 case SW_TABLE_INT32 :
122- lval = * ( int32_t * ) ( row -> data + col -> index );
124+ memcpy ( & lval , row -> data + col -> index , 4 );
123125 break ;
124126 default :
125- lval = * ( int64_t * ) ( row -> data + col -> index );
127+ memcpy ( & lval , row -> data + col -> index , 8 );
126128 break ;
127129 }
128130 add_assoc_long_ex (return_value , col -> name -> str , col -> name -> length + 1 , lval );
0 commit comments